initial text wrapping impl (resizing will break)

This commit is contained in:
iris committed 2025-09-28 01:32:10 -04:00
1 parent b2950566af
commit 61df088cc7
8 files changed
+126 -55

No files matched your search

+10 -8
View File
@@ -44,11 +44,8 @@ impl Text {
UiRegion::from_size_align(self.size, self.align)
}
fn update_buf(&mut self, font_system: &mut FontSystem) {
self.buf.set_metrics(
font_system,
Metrics::new(self.attrs.font_size, self.attrs.line_height),
);
fn update_buf(&mut self, font_system: &mut FontSystem, width: Option<f32>) {
self.attrs.apply(font_system, &mut self.buf, width);
if self.content.changed {
self.content.changed = false;
self.buf.set_text(
@@ -63,8 +60,13 @@ impl Text {
impl Widget for Text {
fn draw(&mut self, painter: &mut Painter) {
let width = if self.attrs.wrap {
Some(painter.px_size().x)
} else {
None
};
let font_system = &mut painter.text_data().font_system;
self.update_buf(font_system);
self.update_buf(font_system, width);
let (handle, offset) = painter.render_text(&mut self.buf, &self.attrs);
let dims = handle.size();
self.size = offset.size(&handle);
@@ -75,7 +77,7 @@ impl Widget for Text {
}
fn desired_size(&mut self, ctx: &mut SizeCtx) -> UiVec2 {
self.update_buf(&mut ctx.text.font_system);
self.update_buf(&mut ctx.text.font_system, None);
let (handle, offset) = ctx.draw_text(&mut self.buf, &self.attrs);
UiVec2::abs(offset.size(&handle))
}
@@ -137,7 +139,7 @@ impl FnOnce<(&mut Ui,)> for TextBuilder {
};
text.content.changed = false;
self.attrs
.apply(&mut args.0.text.font_system, &mut text.buf);
.apply(&mut args.0.text.font_system, &mut text.buf, None);
text
}
}