initial text wrapping impl (resizing will break)
This commit is contained in:
1 parent
b2950566af
commit
61df088cc7
8 files changed
+126
-55
No files matched your search
+10
-8
@@ -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
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user