diff options
Diffstat (limited to 'wgpu')
| -rw-r--r-- | wgpu/src/layer.rs | 15 | ||||
| -rw-r--r-- | wgpu/src/layer/text.rs | 8 | ||||
| -rw-r--r-- | wgpu/src/text.rs | 28 | 
3 files changed, 46 insertions, 5 deletions
| diff --git a/wgpu/src/layer.rs b/wgpu/src/layer.rs index 7a5a0f7c..10b3332d 100644 --- a/wgpu/src/layer.rs +++ b/wgpu/src/layer.rs @@ -120,12 +120,25 @@ impl<'a> Layer<'a> {              } => {                  let layer = &mut layers[current_layer]; -                layer.text.push(Text::Managed { +                layer.text.push(Text::Paragraph {                      paragraph: paragraph.clone(),                      position: *position + translation,                      color: *color,                  });              } +            Primitive::Editor { +                editor, +                position, +                color, +            } => { +                let layer = &mut layers[current_layer]; + +                layer.text.push(Text::Editor { +                    editor: editor.clone(), +                    position: *position + translation, +                    color: *color, +                }); +            }              Primitive::Text {                  content,                  bounds, diff --git a/wgpu/src/layer/text.rs b/wgpu/src/layer/text.rs index b61615d6..d46b39da 100644 --- a/wgpu/src/layer/text.rs +++ b/wgpu/src/layer/text.rs @@ -1,16 +1,22 @@  use crate::core::alignment;  use crate::core::text;  use crate::core::{Color, Font, Pixels, Point, Rectangle}; +use crate::graphics::text::editor;  use crate::graphics::text::paragraph;  /// A paragraph of text.  #[derive(Debug, Clone)]  pub enum Text<'a> { -    Managed { +    Paragraph {          paragraph: paragraph::Weak,          position: Point,          color: Color,      }, +    Editor { +        editor: editor::Weak, +        position: Point, +        color: Color, +    },      Cached(Cached<'a>),  } diff --git a/wgpu/src/text.rs b/wgpu/src/text.rs index 5c9f4d7e..397c38dd 100644 --- a/wgpu/src/text.rs +++ b/wgpu/src/text.rs @@ -2,7 +2,7 @@ use crate::core::alignment;  use crate::core::{Rectangle, Size};  use crate::graphics::color;  use crate::graphics::text::cache::{self, Cache}; -use crate::graphics::text::{font_system, Paragraph}; +use crate::graphics::text::{font_system, Editor, Paragraph};  use crate::layer::Text;  use std::borrow::Cow; @@ -74,15 +74,19 @@ impl Pipeline {          enum Allocation {              Paragraph(Paragraph), +            Editor(Editor),              Cache(cache::KeyHash),          }          let allocations: Vec<_> = sections              .iter()              .map(|section| match section { -                Text::Managed { paragraph, .. } => { +                Text::Paragraph { paragraph, .. } => {                      paragraph.upgrade().map(Allocation::Paragraph)                  } +                Text::Editor { editor, .. } => { +                    editor.upgrade().map(Allocation::Editor) +                }                  Text::Cached(text) => {                      let (key, _) = cache.allocate(                          font_system, @@ -117,7 +121,7 @@ impl Pipeline {                      vertical_alignment,                      color,                  ) = match section { -                    Text::Managed { +                    Text::Paragraph {                          position, color, ..                      } => {                          use crate::core::text::Paragraph as _; @@ -135,6 +139,24 @@ impl Pipeline {                              *color,                          )                      } +                    Text::Editor { +                        position, color, .. +                    } => { +                        use crate::core::text::Editor as _; + +                        let Some(Allocation::Editor(editor)) = allocation +                        else { +                            return None; +                        }; + +                        ( +                            editor.buffer(), +                            Rectangle::new(*position, editor.min_bounds()), +                            alignment::Horizontal::Left, +                            alignment::Vertical::Top, +                            *color, +                        ) +                    }                      Text::Cached(text) => {                          let Some(Allocation::Cache(key)) = allocation else {                              return None; | 
