Fix Text node/tool max width/height bounding box calculation (#3628)
* Fix: correctly apply max width/height in text bounding box * bug fix * Code cleanup --------- Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
parent
8738e59c21
commit
84f91eb795
|
|
@ -96,7 +96,9 @@ impl TextContext {
|
||||||
|
|
||||||
for line in layout.lines() {
|
for line in layout.lines() {
|
||||||
for item in line.items() {
|
for item in line.items() {
|
||||||
if let PositionedLayoutItem::GlyphRun(glyph_run) = item {
|
if let PositionedLayoutItem::GlyphRun(glyph_run) = item
|
||||||
|
&& typesetting.max_height.filter(|&max_height| glyph_run.baseline() > max_height as f32).is_none()
|
||||||
|
{
|
||||||
path_builder.render_glyph_run(&glyph_run, typesetting.tilt, per_glyph_instances);
|
path_builder.render_glyph_run(&glyph_run, typesetting.tilt, per_glyph_instances);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -107,15 +109,21 @@ impl TextContext {
|
||||||
|
|
||||||
/// Calculate the bounding box of text using the specified font and typesetting configuration
|
/// Calculate the bounding box of text using the specified font and typesetting configuration
|
||||||
pub fn bounding_box(&mut self, text: &str, font: &Font, font_cache: &FontCache, typesetting: TypesettingConfig, for_clipping_test: bool) -> DVec2 {
|
pub fn bounding_box(&mut self, text: &str, font: &Font, font_cache: &FontCache, typesetting: TypesettingConfig, for_clipping_test: bool) -> DVec2 {
|
||||||
if !for_clipping_test && let (Some(max_height), Some(max_width)) = (typesetting.max_height, typesetting.max_width) {
|
|
||||||
return DVec2::new(max_width, max_height);
|
|
||||||
}
|
|
||||||
|
|
||||||
let Some(layout) = self.layout_text(text, font, font_cache, typesetting) else {
|
let Some(layout) = self.layout_text(text, font, font_cache, typesetting) else {
|
||||||
return DVec2::ZERO;
|
return DVec2::ZERO;
|
||||||
};
|
};
|
||||||
|
|
||||||
DVec2::new(layout.full_width() as f64, layout.height() as f64)
|
let layout_width = layout.full_width() as f64;
|
||||||
|
let layout_height = layout.height() as f64;
|
||||||
|
|
||||||
|
if for_clipping_test {
|
||||||
|
return DVec2::new(layout_width, layout_height);
|
||||||
|
}
|
||||||
|
|
||||||
|
let width = typesetting.max_width.unwrap_or(layout_width);
|
||||||
|
let height = typesetting.max_height.unwrap_or(layout_height);
|
||||||
|
|
||||||
|
DVec2::new(width, height)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Check if text lines are being clipped due to height constraints
|
/// Check if text lines are being clipped due to height constraints
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue