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:
Surface— hands out aFrameto draw into and presents damaged regions.InputSource— drains platform input intoInputEvents.
§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;