summaryrefslogtreecommitdiffstats
path: root/wgpu/src/geometry.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-01-17 13:22:02 +0100
committerLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-01-17 13:22:02 +0100
commit66bea7bb6d4575c1d36d28a10e08dc60a0ea20b0 (patch)
tree1add3721b949a1bf8e46d6b92aa7c47157368661 /wgpu/src/geometry.rs
parent468f7432dd96839a86a7bac751351fcf43b7ae63 (diff)
downloadiced-66bea7bb6d4575c1d36d28a10e08dc60a0ea20b0.tar.gz
iced-66bea7bb6d4575c1d36d28a10e08dc60a0ea20b0.tar.bz2
iced-66bea7bb6d4575c1d36d28a10e08dc60a0ea20b0.zip
Apply scaling during `Frame::fill_text` in `iced_wgpu`
Diffstat (limited to 'wgpu/src/geometry.rs')
-rw-r--r--wgpu/src/geometry.rs40
1 files changed, 34 insertions, 6 deletions
diff --git a/wgpu/src/geometry.rs b/wgpu/src/geometry.rs
index e0bff67e..36092da0 100644
--- a/wgpu/src/geometry.rs
+++ b/wgpu/src/geometry.rs
@@ -1,4 +1,5 @@
//! Build and draw geometry.
+use crate::core::text::LineHeight;
use crate::core::{Point, Rectangle, Size, Vector};
use crate::graphics::color;
use crate::graphics::geometry::fill::{self, Fill};
@@ -318,14 +319,41 @@ impl Frame {
pub fn fill_text(&mut self, text: impl Into<Text>) {
let text = text.into();
- let position = if self.transforms.current.is_identity {
- text.position
+ let (position, size, line_height) = if self
+ .transforms
+ .current
+ .is_identity
+ {
+ (text.position, text.size, text.line_height)
} else {
- let transformed = self.transforms.current.raw.transform_point(
+ let position = self.transforms.current.raw.transform_point(
lyon::math::Point::new(text.position.x, text.position.y),
);
- Point::new(transformed.x, transformed.y)
+ let size =
+ self.transforms.current.raw.transform_vector(
+ lyon::math::Vector::new(0.0, text.size.0),
+ );
+
+ let line_height = match text.line_height {
+ LineHeight::Absolute(size) => {
+ let new_height = self
+ .transforms
+ .current
+ .raw
+ .transform_vector(lyon::math::Vector::new(0.0, size.0))
+ .y;
+
+ LineHeight::Absolute(new_height.into())
+ }
+ LineHeight::Relative(factor) => LineHeight::Relative(factor),
+ };
+
+ (
+ Point::new(position.x, position.y),
+ size.y.into(),
+ line_height,
+ )
};
let bounds = Rectangle {
@@ -340,8 +368,8 @@ impl Frame {
content: text.content,
bounds,
color: text.color,
- size: text.size,
- line_height: text.line_height,
+ size,
+ line_height,
font: text.font,
horizontal_alignment: text.horizontal_alignment,
vertical_alignment: text.vertical_alignment,