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 ++-- renderer/src/compositor.rs | 133 ++++++++++++++++++++++++++++++++++++++ renderer/src/geometry.rs | 6 +- renderer/src/geometry/cache.rs | 4 +- renderer/src/lib.rs | 14 ++-- renderer/src/settings.rs | 3 +- renderer/src/window.rs | 3 - renderer/src/window/compositor.rs | 132 ------------------------------------- 8 files changed, 151 insertions(+), 155 deletions(-) create mode 100644 renderer/src/compositor.rs delete mode 100644 renderer/src/window.rs delete mode 100644 renderer/src/window/compositor.rs (limited to 'renderer/src') 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), diff --git a/renderer/src/compositor.rs b/renderer/src/compositor.rs new file mode 100644 index 00000000..0cdcb293 --- /dev/null +++ b/renderer/src/compositor.rs @@ -0,0 +1,133 @@ +use crate::core::Color; +use crate::graphics::compositor::{Information, SurfaceError}; +use crate::graphics::{Error, Viewport}; +use crate::{Backend, Renderer, Settings}; + +use raw_window_handle::{HasRawDisplayHandle, HasRawWindowHandle}; + +pub enum Compositor { + Wgpu(iced_wgpu::window::Compositor), + TinySkia(iced_tiny_skia::window::Compositor), +} + +pub enum Surface { + Wgpu(iced_wgpu::window::Surface), + TinySkia(iced_tiny_skia::window::Surface), +} + +impl crate::graphics::Compositor for Compositor { + type Settings = Settings; + type Renderer = Renderer; + type Surface = Surface; + + fn new( + settings: Self::Settings, + _compatible_window: Option<&W>, + ) -> Result<(Self, Self::Renderer), Error> { + //let (compositor, backend) = iced_wgpu::window::compositor::new( + // iced_wgpu::Settings { + // default_font: settings.default_font, + // default_text_size: settings.default_text_size, + // antialiasing: settings.antialiasing, + // ..iced_wgpu::Settings::from_env() + // }, + // compatible_window, + //)?; + + //Ok(( + // Self::Wgpu(compositor), + // Renderer::new(Backend::Wgpu(backend)), + //)) + let (compositor, backend) = + iced_tiny_skia::window::compositor::new(iced_tiny_skia::Settings { + default_font: settings.default_font, + default_text_size: settings.default_text_size, + }); + + Ok(( + Self::TinySkia(compositor), + Renderer::new(Backend::TinySkia(backend)), + )) + } + + fn create_surface( + &mut self, + window: &W, + width: u32, + height: u32, + ) -> Surface { + match self { + Self::Wgpu(compositor) => { + Surface::Wgpu(compositor.create_surface(window, width, height)) + } + Self::TinySkia(compositor) => Surface::TinySkia( + compositor.create_surface(window, width, height), + ), + } + } + + fn configure_surface( + &mut self, + surface: &mut Surface, + width: u32, + height: u32, + ) { + match (self, surface) { + (Self::Wgpu(compositor), Surface::Wgpu(surface)) => { + compositor.configure_surface(surface, width, height); + } + (Self::TinySkia(compositor), Surface::TinySkia(surface)) => { + compositor.configure_surface(surface, width, height); + } + _ => unreachable!(), + } + } + + fn fetch_information(&self) -> Information { + match self { + Self::Wgpu(compositor) => compositor.fetch_information(), + Self::TinySkia(compositor) => compositor.fetch_information(), + } + } + + fn present>( + &mut self, + renderer: &mut Self::Renderer, + surface: &mut Self::Surface, + viewport: &Viewport, + background_color: Color, + overlay: &[T], + ) -> Result<(), SurfaceError> { + renderer.with_primitives(|backend, primitives| { + match (self, backend, surface) { + ( + Self::Wgpu(compositor), + Backend::Wgpu(backend), + Surface::Wgpu(surface), + ) => iced_wgpu::window::compositor::present( + compositor, + backend, + surface, + primitives, + viewport, + background_color, + overlay, + ), + ( + Self::TinySkia(compositor), + Backend::TinySkia(backend), + Surface::TinySkia(surface), + ) => iced_tiny_skia::window::compositor::present( + compositor, + backend, + surface, + primitives, + viewport, + background_color, + overlay, + ), + _ => unreachable!(), + } + }) + } +} diff --git a/renderer/src/geometry.rs b/renderer/src/geometry.rs index e491ea73..361fc86b 100644 --- a/renderer/src/geometry.rs +++ b/renderer/src/geometry.rs @@ -2,9 +2,9 @@ mod cache; pub use cache::Cache; -pub use iced_graphics::geometry::*; - -use crate::{Backend, Point, Rectangle, Size, Vector}; +use crate::core::{Point, Rectangle, Size, Vector}; +use crate::graphics::geometry::{Fill, Geometry, Path, Stroke, Text}; +use crate::Backend; pub enum Frame { Wgpu(iced_wgpu::geometry::Frame), diff --git a/renderer/src/geometry/cache.rs b/renderer/src/geometry/cache.rs index 1f1febdd..2a3534d0 100644 --- a/renderer/src/geometry/cache.rs +++ b/renderer/src/geometry/cache.rs @@ -1,5 +1,7 @@ +use crate::core::Size; use crate::geometry::{Frame, Geometry}; -use crate::{Primitive, Renderer, Size}; +use crate::graphics::Primitive; +use crate::Renderer; use std::cell::RefCell; use std::sync::Arc; diff --git a/renderer/src/lib.rs b/renderer/src/lib.rs index aae3322d..22ec7bd1 100644 --- a/renderer/src/lib.rs +++ b/renderer/src/lib.rs @@ -1,4 +1,4 @@ -pub mod window; +pub mod compositor; #[cfg(feature = "geometry")] pub mod geometry; @@ -6,18 +6,14 @@ pub mod geometry; mod backend; mod settings; -pub use iced_graphics::primitive; +pub use iced_graphics as graphics; +pub use iced_graphics::core; pub use backend::Backend; -pub use primitive::Primitive; +pub use compositor::Compositor; pub use settings::Settings; -pub use iced_graphics::{ - Antialiasing, Color, Error, Font, Point, Rectangle, Size, Vector, Viewport, -}; - /// The default graphics renderer for [`iced`]. /// /// [`iced`]: https://github.com/iced-rs/iced -pub type Renderer = - iced_graphics::Renderer; +pub type Renderer = iced_graphics::Renderer; diff --git a/renderer/src/settings.rs b/renderer/src/settings.rs index c4dc248b..d32c87d3 100644 --- a/renderer/src/settings.rs +++ b/renderer/src/settings.rs @@ -1,4 +1,5 @@ -use crate::{Antialiasing, Font}; +use crate::core::Font; +use crate::graphics::Antialiasing; /// The settings of a [`Backend`]. /// diff --git a/renderer/src/window.rs b/renderer/src/window.rs deleted file mode 100644 index a7c8911b..00000000 --- a/renderer/src/window.rs +++ /dev/null @@ -1,3 +0,0 @@ -mod compositor; - -pub use compositor::Compositor; diff --git a/renderer/src/window/compositor.rs b/renderer/src/window/compositor.rs deleted file mode 100644 index a11374ed..00000000 --- a/renderer/src/window/compositor.rs +++ /dev/null @@ -1,132 +0,0 @@ -use crate::{Backend, Color, Error, Renderer, Settings, Viewport}; - -use raw_window_handle::{HasRawDisplayHandle, HasRawWindowHandle}; - -pub use iced_graphics::window::compositor::{Information, SurfaceError}; - -pub enum Compositor { - Wgpu(iced_wgpu::window::Compositor), - TinySkia(iced_tiny_skia::window::Compositor), -} - -pub enum Surface { - Wgpu(iced_wgpu::window::Surface), - TinySkia(iced_tiny_skia::window::Surface), -} - -impl iced_graphics::window::Compositor for Compositor { - type Settings = Settings; - type Renderer = Renderer; - type Surface = Surface; - - fn new( - settings: Self::Settings, - _compatible_window: Option<&W>, - ) -> Result<(Self, Self::Renderer), Error> { - //let (compositor, backend) = iced_wgpu::window::compositor::new( - // iced_wgpu::Settings { - // default_font: settings.default_font, - // default_text_size: settings.default_text_size, - // antialiasing: settings.antialiasing, - // ..iced_wgpu::Settings::from_env() - // }, - // compatible_window, - //)?; - - //Ok(( - // Self::Wgpu(compositor), - // Renderer::new(Backend::Wgpu(backend)), - //)) - let (compositor, backend) = - iced_tiny_skia::window::compositor::new(iced_tiny_skia::Settings { - default_font: settings.default_font, - default_text_size: settings.default_text_size, - }); - - Ok(( - Self::TinySkia(compositor), - Renderer::new(Backend::TinySkia(backend)), - )) - } - - fn create_surface( - &mut self, - window: &W, - width: u32, - height: u32, - ) -> Surface { - match self { - Self::Wgpu(compositor) => { - Surface::Wgpu(compositor.create_surface(window, width, height)) - } - Self::TinySkia(compositor) => Surface::TinySkia( - compositor.create_surface(window, width, height), - ), - } - } - - fn configure_surface( - &mut self, - surface: &mut Surface, - width: u32, - height: u32, - ) { - match (self, surface) { - (Self::Wgpu(compositor), Surface::Wgpu(surface)) => { - compositor.configure_surface(surface, width, height); - } - (Self::TinySkia(compositor), Surface::TinySkia(surface)) => { - compositor.configure_surface(surface, width, height); - } - _ => unreachable!(), - } - } - - fn fetch_information(&self) -> Information { - match self { - Self::Wgpu(compositor) => compositor.fetch_information(), - Self::TinySkia(compositor) => compositor.fetch_information(), - } - } - - fn present>( - &mut self, - renderer: &mut Self::Renderer, - surface: &mut Self::Surface, - viewport: &Viewport, - background_color: Color, - overlay: &[T], - ) -> Result<(), SurfaceError> { - renderer.with_primitives(|backend, primitives| { - match (self, backend, surface) { - ( - Self::Wgpu(compositor), - Backend::Wgpu(backend), - Surface::Wgpu(surface), - ) => iced_wgpu::window::compositor::present( - compositor, - backend, - surface, - primitives, - viewport, - background_color, - overlay, - ), - ( - Self::TinySkia(compositor), - Backend::TinySkia(backend), - Surface::TinySkia(surface), - ) => iced_tiny_skia::window::compositor::present( - compositor, - backend, - surface, - primitives, - viewport, - background_color, - overlay, - ), - _ => unreachable!(), - } - }) - } -} -- cgit