summaryrefslogtreecommitdiffstats
path: root/widget/src/helpers.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-09-19 02:47:03 +0200
committerLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-09-19 02:47:03 +0200
commit5d25562644907488203604769f338feb2c7df9b0 (patch)
tree7fe4e04421d3a01324a039d582b65b63d8b957d5 /widget/src/helpers.rs
parent0a95af78f46728b86cb78380791f40f008be99eb (diff)
downloadiced-5d25562644907488203604769f338feb2c7df9b0.tar.gz
iced-5d25562644907488203604769f338feb2c7df9b0.tar.bz2
iced-5d25562644907488203604769f338feb2c7df9b0.zip
Show `canvas` doc example in multiple places
Diffstat (limited to 'widget/src/helpers.rs')
-rw-r--r--widget/src/helpers.rs51
1 files changed, 51 insertions, 0 deletions
diff --git a/widget/src/helpers.rs b/widget/src/helpers.rs
index 2ad62156..30d40edc 100644
--- a/widget/src/helpers.rs
+++ b/widget/src/helpers.rs
@@ -1000,6 +1000,57 @@ where
/// Creates a new [`Canvas`].
///
/// [`Canvas`]: crate::Canvas
+///
+/// ## Drawing a simple circle
+/// Here's how we can use a [`Canvas`] to draw a simple circle:
+///
+/// ```no_run
+/// # mod iced { pub mod widget { pub use iced_widget::*; } pub use iced_widget::Renderer; pub use iced_widget::core::*; }
+/// # pub type State = ();
+/// # pub type Element<'a, Message> = iced_widget::core::Element<'a, Message, iced_widget::Theme, iced_widget::Renderer>;
+/// #
+/// use iced::mouse;
+/// use iced::widget::canvas;
+/// use iced::{Color, Rectangle, Renderer, Theme};
+///
+/// // First, we define the data we need for drawing
+/// #[derive(Debug)]
+/// struct Circle {
+/// radius: f32,
+/// }
+///
+/// // Then, we implement the `Program` trait
+/// impl<Message> canvas::Program<Message> for Circle {
+/// // No internal state
+/// type State = ();
+///
+/// fn draw(
+/// &self,
+/// _state: &(),
+/// renderer: &Renderer,
+/// _theme: &Theme,
+/// bounds: Rectangle,
+/// _cursor: mouse::Cursor
+/// ) -> Vec<canvas::Geometry> {
+/// // We prepare a new `Frame`
+/// let mut frame = canvas::Frame::new(renderer, bounds.size());
+///
+/// // We create a `Path` representing a simple circle
+/// let circle = canvas::Path::circle(frame.center(), self.radius);
+///
+/// // And fill it with some color
+/// frame.fill(&circle, Color::BLACK);
+///
+/// // Then, we produce the geometry
+/// vec![frame.into_geometry()]
+/// }
+/// }
+///
+/// // Finally, we simply use our `Circle` to create the `Canvas`!
+/// fn view<'a, Message: 'a>(_state: &'a State) -> Element<'a, Message> {
+/// canvas(Circle { radius: 50.0 }).into()
+/// }
+/// ```
#[cfg(feature = "canvas")]
pub fn canvas<P, Message, Theme, Renderer>(
program: P,