From 7a50e9e8fbb8d37e53a42c1dd5936b97463ead53 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sun, 21 Jan 2024 17:56:01 +0100 Subject: Convert `Renderer::Theme` to generic `Widget` type --- widget/src/canvas.rs | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) (limited to 'widget/src/canvas.rs') diff --git a/widget/src/canvas.rs b/widget/src/canvas.rs index 4e42a671..b95e6206 100644 --- a/widget/src/canvas.rs +++ b/widget/src/canvas.rs @@ -30,9 +30,8 @@ use std::marker::PhantomData; /// # use iced_widget::canvas::{self, Canvas, Fill, Frame, Geometry, Path, Program}; /// # use iced_widget::core::{Color, Rectangle}; /// # use iced_widget::core::mouse; -/// # use iced_widget::style::Theme; +/// # use iced_widget::{Renderer, Theme}; /// # -/// # pub type Renderer = iced_widget::renderer::Renderer; /// // First, we define the data we need for drawing /// #[derive(Debug)] /// struct Circle { @@ -62,22 +61,23 @@ use std::marker::PhantomData; /// let canvas = Canvas::new(Circle { radius: 50.0 }); /// ``` #[derive(Debug)] -pub struct Canvas +pub struct Canvas where Renderer: geometry::Renderer, - P: Program, + P: Program, { width: Length, height: Length, program: P, message_: PhantomData, - theme_: PhantomData, + theme_: PhantomData, + renderer_: PhantomData, } -impl Canvas +impl Canvas where + P: Program, Renderer: geometry::Renderer, - P: Program, { const DEFAULT_SIZE: f32 = 100.0; @@ -89,6 +89,7 @@ where program, message_: PhantomData, theme_: PhantomData, + renderer_: PhantomData, } } @@ -105,11 +106,11 @@ where } } -impl Widget - for Canvas +impl Widget + for Canvas where Renderer: geometry::Renderer, - P: Program, + P: Program, { fn tag(&self) -> tree::Tag { struct Tag(T); @@ -192,7 +193,7 @@ where &self, tree: &Tree, renderer: &mut Renderer, - theme: &Renderer::Theme, + theme: &Theme, _style: &renderer::Style, layout: Layout<'_>, cursor: mouse::Cursor, @@ -217,16 +218,17 @@ where } } -impl<'a, P, Message, Renderer> From> - for Element<'a, Message, Renderer> +impl<'a, P, Message, Theme, Renderer> From> + for Element<'a, Message, Theme, Renderer> where Message: 'a, + Theme: 'a, Renderer: 'a + geometry::Renderer, - P: Program + 'a, + P: 'a + Program, { fn from( - canvas: Canvas, - ) -> Element<'a, Message, Renderer> { + canvas: Canvas, + ) -> Element<'a, Message, Theme, Renderer> { Element::new(canvas) } } -- cgit