Show canvas doc example in multiple places
This commit is contained in:
parent
0a95af78f4
commit
5d25562644
2 changed files with 126 additions and 11 deletions
|
|
@ -1,4 +1,55 @@
|
||||||
//! Draw 2D graphics for your users.
|
//! 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;
|
pub mod event;
|
||||||
|
|
||||||
mod program;
|
mod program;
|
||||||
|
|
@ -40,14 +91,17 @@ pub type Frame<Renderer = crate::Renderer> = geometry::Frame<Renderer>;
|
||||||
/// A widget capable of drawing 2D graphics.
|
/// A widget capable of drawing 2D graphics.
|
||||||
///
|
///
|
||||||
/// ## Drawing a simple circle
|
/// ## 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
|
/// ```no_run
|
||||||
/// # use iced_widget::canvas::{self, Canvas, Fill, Frame, Geometry, Path, Program};
|
/// # mod iced { pub mod widget { pub use iced_widget::*; } pub use iced_widget::Renderer; pub use iced_widget::core::*; }
|
||||||
/// # use iced_widget::core::{Color, Rectangle};
|
/// # pub type State = ();
|
||||||
/// # use iced_widget::core::mouse;
|
/// # pub type Element<'a, Message> = iced_widget::core::Element<'a, Message, iced_widget::Theme, iced_widget::Renderer>;
|
||||||
/// # use iced_widget::{Renderer, Theme};
|
|
||||||
/// #
|
/// #
|
||||||
|
/// use iced::mouse;
|
||||||
|
/// use iced::widget::canvas;
|
||||||
|
/// use iced::{Color, Rectangle, Renderer, Theme};
|
||||||
|
///
|
||||||
/// // First, we define the data we need for drawing
|
/// // First, we define the data we need for drawing
|
||||||
/// #[derive(Debug)]
|
/// #[derive(Debug)]
|
||||||
/// struct Circle {
|
/// struct Circle {
|
||||||
|
|
@ -55,26 +109,36 @@ pub type Frame<Renderer = crate::Renderer> = geometry::Frame<Renderer>;
|
||||||
/// }
|
/// }
|
||||||
///
|
///
|
||||||
/// // Then, we implement the `Program` trait
|
/// // Then, we implement the `Program` trait
|
||||||
/// impl Program<()> for Circle {
|
/// impl<Message> canvas::Program<Message> for Circle {
|
||||||
|
/// // No internal state
|
||||||
/// type 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`
|
/// // 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
|
/// // 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
|
/// // And fill it with some color
|
||||||
/// frame.fill(&circle, Color::BLACK);
|
/// frame.fill(&circle, Color::BLACK);
|
||||||
///
|
///
|
||||||
/// // Finally, we produce the geometry
|
/// // Then, we produce the geometry
|
||||||
/// vec![frame.into_geometry()]
|
/// vec![frame.into_geometry()]
|
||||||
/// }
|
/// }
|
||||||
/// }
|
/// }
|
||||||
///
|
///
|
||||||
/// // Finally, we simply use our `Circle` to create the `Canvas`!
|
/// // 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)]
|
#[derive(Debug)]
|
||||||
pub struct Canvas<P, Message, Theme = crate::Theme, Renderer = crate::Renderer>
|
pub struct Canvas<P, Message, Theme = crate::Theme, Renderer = crate::Renderer>
|
||||||
|
|
|
||||||
|
|
@ -1000,6 +1000,57 @@ where
|
||||||
/// Creates a new [`Canvas`].
|
/// Creates a new [`Canvas`].
|
||||||
///
|
///
|
||||||
/// [`Canvas`]: crate::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")]
|
#[cfg(feature = "canvas")]
|
||||||
pub fn canvas<P, Message, Theme, Renderer>(
|
pub fn canvas<P, Message, Theme, Renderer>(
|
||||||
program: P,
|
program: P,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue