summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2023-03-03 04:57:55 +0100
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2023-03-03 04:57:55 +0100
commit6cc48b5c62bac287b8f9f1c79c1fb7486c51b18f (patch)
tree7a9d57f52e3bee9f4d910c89178dc3e2917957a1
parentd13d19ba3569560edd67f20b48f37548d10ceee9 (diff)
downloadiced-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.toml9
-rw-r--r--examples/arc/src/main.rs2
-rw-r--r--examples/bezier_tool/src/main.rs2
-rw-r--r--examples/color_palette/src/main.rs2
-rw-r--r--examples/game_of_life/src/main.rs2
-rw-r--r--examples/sierpinski_triangle/src/main.rs2
-rw-r--r--examples/solar_system/src/main.rs2
-rw-r--r--graphics/Cargo.toml6
-rw-r--r--graphics/src/backend.rs2
-rw-r--r--graphics/src/geometry.rs36
-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.rs6
-rw-r--r--graphics/src/renderer.rs8
-rw-r--r--native/Cargo.toml5
-rw-r--r--renderer/Cargo.toml8
-rw-r--r--renderer/src/backend.rs4
-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.rs13
-rw-r--r--src/widget.rs8
-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.toml2
-rw-r--r--tiny_skia/src/backend.rs2
-rw-r--r--tiny_skia/src/geometry.rs (renamed from tiny_skia/src/canvas.rs)10
-rw-r--r--tiny_skia/src/lib.rs4
-rw-r--r--wgpu/Cargo.toml2
-rw-r--r--wgpu/src/backend.rs2
-rw-r--r--wgpu/src/geometry.rs (renamed from wgpu/src/canvas.rs)8
-rw-r--r--wgpu/src/lib.rs4
39 files changed, 141 insertions, 149 deletions
diff --git a/Cargo.toml b/Cargo.toml
index 942966e5..28938df9 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -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;