summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2023-02-01 03:39:15 +0100
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2023-02-24 13:19:49 +0100
commit98a16fd670d501a0072fee13b023be686ff30cf8 (patch)
tree86e78bee56f4e2d20075204b37c0699d6c22123c
parentba258f8fbcf72eaabefe193b6fbee6484b44e569 (diff)
downloadiced-98a16fd670d501a0072fee13b023be686ff30cf8.tar.gz
iced-98a16fd670d501a0072fee13b023be686ff30cf8.tar.bz2
iced-98a16fd670d501a0072fee13b023be686ff30cf8.zip
Implement proper text alignment support in `iced_wgpu`
-rw-r--r--wgpu/src/text.rs37
1 files changed, 32 insertions, 5 deletions
diff --git a/wgpu/src/text.rs b/wgpu/src/text.rs
index 2b18299f..19d0782a 100644
--- a/wgpu/src/text.rs
+++ b/wgpu/src/text.rs
@@ -1,6 +1,7 @@
pub use iced_native::text::Hit;
use iced_graphics::layer::Text;
+use iced_native::alignment;
use iced_native::{Font, Rectangle, Size};
#[allow(missing_debug_implementations)]
@@ -93,11 +94,37 @@ impl Pipeline {
let text_areas: Vec<_> = sections
.iter()
.zip(buffers.iter())
- .map(|(section, buffer)| glyphon::TextArea {
- buffer,
- left: (section.bounds.x * scale_factor) as i32,
- top: (section.bounds.y * scale_factor) as i32,
- bounds,
+ .map(|(section, buffer)| {
+ let x = section.bounds.x * scale_factor;
+ let y = section.bounds.y * scale_factor;
+
+ let max_width = buffer
+ .layout_runs()
+ .fold(0.0f32, |max, run| max.max(run.line_w));
+
+ let total_height = buffer.visible_lines() as f32
+ * section.size
+ * 1.2
+ * scale_factor;
+
+ let left = match section.horizontal_alignment {
+ alignment::Horizontal::Left => x,
+ alignment::Horizontal::Center => x - max_width / 2.0,
+ alignment::Horizontal::Right => x - max_width,
+ };
+
+ let top = match section.vertical_alignment {
+ alignment::Vertical::Top => y,
+ alignment::Vertical::Center => y - total_height / 2.0,
+ alignment::Vertical::Bottom => y - total_height,
+ };
+
+ glyphon::TextArea {
+ buffer,
+ left: left as i32,
+ top: top as i32,
+ bounds,
+ }
})
.collect();