summaryrefslogtreecommitdiffstats
path: root/graphics/src
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón <hector0193@gmail.com>2023-06-30 19:10:41 +0200
committerLibravatar GitHub <noreply@github.com>2023-06-30 19:10:41 +0200
commita057f8811bfc47afc4271f05b92263a19122d888 (patch)
tree3adab32cf4901ad985cc6844f970019df75f20a2 /graphics/src
parent949eca3eb814bce04f0c658ea0c9da9ecbbdfe12 (diff)
parentd666e739cdcc2084c14593888867d40066c232fe (diff)
downloadiced-a057f8811bfc47afc4271f05b92263a19122d888.tar.gz
iced-a057f8811bfc47afc4271f05b92263a19122d888.tar.bz2
iced-a057f8811bfc47afc4271f05b92263a19122d888.zip
Merge pull request #1938 from iced-rs/text-cache-modes
Text cache modes
Diffstat (limited to 'graphics/src')
-rw-r--r--graphics/src/backend.rs7
-rw-r--r--graphics/src/renderer.rs15
2 files changed, 21 insertions, 1 deletions
diff --git a/graphics/src/backend.rs b/graphics/src/backend.rs
index 77bb650b..59e95bf8 100644
--- a/graphics/src/backend.rs
+++ b/graphics/src/backend.rs
@@ -12,6 +12,13 @@ use std::borrow::Cow;
pub trait Backend {
/// The custom kind of primitives this [`Backend`] supports.
type Primitive;
+
+ /// Trims the measurements cache.
+ ///
+ /// This method is currently necessary to properly trim the text cache in
+ /// `iced_wgpu` and `iced_glow` because of limitations in the text rendering
+ /// pipeline. It will be removed in the future.
+ fn trim_measurements(&mut self) {}
}
/// A graphics backend that supports text rendering.
diff --git a/graphics/src/renderer.rs b/graphics/src/renderer.rs
index d80dea34..c0cec60a 100644
--- a/graphics/src/renderer.rs
+++ b/graphics/src/renderer.rs
@@ -3,10 +3,13 @@ use crate::backend::{self, Backend};
use crate::Primitive;
use iced_core::image;
+use iced_core::layout;
use iced_core::renderer;
use iced_core::svg;
use iced_core::text::{self, Text};
-use iced_core::{Background, Color, Font, Point, Rectangle, Size, Vector};
+use iced_core::{
+ Background, Color, Element, Font, Point, Rectangle, Size, Vector,
+};
use std::borrow::Cow;
use std::marker::PhantomData;
@@ -85,6 +88,16 @@ impl<B: Backend, T> Renderer<B, T> {
impl<B: Backend, T> iced_core::Renderer for Renderer<B, T> {
type Theme = T;
+ fn layout<Message>(
+ &mut self,
+ element: &Element<'_, Message, Self>,
+ limits: &layout::Limits,
+ ) -> layout::Node {
+ self.backend.trim_measurements();
+
+ element.as_widget().layout(self, limits)
+ }
+
fn with_layer(&mut self, bounds: Rectangle, f: impl FnOnce(&mut Self)) {
let current = self.start_layer();