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/canvas | |
| 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 '')
| -rw-r--r-- | widget/src/canvas.rs | 86 | 
1 files changed, 75 insertions, 11 deletions
| diff --git a/widget/src/canvas.rs b/widget/src/canvas.rs index 185fa082..fb6d55e1 100644 --- a/widget/src/canvas.rs +++ b/widget/src/canvas.rs @@ -1,4 +1,55 @@  //! Draw 2D graphics for your users. +//! +//! ## 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() +//! } +//! ```  pub mod event;  mod program; @@ -40,14 +91,17 @@ pub type Frame<Renderer = crate::Renderer> = geometry::Frame<Renderer>;  /// 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: +/// Here's how we can use a [`Canvas`] to draw a simple circle:  ///  /// ```no_run -/// # 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::{Renderer, Theme}; +/// # 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 { @@ -55,26 +109,36 @@ pub type Frame<Renderer = crate::Renderer> = geometry::Frame<Renderer>;  /// }  ///  /// // Then, we implement the `Program` trait -/// impl Program<()> for Circle { +/// 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<Geometry> { +///     fn draw( +///         &self, +///         _state: &(), +///         renderer: &Renderer, +///         _theme: &Theme, +///         bounds: Rectangle, +///         _cursor: mouse::Cursor +///     ) -> Vec<canvas::Geometry> {  ///         // We prepare a new `Frame` -///         let mut frame = Frame::new(renderer, bounds.size()); +///         let mut frame = canvas::Frame::new(renderer, bounds.size());  ///  ///         // We create a `Path` representing a simple circle -///         let circle = Path::circle(frame.center(), self.radius); +///         let circle = canvas::Path::circle(frame.center(), self.radius);  ///  ///         // And fill it with some color  ///         frame.fill(&circle, Color::BLACK);  /// -///         // Finally, we produce the geometry +///         // Then, we produce the geometry  ///         vec![frame.into_geometry()]  ///     }  /// }  ///  /// // Finally, we simply use our `Circle` to create the `Canvas`! -/// let canvas = Canvas::new(Circle { radius: 50.0 }); +/// fn view<'a, Message: 'a>(_state: &'a State) -> Element<'a, Message> { +///     canvas(Circle { radius: 50.0 }).into() +/// }  /// ```  #[derive(Debug)]  pub struct Canvas<P, Message, Theme = crate::Theme, Renderer = crate::Renderer> | 
