summaryrefslogtreecommitdiffstats
path: root/src/widget/canvas.rs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/widget/canvas.rs (renamed from native/src/widget/canvas.rs)83
1 files changed, 31 insertions, 52 deletions
diff --git a/native/src/widget/canvas.rs b/src/widget/canvas.rs
index 8a9addd2..bc5995c6 100644
--- a/native/src/widget/canvas.rs
+++ b/src/widget/canvas.rs
@@ -1,35 +1,22 @@
//! Draw 2D graphics for your users.
-//!
-//! A [`Canvas`] widget can be used to draw different kinds of 2D shapes in a
-//! [`Frame`]. It can be used for animation, data visualization, game graphics,
-//! and more!
pub mod event;
-pub mod fill;
-pub mod path;
-pub mod stroke;
mod cursor;
mod program;
-mod style;
-mod text;
-pub use crate::gradient::{self, Gradient};
pub use cursor::Cursor;
pub use event::Event;
-pub use fill::Fill;
-pub use path::Path;
pub use program::Program;
-pub use stroke::{LineCap, LineDash, LineJoin, Stroke};
-pub use style::Style;
-pub use text::Text;
-
-use crate::layout::{self, Layout};
-use crate::mouse;
-use crate::renderer;
-use crate::widget::tree::{self, Tree};
-use crate::{
- Clipboard, Element, Length, Point, Rectangle, Shell, Size, Vector, Widget,
-};
+
+pub use iced_renderer::geometry::*;
+
+use crate::{Length, Point, Rectangle, Size, Vector};
+
+use iced_native::layout::{self, Layout};
+use iced_native::mouse;
+use iced_native::renderer;
+use iced_native::widget::tree::{self, Tree};
+use iced_native::{Clipboard, Element, Shell, Widget};
use std::marker::PhantomData;
@@ -39,14 +26,8 @@ use std::marker::PhantomData;
/// If you want to get a quick overview, here's how we can draw a simple circle:
///
/// ```no_run
-/// # mod iced {
-/// # pub mod widget {
-/// # pub use iced_graphics::widget::canvas;
-/// # }
-/// # pub use iced_native::{Color, Rectangle, Theme};
-/// # }
/// use iced::widget::canvas::{self, Canvas, Cursor, Fill, Frame, Geometry, Path, Program};
-/// use iced::{Color, Rectangle, Theme};
+/// use iced::{Color, Rectangle, Theme, Renderer};
///
/// // First, we define the data we need for drawing
/// #[derive(Debug)]
@@ -58,9 +39,9 @@ use std::marker::PhantomData;
/// impl Program<()> for Circle {
/// type State = ();
///
-/// fn draw(&self, _state: &(), _theme: &Theme, bounds: Rectangle, _cursor: Cursor) -> Vec<Geometry>{
+/// fn draw(&self, _state: &(), renderer: &Renderer, _theme: &Theme, bounds: Rectangle, _cursor: Cursor) -> Vec<Geometry>{
/// // We prepare a new `Frame`
-/// let mut frame = Frame::new(bounds.size());
+/// let mut frame = Frame::new(renderer, bounds.size());
///
/// // We create a `Path` representing a simple circle
/// let circle = Path::circle(frame.center(), self.radius);
@@ -77,9 +58,9 @@ use std::marker::PhantomData;
/// let canvas = Canvas::new(Circle { radius: 50.0 });
/// ```
#[derive(Debug)]
-pub struct Canvas<Message, Renderer, P>
+pub struct Canvas<P, Message, Renderer = crate::Renderer>
where
- Renderer: self::Renderer,
+ Renderer: iced_renderer::geometry::Renderer,
P: Program<Message, Renderer>,
{
width: Length,
@@ -89,9 +70,9 @@ where
theme_: PhantomData<Renderer>,
}
-impl<Message, Renderer, P> Canvas<Message, Renderer, P>
+impl<P, Message, Renderer> Canvas<P, Message, Renderer>
where
- Renderer: self::Renderer,
+ Renderer: iced_renderer::geometry::Renderer,
P: Program<Message, Renderer>,
{
const DEFAULT_SIZE: f32 = 100.0;
@@ -120,10 +101,10 @@ where
}
}
-impl<Message, Renderer, P> Widget<Message, Renderer>
- for Canvas<Message, Renderer, P>
+impl<P, Message, Renderer> Widget<Message, Renderer>
+ for Canvas<P, Message, Renderer>
where
- Renderer: self::Renderer,
+ Renderer: iced_renderer::geometry::Renderer,
P: Program<Message, Renderer>,
{
fn tag(&self) -> tree::Tag {
@@ -157,7 +138,7 @@ where
fn on_event(
&mut self,
tree: &mut Tree,
- event: crate::Event,
+ event: iced_native::Event,
layout: Layout<'_>,
cursor_position: Point,
_renderer: &Renderer,
@@ -167,9 +148,13 @@ where
let bounds = layout.bounds();
let canvas_event = match event {
- crate::Event::Mouse(mouse_event) => Some(Event::Mouse(mouse_event)),
- crate::Event::Touch(touch_event) => Some(Event::Touch(touch_event)),
- crate::Event::Keyboard(keyboard_event) => {
+ iced_native::Event::Mouse(mouse_event) => {
+ Some(Event::Mouse(mouse_event))
+ }
+ iced_native::Event::Touch(touch_event) => {
+ Some(Event::Touch(touch_event))
+ }
+ iced_native::Event::Keyboard(keyboard_event) => {
Some(Event::Keyboard(keyboard_event))
}
_ => None,
@@ -238,22 +223,16 @@ where
}
}
-impl<'a, Message, Renderer, P> From<Canvas<Message, Renderer, P>>
+impl<'a, P, Message, Renderer> From<Canvas<P, Message, Renderer>>
for Element<'a, Message, Renderer>
where
Message: 'a,
- Renderer: 'a + self::Renderer,
+ Renderer: 'a + iced_renderer::geometry::Renderer,
P: Program<Message, Renderer> + 'a,
{
fn from(
- canvas: Canvas<Message, Renderer, P>,
+ canvas: Canvas<P, Message, Renderer>,
) -> Element<'a, Message, Renderer> {
Element::new(canvas)
}
}
-
-pub trait Renderer: crate::Renderer {
- type Geometry;
-
- fn draw(&mut self, geometry: Vec<Self::Geometry>);
-}