diff options
author | 2024-09-19 02:47:03 +0200 | |
---|---|---|
committer | 2024-09-19 02:47:03 +0200 | |
commit | 5d25562644907488203604769f338feb2c7df9b0 (patch) | |
tree | 7fe4e04421d3a01324a039d582b65b63d8b957d5 /widget/src/helpers.rs | |
parent | 0a95af78f46728b86cb78380791f40f008be99eb (diff) | |
download | iced-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.rs | 51 |
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, |