diff options
author | 2023-03-03 04:57:55 +0100 | |
---|---|---|
committer | 2023-03-03 04:57:55 +0100 | |
commit | 6cc48b5c62bac287b8f9f1c79c1fb7486c51b18f (patch) | |
tree | 7a9d57f52e3bee9f4d910c89178dc3e2917957a1 | |
parent | d13d19ba3569560edd67f20b48f37548d10ceee9 (diff) | |
download | iced-6cc48b5c62bac287b8f9f1c79c1fb7486c51b18f.tar.gz iced-6cc48b5c62bac287b8f9f1c79c1fb7486c51b18f.tar.bz2 iced-6cc48b5c62bac287b8f9f1c79c1fb7486c51b18f.zip |
Move `Canvas` and `QRCode` to `iced` crate
Rename `canvas` modules to `geometry` in graphics subcrates
-rw-r--r-- | Cargo.toml | 9 | ||||
-rw-r--r-- | examples/arc/src/main.rs | 2 | ||||
-rw-r--r-- | examples/bezier_tool/src/main.rs | 2 | ||||
-rw-r--r-- | examples/color_palette/src/main.rs | 2 | ||||
-rw-r--r-- | examples/game_of_life/src/main.rs | 2 | ||||
-rw-r--r-- | examples/sierpinski_triangle/src/main.rs | 2 | ||||
-rw-r--r-- | examples/solar_system/src/main.rs | 2 | ||||
-rw-r--r-- | graphics/Cargo.toml | 6 | ||||
-rw-r--r-- | graphics/src/backend.rs | 2 | ||||
-rw-r--r-- | graphics/src/geometry.rs | 36 | ||||
-rw-r--r-- | graphics/src/geometry/fill.rs (renamed from native/src/widget/canvas/fill.rs) | 5 | ||||
-rw-r--r-- | graphics/src/geometry/path.rs (renamed from native/src/widget/canvas/path.rs) | 0 | ||||
-rw-r--r-- | graphics/src/geometry/path/arc.rs (renamed from native/src/widget/canvas/path/arc.rs) | 0 | ||||
-rw-r--r-- | graphics/src/geometry/path/builder.rs (renamed from native/src/widget/canvas/path/builder.rs) | 2 | ||||
-rw-r--r-- | graphics/src/geometry/stroke.rs (renamed from native/src/widget/canvas/stroke.rs) | 2 | ||||
-rw-r--r-- | graphics/src/geometry/style.rs (renamed from native/src/widget/canvas/style.rs) | 3 | ||||
-rw-r--r-- | graphics/src/geometry/text.rs (renamed from native/src/widget/canvas/text.rs) | 0 | ||||
-rw-r--r-- | graphics/src/lib.rs | 6 | ||||
-rw-r--r-- | graphics/src/renderer.rs | 8 | ||||
-rw-r--r-- | native/Cargo.toml | 5 | ||||
-rw-r--r-- | renderer/Cargo.toml | 8 | ||||
-rw-r--r-- | renderer/src/backend.rs | 4 | ||||
-rw-r--r-- | renderer/src/geometry.rs (renamed from renderer/src/widget/canvas.rs) | 23 | ||||
-rw-r--r-- | renderer/src/geometry/cache.rs (renamed from renderer/src/widget/canvas/cache.rs) | 2 | ||||
-rw-r--r-- | renderer/src/lib.rs | 13 | ||||
-rw-r--r-- | src/widget.rs | 8 | ||||
-rw-r--r-- | src/widget/canvas.rs (renamed from native/src/widget/canvas.rs) | 83 | ||||
-rw-r--r-- | src/widget/canvas/cursor.rs (renamed from native/src/widget/canvas/cursor.rs) | 0 | ||||
-rw-r--r-- | src/widget/canvas/event.rs (renamed from native/src/widget/canvas/event.rs) | 8 | ||||
-rw-r--r-- | src/widget/canvas/program.rs (renamed from native/src/widget/canvas/program.rs) | 8 | ||||
-rw-r--r-- | src/widget/qr_code.rs (renamed from renderer/src/widget/qr_code.rs) | 3 | ||||
-rw-r--r-- | tiny_skia/Cargo.toml | 2 | ||||
-rw-r--r-- | tiny_skia/src/backend.rs | 2 | ||||
-rw-r--r-- | tiny_skia/src/geometry.rs (renamed from tiny_skia/src/canvas.rs) | 10 | ||||
-rw-r--r-- | tiny_skia/src/lib.rs | 4 | ||||
-rw-r--r-- | wgpu/Cargo.toml | 2 | ||||
-rw-r--r-- | wgpu/src/backend.rs | 2 | ||||
-rw-r--r-- | wgpu/src/geometry.rs (renamed from wgpu/src/canvas.rs) | 8 | ||||
-rw-r--r-- | wgpu/src/lib.rs | 4 |
39 files changed, 141 insertions, 149 deletions
@@ -17,9 +17,9 @@ image = ["iced_renderer/image", "image_rs"] # Enables the `Svg` widget svg = ["iced_renderer/svg"] # Enables the `Canvas` widget -canvas = ["iced_renderer/canvas"] +canvas = ["iced_renderer/geometry"] # Enables the `QRCode` widget -qr_code = ["iced_renderer/qr_code"] +qr_code = ["canvas", "qrcode"] # Enables a debug view in native platforms (press F12) debug = ["iced_winit/debug"] # Enables `tokio` as the `executor::Default` on native platforms @@ -69,6 +69,11 @@ version = "0.24" package = "image" optional = true +[dependencies.qrcode] +version = "0.12" +optional = true +default-features = false + [package.metadata.docs.rs] rustdoc-args = ["--cfg", "docsrs"] features = ["image", "svg", "canvas", "qr_code"] diff --git a/examples/arc/src/main.rs b/examples/arc/src/main.rs index d71ba6f6..80ad0b5b 100644 --- a/examples/arc/src/main.rs +++ b/examples/arc/src/main.rs @@ -69,7 +69,7 @@ impl Application for Arc { } } -impl<Message> canvas::Program<Message, Renderer> for Arc { +impl<Message> canvas::Program<Message> for Arc { type State = (); fn draw( diff --git a/examples/bezier_tool/src/main.rs b/examples/bezier_tool/src/main.rs index 5bb463c3..f1c83a16 100644 --- a/examples/bezier_tool/src/main.rs +++ b/examples/bezier_tool/src/main.rs @@ -92,7 +92,7 @@ mod bezier { curves: &'a [Curve], } - impl<'a> canvas::Program<Curve, Renderer> for Bezier<'a> { + impl<'a> canvas::Program<Curve> for Bezier<'a> { type State = Option<Pending>; fn update( diff --git a/examples/color_palette/src/main.rs b/examples/color_palette/src/main.rs index 1109a883..5c4304ee 100644 --- a/examples/color_palette/src/main.rs +++ b/examples/color_palette/src/main.rs @@ -237,7 +237,7 @@ impl Theme { } } -impl<Message> canvas::Program<Message, Renderer> for Theme { +impl<Message> canvas::Program<Message> for Theme { type State = (); fn draw( diff --git a/examples/game_of_life/src/main.rs b/examples/game_of_life/src/main.rs index cdb33aca..eab8908b 100644 --- a/examples/game_of_life/src/main.rs +++ b/examples/game_of_life/src/main.rs @@ -393,7 +393,7 @@ mod grid { } } - impl canvas::Program<Message, Renderer> for Grid { + impl canvas::Program<Message> for Grid { type State = Interaction; fn update( diff --git a/examples/sierpinski_triangle/src/main.rs b/examples/sierpinski_triangle/src/main.rs index e85f8391..4faac6d6 100644 --- a/examples/sierpinski_triangle/src/main.rs +++ b/examples/sierpinski_triangle/src/main.rs @@ -97,7 +97,7 @@ struct SierpinskiGraph { cache: canvas::Cache, } -impl canvas::Program<Message, Renderer> for SierpinskiGraph { +impl canvas::Program<Message> for SierpinskiGraph { type State = (); fn update( diff --git a/examples/solar_system/src/main.rs b/examples/solar_system/src/main.rs index 0023a69b..f2606feb 100644 --- a/examples/solar_system/src/main.rs +++ b/examples/solar_system/src/main.rs @@ -150,7 +150,7 @@ impl State { } } -impl<Message> canvas::Program<Message, Renderer> for State { +impl<Message> canvas::Program<Message> for State { type State = (); fn draw( diff --git a/graphics/Cargo.toml b/graphics/Cargo.toml index 62e67cf8..98e6f474 100644 --- a/graphics/Cargo.toml +++ b/graphics/Cargo.toml @@ -24,7 +24,7 @@ bmp = ["image_rs/bmp"] hdr = ["image_rs/hdr"] dds = ["image_rs/dds"] farbfeld = ["image_rs/farbfeld"] -canvas = ["iced_native/canvas"] +geometry = ["lyon_path"] opengl = [] image_rs = ["kamadak-exif"] @@ -65,6 +65,10 @@ optional = true version = "0.5" optional = true +[dependencies.lyon_path] +version = "1" +optional = true + [package.metadata.docs.rs] rustdoc-args = ["--cfg", "docsrs"] all-features = true diff --git a/graphics/src/backend.rs b/graphics/src/backend.rs index c44372e8..8658cffe 100644 --- a/graphics/src/backend.rs +++ b/graphics/src/backend.rs @@ -10,8 +10,6 @@ use std::borrow::Cow; /// /// [`Renderer`]: crate::Renderer pub trait Backend { - type Geometry: Into<crate::Primitive>; - /// Trims the measurements cache. /// /// This method is currently necessary to properly trim the text cache in diff --git a/graphics/src/geometry.rs b/graphics/src/geometry.rs new file mode 100644 index 00000000..29ac84d6 --- /dev/null +++ b/graphics/src/geometry.rs @@ -0,0 +1,36 @@ +//! 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 fill; +pub mod path; +pub mod stroke; + +mod style; +mod text; + +pub use fill::Fill; +pub use path::Path; +pub use stroke::{LineCap, LineDash, LineJoin, Stroke}; +pub use style::Style; +pub use text::Text; + +pub use iced_native::gradient::{self, Gradient}; + +use crate::Primitive; + +#[derive(Debug, Clone)] +pub struct Geometry(pub Primitive); + +impl From<Geometry> for Primitive { + fn from(geometry: Geometry) -> Self { + geometry.0 + } +} + +pub trait Renderer: iced_native::Renderer { + type Geometry; + + fn draw(&mut self, geometry: Vec<Self::Geometry>); +} diff --git a/native/src/widget/canvas/fill.rs b/graphics/src/geometry/fill.rs index 92b1e47e..109d5e99 100644 --- a/native/src/widget/canvas/fill.rs +++ b/graphics/src/geometry/fill.rs @@ -1,8 +1,7 @@ //! Fill [crate::widget::canvas::Geometry] with a certain style. -use crate::widget::canvas::Gradient; -use crate::Color; +use crate::{Color, Gradient}; -pub use crate::widget::canvas::Style; +pub use crate::geometry::Style; /// The style used to fill geometry. #[derive(Debug, Clone)] diff --git a/native/src/widget/canvas/path.rs b/graphics/src/geometry/path.rs index 30c387c5..30c387c5 100644 --- a/native/src/widget/canvas/path.rs +++ b/graphics/src/geometry/path.rs diff --git a/native/src/widget/canvas/path/arc.rs b/graphics/src/geometry/path/arc.rs index e0747d3e..e0747d3e 100644 --- a/native/src/widget/canvas/path/arc.rs +++ b/graphics/src/geometry/path/arc.rs diff --git a/native/src/widget/canvas/path/builder.rs b/graphics/src/geometry/path/builder.rs index 84fda052..4a9c5e36 100644 --- a/native/src/widget/canvas/path/builder.rs +++ b/graphics/src/geometry/path/builder.rs @@ -1,4 +1,4 @@ -use crate::widget::canvas::path::{arc, Arc, Path}; +use crate::geometry::path::{arc, Arc, Path}; use crate::{Point, Size}; use lyon_path::builder::{self, SvgPathBuilder}; diff --git a/native/src/widget/canvas/stroke.rs b/graphics/src/geometry/stroke.rs index ab4727b2..b551a9c9 100644 --- a/native/src/widget/canvas/stroke.rs +++ b/graphics/src/geometry/stroke.rs @@ -1,5 +1,5 @@ //! Create lines from a [crate::widget::canvas::Path] and assigns them various attributes/styles. -pub use crate::widget::canvas::Style; +pub use crate::geometry::Style; use crate::Color; diff --git a/native/src/widget/canvas/style.rs b/graphics/src/geometry/style.rs index 2642fdb8..6794f2e7 100644 --- a/native/src/widget/canvas/style.rs +++ b/graphics/src/geometry/style.rs @@ -1,5 +1,4 @@ -use crate::widget::canvas::Gradient; -use crate::Color; +use crate::{Color, Gradient}; /// The coloring style of some drawing. #[derive(Debug, Clone, PartialEq)] diff --git a/native/src/widget/canvas/text.rs b/graphics/src/geometry/text.rs index 8c0b2dfb..8c0b2dfb 100644 --- a/native/src/widget/canvas/text.rs +++ b/graphics/src/geometry/text.rs diff --git a/graphics/src/lib.rs b/graphics/src/lib.rs index 576b2d78..e56f8ad8 100644 --- a/graphics/src/lib.rs +++ b/graphics/src/lib.rs @@ -33,6 +33,9 @@ pub mod primitive; pub mod renderer; pub mod window; +#[cfg(feature = "geometry")] +pub mod geometry; + pub use antialiasing::Antialiasing; pub use backend::Backend; pub use error::Error; @@ -41,6 +44,9 @@ pub use renderer::Renderer; pub use transformation::Transformation; pub use viewport::Viewport; +#[cfg(feature = "geometry")] +pub use geometry::Geometry; + pub use iced_native::alignment; pub use iced_native::text; pub use iced_native::{ diff --git a/graphics/src/renderer.rs b/graphics/src/renderer.rs index 793ee7d7..cb57f429 100644 --- a/graphics/src/renderer.rs +++ b/graphics/src/renderer.rs @@ -215,15 +215,15 @@ where } } -#[cfg(feature = "canvas")] -impl<B, T> iced_native::widget::canvas::Renderer for Renderer<B, T> +#[cfg(feature = "geometry")] +impl<B, T> crate::geometry::Renderer for Renderer<B, T> where B: Backend, { - type Geometry = B::Geometry; + type Geometry = crate::Geometry; fn draw(&mut self, layers: Vec<Self::Geometry>) { self.primitives - .extend(layers.into_iter().map(B::Geometry::into)); + .extend(layers.into_iter().map(crate::Geometry::into)); } } diff --git a/native/Cargo.toml b/native/Cargo.toml index 23533e33..1eedf0da 100644 --- a/native/Cargo.toml +++ b/native/Cargo.toml @@ -8,7 +8,6 @@ license = "MIT" repository = "https://github.com/iced-rs/iced" [features] -canvas = ["lyon_path"] debug = [] [dependencies] @@ -29,7 +28,3 @@ features = ["thread-pool"] [dependencies.iced_style] version = "0.7" path = "../style" - -[dependencies.lyon_path] -version = "1" -optional = true diff --git a/renderer/Cargo.toml b/renderer/Cargo.toml index 429b55c2..189f5309 100644 --- a/renderer/Cargo.toml +++ b/renderer/Cargo.toml @@ -6,8 +6,7 @@ edition = "2021" [features] image = ["iced_wgpu/image", "iced_tiny_skia/image"] svg = ["iced_wgpu/svg", "iced_tiny_skia/svg"] -canvas = ["iced_wgpu/canvas", "iced_tiny_skia/canvas"] -qr_code = ["canvas", "qrcode"] +geometry = ["iced_wgpu/geometry", "iced_tiny_skia/geometry"] tracing = ["iced_wgpu/tracing"] [dependencies] @@ -31,8 +30,3 @@ iced_wgpu = { version = "0.9", path = "../wgpu" } [target.'cfg(target_arch = "wasm32")'.dependencies] iced_wgpu = { version = "0.9", path = "../wgpu", features = ["webgl"] } - -[dependencies.qrcode] -version = "0.12" -optional = true -default-features = false diff --git a/renderer/src/backend.rs b/renderer/src/backend.rs index 6c0b4e5c..b0a409dc 100644 --- a/renderer/src/backend.rs +++ b/renderer/src/backend.rs @@ -1,4 +1,4 @@ -use crate::{Font, Geometry, Point, Size}; +use crate::{Font, Point, Size}; use iced_graphics::backend; use iced_graphics::text; @@ -12,8 +12,6 @@ pub enum Backend { } impl iced_graphics::Backend for Backend { - type Geometry = Geometry; - fn trim_measurements(&mut self) { match self { Self::Wgpu(backend) => backend.trim_measurements(), diff --git a/renderer/src/widget/canvas.rs b/renderer/src/geometry.rs index 35c8fff9..e491ea73 100644 --- a/renderer/src/widget/canvas.rs +++ b/renderer/src/geometry.rs @@ -2,22 +2,13 @@ mod cache; pub use cache::Cache; -pub use iced_native::widget::canvas::event::{self, Event}; -pub use iced_native::widget::canvas::fill::{self, Fill}; -pub use iced_native::widget::canvas::gradient::{self, Gradient}; -pub use iced_native::widget::canvas::path::{self, Path}; -pub use iced_native::widget::canvas::stroke::{self, Stroke}; -pub use iced_native::widget::canvas::{ - Canvas, Cursor, LineCap, LineDash, LineJoin, Program, Renderer, Style, Text, -}; +pub use iced_graphics::geometry::*; use crate::{Backend, Point, Rectangle, Size, Vector}; -pub use crate::Geometry; - pub enum Frame { - Wgpu(iced_wgpu::canvas::Frame), - TinySkia(iced_tiny_skia::canvas::Frame), + Wgpu(iced_wgpu::geometry::Frame), + TinySkia(iced_tiny_skia::geometry::Frame), } macro_rules! delegate { @@ -33,10 +24,10 @@ impl Frame { pub fn new<Theme>(renderer: &crate::Renderer<Theme>, size: Size) -> Self { match renderer.backend() { Backend::Wgpu(_) => { - Frame::Wgpu(iced_wgpu::canvas::Frame::new(size)) + Frame::Wgpu(iced_wgpu::geometry::Frame::new(size)) } Backend::TinySkia(_) => { - Frame::TinySkia(iced_tiny_skia::canvas::Frame::new(size)) + Frame::TinySkia(iced_tiny_skia::geometry::Frame::new(size)) } } } @@ -131,10 +122,10 @@ impl Frame { pub fn with_clip(&mut self, region: Rectangle, f: impl FnOnce(&mut Frame)) { let mut frame = match self { Self::Wgpu(_) => { - Self::Wgpu(iced_wgpu::canvas::Frame::new(region.size())) + Self::Wgpu(iced_wgpu::geometry::Frame::new(region.size())) } Self::TinySkia(_) => Self::TinySkia( - iced_tiny_skia::canvas::Frame::new(region.size()), + iced_tiny_skia::geometry::Frame::new(region.size()), ), }; diff --git a/renderer/src/widget/canvas/cache.rs b/renderer/src/geometry/cache.rs index 7d6b4811..1f1febdd 100644 --- a/renderer/src/widget/canvas/cache.rs +++ b/renderer/src/geometry/cache.rs @@ -1,4 +1,4 @@ -use crate::widget::canvas::{Frame, Geometry}; +use crate::geometry::{Frame, Geometry}; use crate::{Primitive, Renderer, Size}; use std::cell::RefCell; diff --git a/renderer/src/lib.rs b/renderer/src/lib.rs index d9c85e82..aae3322d 100644 --- a/renderer/src/lib.rs +++ b/renderer/src/lib.rs @@ -1,6 +1,8 @@ -pub mod widget; pub mod window; +#[cfg(feature = "geometry")] +pub mod geometry; + mod backend; mod settings; @@ -19,12 +21,3 @@ pub use iced_graphics::{ /// [`iced`]: https://github.com/iced-rs/iced pub type Renderer<Theme = iced_native::Theme> = iced_graphics::Renderer<Backend, Theme>; - -#[derive(Debug, Clone)] -pub struct Geometry(pub(crate) Primitive); - -impl From<Geometry> for Primitive { - fn from(geometry: Geometry) -> Self { - geometry.0 - } -} diff --git a/src/widget.rs b/src/widget.rs index f3a66101..19434e84 100644 --- a/src/widget.rs +++ b/src/widget.rs @@ -165,14 +165,14 @@ pub use vertical_slider::VerticalSlider; #[cfg(feature = "canvas")] #[cfg_attr(docsrs, doc(cfg(feature = "canvas")))] -pub use iced_renderer::widget::canvas; +pub mod canvas; #[cfg(feature = "canvas")] #[cfg_attr(docsrs, doc(cfg(feature = "canvas")))] /// Creates a new [`Canvas`]. -pub fn canvas<P, Message, Renderer>(program: P) -> Canvas<Message, Renderer, P> +pub fn canvas<P, Message, Renderer>(program: P) -> Canvas<P, Message, Renderer> where - Renderer: canvas::Renderer, + Renderer: iced_renderer::geometry::Renderer, P: canvas::Program<Message, Renderer>, { Canvas::new(program) @@ -193,7 +193,7 @@ pub mod image { #[cfg(feature = "qr_code")] #[cfg_attr(docsrs, doc(cfg(feature = "qr_code")))] -pub use iced_renderer::widget::qr_code; +pub mod qr_code; #[cfg(feature = "svg")] #[cfg_attr(docsrs, doc(cfg(feature = "svg")))] 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>); -} diff --git a/native/src/widget/canvas/cursor.rs b/src/widget/canvas/cursor.rs index ef6a7771..ef6a7771 100644 --- a/native/src/widget/canvas/cursor.rs +++ b/src/widget/canvas/cursor.rs diff --git a/native/src/widget/canvas/event.rs b/src/widget/canvas/event.rs index 1d726577..7c733a4d 100644 --- a/native/src/widget/canvas/event.rs +++ b/src/widget/canvas/event.rs @@ -1,9 +1,9 @@ //! Handle events of a canvas. -use crate::keyboard; -use crate::mouse; -use crate::touch; +use iced_native::keyboard; +use iced_native::mouse; +use iced_native::touch; -pub use crate::event::Status; +pub use iced_native::event::Status; /// A [`Canvas`] event. /// diff --git a/native/src/widget/canvas/program.rs b/src/widget/canvas/program.rs index 17a5a137..fd15663a 100644 --- a/native/src/widget/canvas/program.rs +++ b/src/widget/canvas/program.rs @@ -1,6 +1,6 @@ use crate::widget::canvas::event::{self, Event}; use crate::widget::canvas::mouse; -use crate::widget::canvas::{Cursor, Renderer}; +use crate::widget::canvas::Cursor; use crate::Rectangle; /// The state and logic of a [`Canvas`]. @@ -9,9 +9,9 @@ use crate::Rectangle; /// application. /// /// [`Canvas`]: crate::widget::Canvas -pub trait Program<Message, Renderer> +pub trait Program<Message, Renderer = crate::Renderer> where - Renderer: self::Renderer, + Renderer: iced_renderer::geometry::Renderer, { /// The internal state mutated by the [`Program`]. type State: Default + 'static; @@ -71,7 +71,7 @@ where impl<Message, Renderer, T> Program<Message, Renderer> for &T where - Renderer: self::Renderer, + Renderer: iced_renderer::geometry::Renderer, T: Program<Message, Renderer>, { type State = T::State; diff --git a/renderer/src/widget/qr_code.rs b/src/widget/qr_code.rs index aae4ec88..66442d5d 100644 --- a/renderer/src/widget/qr_code.rs +++ b/src/widget/qr_code.rs @@ -2,9 +2,8 @@ use crate::widget::canvas; use crate::Renderer; -use iced_graphics::renderer; - use iced_native::layout; +use iced_native::renderer; use iced_native::widget::Tree; use iced_native::{ Color, Element, Layout, Length, Point, Rectangle, Size, Vector, Widget, diff --git a/tiny_skia/Cargo.toml b/tiny_skia/Cargo.toml index 72181735..c4c36aba 100644 --- a/tiny_skia/Cargo.toml +++ b/tiny_skia/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" [features] image = [] svg = [] -canvas = ["iced_native/canvas"] +geometry = ["iced_graphics/geometry"] [dependencies] raw-window-handle = "0.5" diff --git a/tiny_skia/src/backend.rs b/tiny_skia/src/backend.rs index 6883a953..050c6c75 100644 --- a/tiny_skia/src/backend.rs +++ b/tiny_skia/src/backend.rs @@ -436,8 +436,6 @@ fn adjust_clip_mask( } impl iced_graphics::Backend for Backend { - type Geometry = (); - fn trim_measurements(&mut self) { self.text_pipeline.trim_measurement_cache(); } diff --git a/tiny_skia/src/canvas.rs b/tiny_skia/src/geometry.rs index 958063d2..73fc1ebd 100644 --- a/tiny_skia/src/canvas.rs +++ b/tiny_skia/src/geometry.rs @@ -1,9 +1,9 @@ use crate::{Point, Primitive, Rectangle, Size, Vector}; -use iced_native::widget::canvas::fill::{self, Fill}; -use iced_native::widget::canvas::stroke::{self, Stroke}; -use iced_native::widget::canvas::{Path, Style, Text}; -use iced_native::Gradient; +use iced_graphics::geometry::fill::{self, Fill}; +use iced_graphics::geometry::stroke::{self, Stroke}; +use iced_graphics::geometry::{Path, Style, Text}; +use iced_graphics::Gradient; pub struct Frame { size: Size, @@ -152,7 +152,7 @@ impl Frame { } fn convert_path(path: &Path) -> tiny_skia::Path { - use iced_native::widget::canvas::path::lyon_path; + use iced_graphics::geometry::path::lyon_path; let mut builder = tiny_skia::PathBuilder::new(); let mut last_point = Default::default(); diff --git a/tiny_skia/src/lib.rs b/tiny_skia/src/lib.rs index e66e6412..ef5c6b1d 100644 --- a/tiny_skia/src/lib.rs +++ b/tiny_skia/src/lib.rs @@ -4,8 +4,8 @@ mod backend; mod settings; mod text; -#[cfg(feature = "canvas")] -pub mod canvas; +#[cfg(feature = "geometry")] +pub mod geometry; pub use iced_graphics::primitive; diff --git a/wgpu/Cargo.toml b/wgpu/Cargo.toml index 0bcef71c..2e39a9e7 100644 --- a/wgpu/Cargo.toml +++ b/wgpu/Cargo.toml @@ -21,7 +21,7 @@ bmp = ["iced_graphics/bmp"] hdr = ["iced_graphics/hdr"] dds = ["iced_graphics/dds"] farbfeld = ["iced_graphics/farbfeld"] -canvas = ["iced_graphics/canvas", "lyon"] +geometry = ["iced_graphics/geometry", "lyon"] spirv = ["wgpu/spirv"] webgl = ["wgpu/webgl"] diff --git a/wgpu/src/backend.rs b/wgpu/src/backend.rs index 10dc5b4f..6f39a5fe 100644 --- a/wgpu/src/backend.rs +++ b/wgpu/src/backend.rs @@ -329,8 +329,6 @@ impl Backend { } impl iced_graphics::Backend for Backend { - type Geometry = (); - fn trim_measurements(&mut self) { self.text_pipeline.trim_measurement_cache() } diff --git a/wgpu/src/canvas.rs b/wgpu/src/geometry.rs index e8d540c3..11e8126f 100644 --- a/wgpu/src/canvas.rs +++ b/wgpu/src/geometry.rs @@ -1,9 +1,9 @@ -use iced_graphics::primitive::{self, Primitive}; -use iced_native::widget::canvas::fill::{self, Fill}; -use iced_native::widget::canvas::{ +use iced_graphics::geometry::fill::{self, Fill}; +use iced_graphics::geometry::{ LineCap, LineDash, LineJoin, Path, Stroke, Style, Text, }; -use iced_native::{Gradient, Point, Rectangle, Size, Vector}; +use iced_graphics::primitive::{self, Primitive}; +use iced_graphics::{Gradient, Point, Rectangle, Size, Vector}; use lyon::geom::euclid; use lyon::tessellation; diff --git a/wgpu/src/lib.rs b/wgpu/src/lib.rs index 31db16a8..4439b185 100644 --- a/wgpu/src/lib.rs +++ b/wgpu/src/lib.rs @@ -41,8 +41,8 @@ pub mod layer; pub mod settings; pub mod window; -#[cfg(feature = "canvas")] -pub mod canvas; +#[cfg(feature = "geometry")] +pub mod geometry; mod backend; mod buffer; |