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;