diff options
author | 2024-03-21 23:30:36 +0100 | |
---|---|---|
committer | 2024-03-21 23:30:36 +0100 | |
commit | b972ebca8f8c23d2df1b45bb26038789766a5a65 (patch) | |
tree | dd6b0a68a7f6b0dfbf21e708f51fea93746385d0 /widget/src/canvas.rs | |
parent | 3d17cf8790a18bd0dfe968739c9802833c0bb647 (diff) | |
download | iced-b972ebca8f8c23d2df1b45bb26038789766a5a65.tar.gz iced-b972ebca8f8c23d2df1b45bb26038789766a5a65.tar.bz2 iced-b972ebca8f8c23d2df1b45bb26038789766a5a65.zip |
Restore `canvas::Program` API
Diffstat (limited to 'widget/src/canvas.rs')
-rw-r--r-- | widget/src/canvas.rs | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/widget/src/canvas.rs b/widget/src/canvas.rs index fcd91d17..81067491 100644 --- a/widget/src/canvas.rs +++ b/widget/src/canvas.rs @@ -26,13 +26,17 @@ use std::marker::PhantomData; /// change or it is explicitly cleared. pub type Cache<Renderer = crate::Renderer> = geometry::Cache<Renderer>; +/// The geometry supported by a renderer. +pub type Geometry<Renderer = crate::Renderer> = + <Renderer as geometry::Renderer>::Geometry; + /// A widget capable of drawing 2D graphics. /// /// ## Drawing a simple circle /// If you want to get a quick overview, here's how we can draw a simple circle: /// /// ```no_run -/// # use iced_widget::canvas::{self, frame, Canvas, Fill, Frame, Path, Program}; +/// # use iced_widget::canvas::{self, frame, Canvas, Fill, Frame, Geometry, Path, Program}; /// # use iced_widget::core::{Color, Rectangle}; /// # use iced_widget::core::mouse; /// # use iced_widget::{Renderer, Theme}; @@ -47,7 +51,7 @@ pub type Cache<Renderer = crate::Renderer> = geometry::Cache<Renderer>; /// impl Program<()> for Circle { /// type State = (); /// -/// fn draw(&self, _state: &(), renderer: &mut Renderer, _theme: &Theme, bounds: Rectangle, _cursor: mouse::Cursor) { +/// fn draw(&self, _state: &(), renderer: &Renderer, _theme: &Theme, bounds: Rectangle, _cursor: mouse::Cursor) -> Vec<Geometry> { /// // We prepare a new `Frame` /// let mut frame = frame(renderer, bounds.size()); /// @@ -58,7 +62,7 @@ pub type Cache<Renderer = crate::Renderer> = geometry::Cache<Renderer>; /// frame.fill(&circle, Color::BLACK); /// /// // Finally, we produce the geometry -/// renderer.draw_geometry([frame]); +/// vec![frame.into()] /// } /// } /// @@ -215,7 +219,12 @@ where renderer.with_transformation( Transformation::translate(bounds.x, bounds.y), |renderer| { - self.program.draw(state, renderer, theme, bounds, cursor); + let layers = + self.program.draw(state, renderer, theme, bounds, cursor); + + for layer in layers { + renderer.draw_geometry(layer); + } }, ); } |