pub trait Theme<DS: DrawSharedImpl> {
type Window: Window;
type Draw<'a>: ThemeDraw
where DS: 'a,
Self: 'a;
// Required methods
fn init(&mut self, config: &RefCell<Config>);
fn new_window(&mut self, config: &WindowConfig) -> Self::Window;
fn update_window(
&mut self,
window: &mut Self::Window,
config: &WindowConfig,
);
fn draw<'a>(
&'a self,
draw: DrawIface<'a, DS>,
ev: &'a mut EventState,
window: &'a mut Self::Window,
) -> Self::Draw<'a>;
fn draw_upcast<'a>(
draw: DrawIface<'a, DS>,
ev: &'a mut EventState,
w: &'a mut Self::Window,
cols: &'a ColorsLinear,
) -> Self::Draw<'a>;
fn clear_color(&self) -> Rgba;
}
Expand description
A theme provides widget sizing and drawing implementations.
The theme is generic over some DrawIface
.
Objects of this type are copied within each window’s data structure. For large resources (e.g. fonts and icons) consider using external storage.
Required Associated Types§
Required Methods§
Sourcefn init(&mut self, config: &RefCell<Config>)
fn init(&mut self, config: &RefCell<Config>)
Theme initialisation
The toolkit must call this method before Theme::new_window
to allow initialisation specific to the DrawIface
.
Sourcefn new_window(&mut self, config: &WindowConfig) -> Self::Window
fn new_window(&mut self, config: &WindowConfig) -> Self::Window
Construct per-window storage
Updates theme from configuration and constructs a scaled per-window size cache.
On “standard” monitors, the dpi_factor
is 1. High-DPI screens may
have a factor of 2 or higher. The factor may not be an integer; e.g.
9/8 = 1.125
works well with many 1440p screens. It is recommended to
round dimensions to the nearest integer, and cache the result:
self.margin = i32::conv_nearest(MARGIN * factor);
A reference to the draw backend is provided allowing configuration.
Sourcefn update_window(&mut self, window: &mut Self::Window, config: &WindowConfig)
fn update_window(&mut self, window: &mut Self::Window, config: &WindowConfig)
Update a window created by Theme::new_window
This is called when the DPI factor changes or theme config or dimensions change.
Sourcefn draw<'a>(
&'a self,
draw: DrawIface<'a, DS>,
ev: &'a mut EventState,
window: &'a mut Self::Window,
) -> Self::Draw<'a>
fn draw<'a>( &'a self, draw: DrawIface<'a, DS>, ev: &'a mut EventState, window: &'a mut Self::Window, ) -> Self::Draw<'a>
Prepare to draw and construct a [ThemeDraw
] object
This is called once per window per frame and should do any necessary preparation such as loading fonts and textures which are loaded on demand.
Drawing via this [ThemeDraw
] object is restricted to the specified rect
.
The window
is guaranteed to be one created by a call to
Theme::new_window
on self
.
Sourcefn draw_upcast<'a>(
draw: DrawIface<'a, DS>,
ev: &'a mut EventState,
w: &'a mut Self::Window,
cols: &'a ColorsLinear,
) -> Self::Draw<'a>
fn draw_upcast<'a>( draw: DrawIface<'a, DS>, ev: &'a mut EventState, w: &'a mut Self::Window, cols: &'a ColorsLinear, ) -> Self::Draw<'a>
Construct a draw object from parts
This method allows a “derived” theme to construct a draw object for the inherited theme.
Sourcefn clear_color(&self) -> Rgba
fn clear_color(&self) -> Rgba
The window/scene clear color
This is not used when the window is transparent.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.