From 5100b5d0a1f654ec1254b7765ceadfb9091d6939 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Fri, 24 Feb 2023 23:24:48 +0100 Subject: Introduce `iced_renderer` subcrate featuring runtime renderer fallback --- renderer/src/backend.rs | 94 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 renderer/src/backend.rs (limited to 'renderer/src/backend.rs') diff --git a/renderer/src/backend.rs b/renderer/src/backend.rs new file mode 100644 index 00000000..a9a09593 --- /dev/null +++ b/renderer/src/backend.rs @@ -0,0 +1,94 @@ +use crate::{Font, Point, Size}; + +use iced_graphics::backend; +use iced_graphics::text; + +use std::borrow::Cow; + +pub enum Backend { + Wgpu(iced_wgpu::Backend), +} + +impl iced_graphics::Backend for Backend {} + +impl backend::Text for Backend { + const ICON_FONT: Font = Font::Name("Iced-Icons"); + const CHECKMARK_ICON: char = '\u{f00c}'; + const ARROW_DOWN_ICON: char = '\u{e800}'; + + fn default_font(&self) -> Font { + match self { + Self::Wgpu(backend) => backend.default_font(), + } + } + + fn default_size(&self) -> f32 { + match self { + Self::Wgpu(backend) => backend.default_size(), + } + } + + fn measure( + &self, + contents: &str, + size: f32, + font: Font, + bounds: Size, + ) -> (f32, f32) { + match self { + Self::Wgpu(backend) => { + backend.measure(contents, size, font, bounds) + } + } + } + + fn hit_test( + &self, + contents: &str, + size: f32, + font: Font, + bounds: Size, + position: Point, + nearest_only: bool, + ) -> Option { + match self { + Self::Wgpu(backend) => backend.hit_test( + contents, + size, + font, + bounds, + position, + nearest_only, + ), + } + } + + fn load_font(&mut self, font: Cow<'static, [u8]>) { + match self { + Self::Wgpu(backend) => { + backend.load_font(font); + } + } + } +} + +#[cfg(feature = "image")] +impl backend::Image for Backend { + fn dimensions(&self, handle: &iced_native::image::Handle) -> Size { + match self { + Self::Wgpu(backend) => backend.dimensions(handle), + } + } +} + +#[cfg(feature = "svg")] +impl backend::Svg for Backend { + fn viewport_dimensions( + &self, + handle: &iced_native::svg::Handle, + ) -> Size { + match self { + Self::Wgpu(backend) => backend.viewport_dimensions(handle), + } + } +} -- cgit From a01bc865a0561ff1daf255c4746746acf67524f0 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sat, 25 Feb 2023 15:11:35 +0100 Subject: Trim measurements in `renderer::Backend` --- renderer/src/backend.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'renderer/src/backend.rs') diff --git a/renderer/src/backend.rs b/renderer/src/backend.rs index a9a09593..7b09eea8 100644 --- a/renderer/src/backend.rs +++ b/renderer/src/backend.rs @@ -9,7 +9,13 @@ pub enum Backend { Wgpu(iced_wgpu::Backend), } -impl iced_graphics::Backend for Backend {} +impl iced_graphics::Backend for Backend { + fn trim_measurements(&mut self) { + match self { + Self::Wgpu(backend) => backend.trim_measurements(), + } + } +} impl backend::Text for Backend { const ICON_FONT: Font = Font::Name("Iced-Icons"); -- cgit From 8c373cd497e370d356b480380482779397bdb510 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sat, 25 Feb 2023 15:38:25 +0100 Subject: Scaffold `iced_tiny_skia` and connect it to `iced_renderer` --- renderer/src/backend.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'renderer/src/backend.rs') diff --git a/renderer/src/backend.rs b/renderer/src/backend.rs index 7b09eea8..a46d6f9b 100644 --- a/renderer/src/backend.rs +++ b/renderer/src/backend.rs @@ -7,12 +7,14 @@ use std::borrow::Cow; pub enum Backend { Wgpu(iced_wgpu::Backend), + TinySkia(iced_tiny_skia::Backend), } impl iced_graphics::Backend for Backend { fn trim_measurements(&mut self) { match self { Self::Wgpu(backend) => backend.trim_measurements(), + Self::TinySkia(backend) => backend.trim_measurements(), } } } @@ -25,12 +27,14 @@ impl backend::Text for Backend { fn default_font(&self) -> Font { match self { Self::Wgpu(backend) => backend.default_font(), + Self::TinySkia(backend) => backend.default_font(), } } fn default_size(&self) -> f32 { match self { Self::Wgpu(backend) => backend.default_size(), + Self::TinySkia(backend) => backend.default_size(), } } @@ -45,6 +49,9 @@ impl backend::Text for Backend { Self::Wgpu(backend) => { backend.measure(contents, size, font, bounds) } + Self::TinySkia(backend) => { + backend.measure(contents, size, font, bounds) + } } } @@ -66,6 +73,14 @@ impl backend::Text for Backend { position, nearest_only, ), + Self::TinySkia(backend) => backend.hit_test( + contents, + size, + font, + bounds, + position, + nearest_only, + ), } } @@ -74,6 +89,9 @@ impl backend::Text for Backend { Self::Wgpu(backend) => { backend.load_font(font); } + Self::TinySkia(backend) => { + backend.load_font(font); + } } } } @@ -83,6 +101,7 @@ impl backend::Image for Backend { fn dimensions(&self, handle: &iced_native::image::Handle) -> Size { match self { Self::Wgpu(backend) => backend.dimensions(handle), + Self::TinySkia(backend) => backend.dimensions(handle), } } } @@ -95,6 +114,7 @@ impl backend::Svg for Backend { ) -> Size { match self { Self::Wgpu(backend) => backend.viewport_dimensions(handle), + Self::TinySkia(backend) => backend.viewport_dimensions(handle), } } } -- cgit From 4e615a65cab9dfc5fa4a17a72580c573c1c040d9 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Mon, 27 Feb 2023 01:12:06 +0100 Subject: Fix `clippy` lints --- renderer/src/backend.rs | 1 + 1 file changed, 1 insertion(+) (limited to 'renderer/src/backend.rs') diff --git a/renderer/src/backend.rs b/renderer/src/backend.rs index a46d6f9b..b0a409dc 100644 --- a/renderer/src/backend.rs +++ b/renderer/src/backend.rs @@ -5,6 +5,7 @@ use iced_graphics::text; use std::borrow::Cow; +#[allow(clippy::large_enum_variant)] pub enum Backend { Wgpu(iced_wgpu::Backend), TinySkia(iced_tiny_skia::Backend), -- cgit From 5fd5d1cdf8e5354788dc40729c4565ef377d3bba Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Wed, 1 Mar 2023 21:34:26 +0100 Subject: Implement `Canvas` support for `iced_tiny_skia` --- renderer/src/backend.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'renderer/src/backend.rs') diff --git a/renderer/src/backend.rs b/renderer/src/backend.rs index b0a409dc..6c0b4e5c 100644 --- a/renderer/src/backend.rs +++ b/renderer/src/backend.rs @@ -1,4 +1,4 @@ -use crate::{Font, Point, Size}; +use crate::{Font, Geometry, Point, Size}; use iced_graphics::backend; use iced_graphics::text; @@ -12,6 +12,8 @@ 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(), -- cgit From 6cc48b5c62bac287b8f9f1c79c1fb7486c51b18f Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Fri, 3 Mar 2023 04:57:55 +0100 Subject: Move `Canvas` and `QRCode` to `iced` crate Rename `canvas` modules to `geometry` in graphics subcrates --- renderer/src/backend.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'renderer/src/backend.rs') 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(), -- cgit From 3a0d34c0240f4421737a6a08761f99d6f8140d02 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sat, 4 Mar 2023 05:37:11 +0100 Subject: Create `iced_widget` subcrate and re-organize the whole codebase --- renderer/src/backend.rs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'renderer/src/backend.rs') diff --git a/renderer/src/backend.rs b/renderer/src/backend.rs index b0a409dc..bf5da322 100644 --- a/renderer/src/backend.rs +++ b/renderer/src/backend.rs @@ -1,7 +1,6 @@ -use crate::{Font, Point, Size}; - -use iced_graphics::backend; -use iced_graphics::text; +use crate::core::text; +use crate::core::{Font, Point, Size}; +use crate::graphics::backend; use std::borrow::Cow; @@ -99,7 +98,7 @@ impl backend::Text for Backend { #[cfg(feature = "image")] impl backend::Image for Backend { - fn dimensions(&self, handle: &iced_native::image::Handle) -> Size { + fn dimensions(&self, handle: &crate::core::image::Handle) -> Size { match self { Self::Wgpu(backend) => backend.dimensions(handle), Self::TinySkia(backend) => backend.dimensions(handle), @@ -111,7 +110,7 @@ impl backend::Image for Backend { impl backend::Svg for Backend { fn viewport_dimensions( &self, - handle: &iced_native::svg::Handle, + handle: &crate::core::svg::Handle, ) -> Size { match self { Self::Wgpu(backend) => backend.viewport_dimensions(handle), -- cgit From 9b4bcd287a7f4822314e158990d1dc023d5aab51 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Mon, 6 Mar 2023 22:10:13 +0100 Subject: Introduce backend feature flags in `iced_renderer` --- renderer/src/backend.rs | 76 ++++++++++++++++++------------------------------- 1 file changed, 27 insertions(+), 49 deletions(-) (limited to 'renderer/src/backend.rs') diff --git a/renderer/src/backend.rs b/renderer/src/backend.rs index bf5da322..e77b708b 100644 --- a/renderer/src/backend.rs +++ b/renderer/src/backend.rs @@ -6,16 +6,26 @@ use std::borrow::Cow; #[allow(clippy::large_enum_variant)] pub enum Backend { + #[cfg(feature = "wgpu")] Wgpu(iced_wgpu::Backend), + #[cfg(feature = "tiny-skia")] TinySkia(iced_tiny_skia::Backend), } +macro_rules! delegate { + ($backend:expr, $name:ident, $body:expr) => { + match $backend { + #[cfg(feature = "wgpu")] + Self::Wgpu($name) => $body, + #[cfg(feature = "tiny-skia")] + Self::TinySkia($name) => $body, + } + }; +} + impl iced_graphics::Backend for Backend { fn trim_measurements(&mut self) { - match self { - Self::Wgpu(backend) => backend.trim_measurements(), - Self::TinySkia(backend) => backend.trim_measurements(), - } + delegate!(self, backend, backend.trim_measurements()); } } @@ -25,17 +35,11 @@ impl backend::Text for Backend { const ARROW_DOWN_ICON: char = '\u{e800}'; fn default_font(&self) -> Font { - match self { - Self::Wgpu(backend) => backend.default_font(), - Self::TinySkia(backend) => backend.default_font(), - } + delegate!(self, backend, backend.default_font()) } fn default_size(&self) -> f32 { - match self { - Self::Wgpu(backend) => backend.default_size(), - Self::TinySkia(backend) => backend.default_size(), - } + delegate!(self, backend, backend.default_size()) } fn measure( @@ -45,14 +49,7 @@ impl backend::Text for Backend { font: Font, bounds: Size, ) -> (f32, f32) { - match self { - Self::Wgpu(backend) => { - backend.measure(contents, size, font, bounds) - } - Self::TinySkia(backend) => { - backend.measure(contents, size, font, bounds) - } - } + delegate!(self, backend, backend.measure(contents, size, font, bounds)) } fn hit_test( @@ -64,45 +61,29 @@ impl backend::Text for Backend { position: Point, nearest_only: bool, ) -> Option { - match self { - Self::Wgpu(backend) => backend.hit_test( - contents, - size, - font, - bounds, - position, - nearest_only, - ), - Self::TinySkia(backend) => backend.hit_test( + delegate!( + self, + backend, + backend.hit_test( contents, size, font, bounds, position, - nearest_only, - ), - } + nearest_only + ) + ) } fn load_font(&mut self, font: Cow<'static, [u8]>) { - match self { - Self::Wgpu(backend) => { - backend.load_font(font); - } - Self::TinySkia(backend) => { - backend.load_font(font); - } - } + delegate!(self, backend, backend.load_font(font)); } } #[cfg(feature = "image")] impl backend::Image for Backend { fn dimensions(&self, handle: &crate::core::image::Handle) -> Size { - match self { - Self::Wgpu(backend) => backend.dimensions(handle), - Self::TinySkia(backend) => backend.dimensions(handle), - } + delegate!(self, backend, backend.dimensions(handle)) } } @@ -112,9 +93,6 @@ impl backend::Svg for Backend { &self, handle: &crate::core::svg::Handle, ) -> Size { - match self { - Self::Wgpu(backend) => backend.viewport_dimensions(handle), - Self::TinySkia(backend) => backend.viewport_dimensions(handle), - } + delegate!(self, backend, backend.viewport_dimensions(handle)) } } -- cgit From 707de9d788dc3c49d4ac57a19afac1bb938b78d9 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Thu, 30 Mar 2023 00:56:00 +0200 Subject: Introduce support for `Font` attributes --- renderer/src/backend.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'renderer/src/backend.rs') diff --git a/renderer/src/backend.rs b/renderer/src/backend.rs index e77b708b..120dd644 100644 --- a/renderer/src/backend.rs +++ b/renderer/src/backend.rs @@ -30,7 +30,7 @@ impl iced_graphics::Backend for Backend { } impl backend::Text for Backend { - const ICON_FONT: Font = Font::Name("Iced-Icons"); + const ICON_FONT: Font = Font::with_name("Iced-Icons"); const CHECKMARK_ICON: char = '\u{f00c}'; const ARROW_DOWN_ICON: char = '\u{e800}'; -- cgit From 33b5a900197e2798a393d6d9a0834039666eddbb Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Wed, 19 Apr 2023 01:19:56 +0200 Subject: Make basic text shaping the default shaping strategy --- renderer/src/backend.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'renderer/src/backend.rs') diff --git a/renderer/src/backend.rs b/renderer/src/backend.rs index 120dd644..a98e2479 100644 --- a/renderer/src/backend.rs +++ b/renderer/src/backend.rs @@ -48,8 +48,13 @@ impl backend::Text for Backend { size: f32, font: Font, bounds: Size, + advanced_shape: bool, ) -> (f32, f32) { - delegate!(self, backend, backend.measure(contents, size, font, bounds)) + delegate!( + self, + backend, + backend.measure(contents, size, font, bounds, advanced_shape) + ) } fn hit_test( @@ -60,6 +65,7 @@ impl backend::Text for Backend { bounds: Size, position: Point, nearest_only: bool, + advanced_shape: bool, ) -> Option { delegate!( self, @@ -70,7 +76,8 @@ impl backend::Text for Backend { font, bounds, position, - nearest_only + nearest_only, + advanced_shape ) ) } -- cgit From 4bd290afe7d81d9aaf7467b3ce91491f6600261a Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Wed, 19 Apr 2023 02:00:45 +0200 Subject: Introduce `text::Shaping` enum and replace magic boolean --- renderer/src/backend.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'renderer/src/backend.rs') diff --git a/renderer/src/backend.rs b/renderer/src/backend.rs index a98e2479..70b146f4 100644 --- a/renderer/src/backend.rs +++ b/renderer/src/backend.rs @@ -48,12 +48,12 @@ impl backend::Text for Backend { size: f32, font: Font, bounds: Size, - advanced_shape: bool, + shaping: text::Shaping, ) -> (f32, f32) { delegate!( self, backend, - backend.measure(contents, size, font, bounds, advanced_shape) + backend.measure(contents, size, font, bounds, shaping) ) } @@ -63,9 +63,9 @@ impl backend::Text for Backend { size: f32, font: Font, bounds: Size, + shaping: text::Shaping, position: Point, nearest_only: bool, - advanced_shape: bool, ) -> Option { delegate!( self, @@ -75,9 +75,9 @@ impl backend::Text for Backend { size, font, bounds, + shaping, position, nearest_only, - advanced_shape ) ) } -- cgit From 9499a8f9e6f9971dedfae563cb133232aa3cebc2 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Thu, 4 May 2023 13:00:16 +0200 Subject: Support configurable `LineHeight` in text widgets --- renderer/src/backend.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'renderer/src/backend.rs') diff --git a/renderer/src/backend.rs b/renderer/src/backend.rs index 70b146f4..c1bec6af 100644 --- a/renderer/src/backend.rs +++ b/renderer/src/backend.rs @@ -46,6 +46,7 @@ impl backend::Text for Backend { &self, contents: &str, size: f32, + line_height: text::LineHeight, font: Font, bounds: Size, shaping: text::Shaping, @@ -53,7 +54,7 @@ impl backend::Text for Backend { delegate!( self, backend, - backend.measure(contents, size, font, bounds, shaping) + backend.measure(contents, size, line_height, font, bounds, shaping) ) } @@ -61,6 +62,7 @@ impl backend::Text for Backend { &self, contents: &str, size: f32, + line_height: text::LineHeight, font: Font, bounds: Size, shaping: text::Shaping, @@ -73,6 +75,7 @@ impl backend::Text for Backend { backend.hit_test( contents, size, + line_height, font, bounds, shaping, -- cgit From dd04c0b070b60b15293892e2a7c284787d3d63b1 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Wed, 10 May 2023 22:21:31 +0200 Subject: Bundle `tiny-skia` backend together with `iced_renderer` --- renderer/src/backend.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'renderer/src/backend.rs') diff --git a/renderer/src/backend.rs b/renderer/src/backend.rs index c1bec6af..c9d79851 100644 --- a/renderer/src/backend.rs +++ b/renderer/src/backend.rs @@ -6,19 +6,17 @@ use std::borrow::Cow; #[allow(clippy::large_enum_variant)] pub enum Backend { + TinySkia(iced_tiny_skia::Backend), #[cfg(feature = "wgpu")] Wgpu(iced_wgpu::Backend), - #[cfg(feature = "tiny-skia")] - TinySkia(iced_tiny_skia::Backend), } macro_rules! delegate { ($backend:expr, $name:ident, $body:expr) => { match $backend { + Self::TinySkia($name) => $body, #[cfg(feature = "wgpu")] Self::Wgpu($name) => $body, - #[cfg(feature = "tiny-skia")] - Self::TinySkia($name) => $body, } }; } -- cgit