Trait kas_core::theme::Theme

source ·
pub trait Theme<DS: DrawSharedImpl>: ThemeControl {
    type Config: ThemeConfig;
    type Window: Window;
    type Draw<'a>: ThemeDraw
       where DS: 'a,
             Self: 'a;

    // Required methods
    fn config(&self) -> Cow<'_, Self::Config>;
    fn apply_config(&mut self, config: &Self::Config) -> Action;
    fn init(&mut self, shared: &mut SharedState<DS>);
    fn new_window(&self, dpi_factor: f32) -> Self::Window;
    fn update_window(&self, window: &mut Self::Window, dpi_factor: f32);
    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§

source

type Config: ThemeConfig

The associated config type

source

type Window: Window

The associated Window implementation.

source

type Draw<'a>: ThemeDraw where DS: 'a, Self: 'a

The associated [ThemeDraw] implementation.

Required Methods§

source

fn config(&self) -> Cow<'_, Self::Config>

Get current configuration

source

fn apply_config(&mut self, config: &Self::Config) -> Action

Apply/set the passed config

source

fn init(&mut self, shared: &mut SharedState<DS>)

Theme initialisation

The toolkit must call this method before Theme::new_window to allow initialisation specific to the DrawIface.

At a minimum, a theme must load a font to crate::text::fonts. The first font loaded (by any theme) becomes the default font.

source

fn new_window(&self, dpi_factor: f32) -> Self::Window

Construct per-window storage

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.

source

fn update_window(&self, window: &mut Self::Window, dpi_factor: f32)

Update a window created by Theme::new_window

This is called when the DPI factor changes or theme dimensions change.

source

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.

source

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.

source

fn clear_color(&self) -> Rgba

The window/scene clear color

This is not used when the window is transparent.

Implementations on Foreign Types§

source§

impl<T: Theme<DS> + ?Sized, DS: DrawSharedImpl> Theme<DS> for Box<T>

§

type Config = <T as Theme<DS>>::Config

§

type Window = <T as Theme<DS>>::Window

§

type Draw<'a> = <T as Theme<DS>>::Draw<'a> where DS: 'a, Self: 'a

source§

fn config(&self) -> Cow<'_, Self::Config>

source§

fn apply_config(&mut self, config: &Self::Config) -> Action

source§

fn init(&mut self, shared: &mut SharedState<DS>)

source§

fn new_window(&self, dpi_factor: f32) -> Self::Window

source§

fn update_window(&self, window: &mut Self::Window, dpi_factor: f32)

source§

fn draw<'a>( &'a self, draw: DrawIface<'a, DS>, ev: &'a mut EventState, window: &'a mut Self::Window ) -> Self::Draw<'a>

source§

fn draw_upcast<'a>( draw: DrawIface<'a, DS>, ev: &'a mut EventState, w: &'a mut Self::Window, cols: &'a ColorsLinear ) -> Self::Draw<'a>

source§

fn clear_color(&self) -> Rgba

Implementors§

source§

impl<DS: DrawSharedImpl> Theme<DS> for FlatThemewhere DS::Draw: DrawRoundedImpl,

§

type Config = Config

§

type Window = Window<<DS as DrawSharedImpl>::Draw>

§

type Draw<'a> = DrawHandle<'a, DS>

source§

impl<DS: DrawSharedImpl> Theme<DS> for MultiTheme<DS>

§

type Config = Config

§

type Window = Box<dyn Window, Global>

§

type Draw<'a> = Box<dyn ThemeDraw + 'a, Global>

source§

impl<DS: DrawSharedImpl> Theme<DS> for SimpleThemewhere DS::Draw: DrawRoundedImpl,

§

type Config = Config

§

type Window = Window<<DS as DrawSharedImpl>::Draw>

§

type Draw<'a> = DrawHandle<'a, DS>