Skip to main content

Crate denise

Crate denise 

Source
Expand description

Denise — a direct-rendering UI toolkit for systems without a desktop environment.

This crate is the platform-agnostic core. It owns geometry, colour, the pixel buffer contract, input events and damage tracking. It contains no platform code and no unsafe.

Backends implement two traits:

§Frame lifecycle

let mut frame = surface.acquire()?;
// The buffer we just got back may be several frames old. Repaint everything
// that has been damaged since it was last current, not just this frame's damage.
let damage: &[Rect] = tracker.resolve(frame.age());
// ... draw into `frame`, clipped to `damage` ...
drop(frame);
surface.present(damage)?;
tracker.end_frame();

Getting that sequence wrong is the classic double-buffering bug: repaint only the current frame’s damage and every second frame shows stale content.

§Status

M0. The abstraction exists and is proven against a desktop backend; the scene graph, component model and hardware backends are not here yet. See the README.

Re-exports§

pub use color::Color;
pub use damage::DamageTracker;
pub use damage::MAX_DAMAGE_RECTS;
pub use damage::RectList;
pub use geom::Point;
pub use geom::Rect;
pub use geom::Size;
pub use input::ElementState;
pub use input::InputEvent;
pub use input::InputSource;
pub use input::KeyCode;
pub use input::Modifiers;
pub use input::PointerButton;
pub use input::TouchId;
pub use surface::BufferAge;
pub use surface::Frame;
pub use surface::PixelFormat;
pub use surface::Surface;
pub use surface::SurfaceError;
pub use theme::ColorScheme;
pub use theme::Metrics;
pub use theme::Radius;
pub use theme::Role;
pub use theme::Theme;

Modules§

color
Straight (non-premultiplied) 8-bit-per-channel colour.
damage
Dirty-rectangle tracking.
geom
Integer geometry.
input
Backend-independent input events.
surface
The pixel buffer contract every backend implements.
theme
Semantic theming.