diff options
| author | 2024-01-16 12:02:42 +0100 | |
|---|---|---|
| committer | 2024-01-16 12:02:42 +0100 | |
| commit | 534c7dd7b0bc515c31b6de87b4aa6a35b44c46a0 (patch) | |
| tree | 0ddc8f1b681cbade7e47293bd46a362896aa538a /tiny_skia | |
| parent | 17135cbd56316f31167eb62e026839450506573f (diff) | |
| parent | c4ba657de86d7606587dad5124f435141258f570 (diff) | |
| download | iced-534c7dd7b0bc515c31b6de87b4aa6a35b44c46a0.tar.gz iced-534c7dd7b0bc515c31b6de87b4aa6a35b44c46a0.tar.bz2 iced-534c7dd7b0bc515c31b6de87b4aa6a35b44c46a0.zip | |
Merge branch 'master' into update-winit
Diffstat (limited to 'tiny_skia')
| -rw-r--r-- | tiny_skia/src/backend.rs | 30 | ||||
| -rw-r--r-- | tiny_skia/src/text.rs | 43 | 
2 files changed, 59 insertions, 14 deletions
| diff --git a/tiny_skia/src/backend.rs b/tiny_skia/src/backend.rs index 3e9bd2a5..706db40e 100644 --- a/tiny_skia/src/backend.rs +++ b/tiny_skia/src/backend.rs @@ -1,5 +1,6 @@  use crate::core::{Background, Color, Gradient, Rectangle, Vector};  use crate::graphics::backend; +use crate::graphics::text;  use crate::graphics::Viewport;  use crate::primitive::{self, Primitive}; @@ -444,6 +445,35 @@ impl Backend {                      clip_mask,                  );              } +            Primitive::RawText(text::Raw { +                buffer, +                position, +                color, +                clip_bounds: text_clip_bounds, +            }) => { +                let Some(buffer) = buffer.upgrade() else { +                    return; +                }; + +                let physical_bounds = +                    (*text_clip_bounds + translation) * scale_factor; + +                if !clip_bounds.intersects(&physical_bounds) { +                    return; +                } + +                let clip_mask = (!physical_bounds.is_within(&clip_bounds)) +                    .then_some(clip_mask as &_); + +                self.text_pipeline.draw_raw( +                    &buffer, +                    *position + translation, +                    *color, +                    scale_factor, +                    pixels, +                    clip_mask, +                ); +            }              #[cfg(feature = "image")]              Primitive::Image {                  handle, diff --git a/tiny_skia/src/text.rs b/tiny_skia/src/text.rs index 70e95d01..9413e311 100644 --- a/tiny_skia/src/text.rs +++ b/tiny_skia/src/text.rs @@ -1,7 +1,6 @@  use crate::core::alignment;  use crate::core::text::{LineHeight, Shaping}; -use crate::core::{Color, Font, Pixels, Point, Rectangle}; -use crate::graphics::color; +use crate::core::{Color, Font, Pixels, Point, Rectangle, Size};  use crate::graphics::text::cache::{self, Cache};  use crate::graphics::text::editor;  use crate::graphics::text::font_system; @@ -149,6 +148,33 @@ impl Pipeline {          );      } +    pub fn draw_raw( +        &mut self, +        buffer: &cosmic_text::Buffer, +        position: Point, +        color: Color, +        scale_factor: f32, +        pixels: &mut tiny_skia::PixmapMut<'_>, +        clip_mask: Option<&tiny_skia::Mask>, +    ) { +        let mut font_system = font_system().write().expect("Write font system"); + +        let (width, height) = buffer.size(); + +        draw( +            font_system.raw(), +            &mut self.glyph_cache, +            buffer, +            Rectangle::new(position, Size::new(width, height)), +            color, +            alignment::Horizontal::Left, +            alignment::Vertical::Top, +            scale_factor, +            pixels, +            clip_mask, +        ); +    } +      pub fn trim_cache(&mut self) {          self.cache.get_mut().trim();          self.glyph_cache.trim(); @@ -217,18 +243,7 @@ fn draw(  fn from_color(color: cosmic_text::Color) -> Color {      let [r, g, b, a] = color.as_rgba(); -    if color::GAMMA_CORRECTION { -        // `cosmic_text::Color` is linear RGB in this case, so we -        // need to convert back to sRGB -        Color::from_linear_rgba( -            r as f32 / 255.0, -            g as f32 / 255.0, -            b as f32 / 255.0, -            a as f32 / 255.0, -        ) -    } else { -        Color::from_rgba8(r, g, b, a as f32 / 255.0) -    } +    Color::from_rgba8(r, g, b, a as f32 / 255.0)  }  #[derive(Debug, Clone, Default)] | 
