diff --git a/graphics/src/text.rs b/graphics/src/text.rs index 74ab6b84..35ff24fb 100644 --- a/graphics/src/text.rs +++ b/graphics/src/text.rs @@ -352,3 +352,9 @@ pub fn to_color(color: Color) -> cosmic_text::Color { cosmic_text::Color::rgba(r, g, b, a) } + +/// A text renderer coupled to `iced_graphics`. +pub trait Renderer { + /// Draws the given [`Raw`] text. + fn fill_raw(&mut self, raw: Raw); +} diff --git a/renderer/src/fallback.rs b/renderer/src/fallback.rs index 907fe9b6..61312bb0 100644 --- a/renderer/src/fallback.rs +++ b/renderer/src/fallback.rs @@ -8,6 +8,7 @@ use crate::core::{ }; use crate::graphics::compositor; use crate::graphics::mesh; +use crate::graphics::text; use crate::graphics::{self, Shell}; use std::borrow::Cow; @@ -150,6 +151,16 @@ where } } +impl text::Renderer for Renderer +where + A: text::Renderer, + B: text::Renderer, +{ + fn fill_raw(&mut self, raw: text::Raw) { + delegate!(self, renderer, renderer.fill_raw(raw)); + } +} + impl image::Renderer for Renderer where A: image::Renderer, diff --git a/tiny_skia/src/layer.rs b/tiny_skia/src/layer.rs index 951f4b14..5f3979bf 100644 --- a/tiny_skia/src/layer.rs +++ b/tiny_skia/src/layer.rs @@ -95,6 +95,19 @@ impl Layer { self.text.push(Item::Live(text)); } + pub fn draw_text_raw( + &mut self, + raw: graphics::text::Raw, + transformation: Transformation, + ) { + let raw = Text::Raw { + raw, + transformation, + }; + + self.text.push(Item::Live(raw)); + } + pub fn draw_text_group( &mut self, text: Vec, diff --git a/tiny_skia/src/lib.rs b/tiny_skia/src/lib.rs index c0bd78af..5e219bd2 100644 --- a/tiny_skia/src/lib.rs +++ b/tiny_skia/src/lib.rs @@ -305,6 +305,13 @@ impl core::text::Renderer for Renderer { } } +impl graphics::text::Renderer for Renderer { + fn fill_raw(&mut self, raw: graphics::text::Raw) { + let (layer, transformation) = self.layers.current_mut(); + layer.draw_text_raw(raw, transformation); + } +} + #[cfg(feature = "geometry")] impl graphics::geometry::Renderer for Renderer { type Geometry = Geometry; diff --git a/wgpu/src/layer.rs b/wgpu/src/layer.rs index f7ee2a3a..bb557edd 100644 --- a/wgpu/src/layer.rs +++ b/wgpu/src/layer.rs @@ -126,6 +126,19 @@ impl Layer { self.pending_text.push(text); } + pub fn draw_text_raw( + &mut self, + raw: graphics::text::Raw, + transformation: Transformation, + ) { + let raw = Text::Raw { + raw, + transformation, + }; + + self.pending_text.push(raw); + } + pub fn draw_image(&mut self, image: Image, transformation: Transformation) { match image { Image::Raster { diff --git a/wgpu/src/lib.rs b/wgpu/src/lib.rs index 1726beac..11e0f086 100644 --- a/wgpu/src/lib.rs +++ b/wgpu/src/lib.rs @@ -772,6 +772,13 @@ impl core::text::Renderer for Renderer { } } +impl graphics::text::Renderer for Renderer { + fn fill_raw(&mut self, raw: graphics::text::Raw) { + let (layer, transformation) = self.layers.current_mut(); + layer.draw_text_raw(raw, transformation); + } +} + #[cfg(feature = "image")] impl core::image::Renderer for Renderer { type Handle = core::image::Handle;