Trait gui::Renderer

source ·
pub trait Renderer {
    // Required methods
    fn renderable_area(&self) -> BBox;
    fn render(&self, object: &dyn Renderable, cap: &dyn Cap, bbox: BBox) -> BBox;

    // Provided methods
    fn pre_render(&self) { ... }
    fn render_done(&self, object: &dyn Renderable, cap: &dyn Cap, bbox: BBox) { ... }
    fn post_render(&self) { ... }
}
Expand description

An abstraction for objects used for rendering widgets.

Required Methods§

source

fn renderable_area(&self) -> BBox

Retrieve the bounding box of the renderable area (typically the screen). Note that the units to be used are not specified. That is, the result could be in pixels, characters (in case of a terminal), or just arbitrary numbers (if virtual coordinates are being used), as long as this Renderer knows how to interpret them.

source

fn render(&self, object: &dyn Renderable, cap: &dyn Cap, bbox: BBox) -> BBox

Render an object.

Objects are represented as Renderable and need to be cast into the actual widget type to render by the Renderer itself, should that be necessary. A simplified implementation could look as follows:

fn render(&self, widget: &dyn Renderable, cap: &dyn Cap, bbox: BBox) -> BBox {
  if let Some(widget1) = widget.downcast_ref::<ConcreteWidget1>() {
    self.render_concrete_widget1(widget1, bbox)
  } else if let Some(widget2) = widget.downcast_ref::<ConcreteWidget1>() {
    self.render_concrete_widget2(widget2, bbox)
  } else {
    panic!("Renderable {:?} is unknown to the renderer", widget)
  }
}

Provided Methods§

source

fn pre_render(&self)

Perform some pre-render step.

source

fn render_done(&self, object: &dyn Renderable, cap: &dyn Cap, bbox: BBox)

A method invoked once rendering of a widget and all its children concluded.

source

fn post_render(&self)

Perform some post-render step.

Implementors§