diff options
| author | 2023-09-12 14:51:00 +0200 | |
|---|---|---|
| committer | 2023-09-12 14:51:00 +0200 | |
| commit | 6448429103c9c82b90040ac5a5a097bdded23f82 (patch) | |
| tree | 79582bde4a7d6df71df0abefe35146b06452409f /tiny_skia | |
| parent | 346af3f8b0baa418fd37b878bc2930ff0bd57cc0 (diff) | |
| download | iced-6448429103c9c82b90040ac5a5a097bdded23f82.tar.gz iced-6448429103c9c82b90040ac5a5a097bdded23f82.tar.bz2 iced-6448429103c9c82b90040ac5a5a097bdded23f82.zip | |
Draft `Editor` API and `TextEditor` widget
Diffstat (limited to '')
| -rw-r--r-- | tiny_skia/src/backend.rs | 25 | ||||
| -rw-r--r-- | tiny_skia/src/text.rs | 32 | 
2 files changed, 57 insertions, 0 deletions
| diff --git a/tiny_skia/src/backend.rs b/tiny_skia/src/backend.rs index 72184c8a..5f66dff2 100644 --- a/tiny_skia/src/backend.rs +++ b/tiny_skia/src/backend.rs @@ -383,6 +383,31 @@ impl Backend {                      clip_mask,                  );              } +            Primitive::Editor { +                editor, +                position, +                color, +            } => { +                let physical_bounds = +                    (Rectangle::new(*position, editor.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_editor( +                    editor, +                    *position + translation, +                    *color, +                    scale_factor, +                    pixels, +                    clip_mask, +                ); +            }              Primitive::Text {                  content,                  bounds, diff --git a/tiny_skia/src/text.rs b/tiny_skia/src/text.rs index 4f6e3941..d055c749 100644 --- a/tiny_skia/src/text.rs +++ b/tiny_skia/src/text.rs @@ -2,6 +2,7 @@ use crate::core::alignment;  use crate::core::text::{LineHeight, Shaping};  use crate::core::{Color, Font, Pixels, Point, Rectangle};  use crate::graphics::text::cache::{self, Cache}; +use crate::graphics::text::editor;  use crate::graphics::text::font_system;  use crate::graphics::text::paragraph; @@ -64,6 +65,37 @@ impl Pipeline {          );      } +    pub fn draw_editor( +        &mut self, +        editor: &editor::Weak, +        position: Point, +        color: Color, +        scale_factor: f32, +        pixels: &mut tiny_skia::PixmapMut<'_>, +        clip_mask: Option<&tiny_skia::Mask>, +    ) { +        use crate::core::text::Editor as _; + +        let Some(editor) = editor.upgrade() else { +            return; +        }; + +        let mut font_system = font_system().write().expect("Write font system"); + +        draw( +            font_system.raw(), +            &mut self.glyph_cache, +            editor.buffer(), +            Rectangle::new(position, editor.min_bounds()), +            color, +            alignment::Horizontal::Left, +            alignment::Vertical::Top, +            scale_factor, +            pixels, +            clip_mask, +        ); +    } +      pub fn draw_cached(          &mut self,          content: &str, | 
