diff options
author | 2023-06-30 19:10:41 +0200 | |
---|---|---|
committer | 2023-06-30 19:10:41 +0200 | |
commit | a057f8811bfc47afc4271f05b92263a19122d888 (patch) | |
tree | 3adab32cf4901ad985cc6844f970019df75f20a2 /graphics/src | |
parent | 949eca3eb814bce04f0c658ea0c9da9ecbbdfe12 (diff) | |
parent | d666e739cdcc2084c14593888867d40066c232fe (diff) | |
download | iced-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.rs | 7 | ||||
-rw-r--r-- | graphics/src/renderer.rs | 15 |
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(); |