summaryrefslogtreecommitdiffstats
path: root/wgpu/src/renderer/widget/text.rs
diff options
context:
space:
mode:
Diffstat (limited to 'wgpu/src/renderer/widget/text.rs')
-rw-r--r--wgpu/src/renderer/widget/text.rs53
1 files changed, 33 insertions, 20 deletions
diff --git a/wgpu/src/renderer/widget/text.rs b/wgpu/src/renderer/widget/text.rs
index a8ead70b..08a162ba 100644
--- a/wgpu/src/renderer/widget/text.rs
+++ b/wgpu/src/renderer/widget/text.rs
@@ -1,5 +1,8 @@
use crate::{Primitive, Renderer};
-use iced_native::{layout, text, Color, Layout, MouseCursor, Size, Text};
+use iced_native::{
+ text, Color, Font, HorizontalAlignment, MouseCursor, Rectangle, Size,
+ VerticalAlignment,
+};
use std::f32;
@@ -7,30 +10,40 @@ use std::f32;
const DEFAULT_TEXT_SIZE: f32 = 20.0;
impl text::Renderer for Renderer {
- fn layout(&self, text: &Text, limits: &layout::Limits) -> layout::Node {
- let limits = limits.width(text.width).height(text.height);
- let size = text.size.map(f32::from).unwrap_or(DEFAULT_TEXT_SIZE);
- let bounds = limits.max();
-
- let (width, height) =
- self.text_pipeline
- .measure(&text.content, size, text.font, bounds);
-
- let size = limits.resolve(Size::new(width, height));
+ fn default_size(&self) -> u16 {
+ DEFAULT_TEXT_SIZE as u16
+ }
- layout::Node::new(size)
+ fn measure(
+ &self,
+ content: &str,
+ size: u16,
+ font: Font,
+ bounds: Size,
+ ) -> (f32, f32) {
+ self.text_pipeline
+ .measure(content, f32::from(size), font, bounds)
}
- fn draw(&mut self, text: &Text, layout: Layout<'_>) -> Self::Output {
+ fn draw(
+ &mut self,
+ bounds: Rectangle,
+ content: &str,
+ size: u16,
+ font: Font,
+ color: Option<Color>,
+ horizontal_alignment: HorizontalAlignment,
+ vertical_alignment: VerticalAlignment,
+ ) -> Self::Output {
(
Primitive::Text {
- content: text.content.clone(),
- size: text.size.map(f32::from).unwrap_or(DEFAULT_TEXT_SIZE),
- bounds: layout.bounds(),
- color: text.color.unwrap_or(Color::BLACK),
- font: text.font,
- horizontal_alignment: text.horizontal_alignment,
- vertical_alignment: text.vertical_alignment,
+ content: content.to_string(),
+ size: f32::from(size),
+ bounds,
+ color: color.unwrap_or(Color::BLACK),
+ font,
+ horizontal_alignment,
+ vertical_alignment,
},
MouseCursor::OutOfBounds,
)