From e3d881ac0dcdef627dd6f858a8bd8e24fcb1538d Mon Sep 17 00:00:00 2001 From: robtfm <50659922+robtfm@users.noreply.github.com> Date: Sun, 28 Jan 2024 21:04:53 +0000 Subject: [PATCH 1/5] fix test height calc --- crates/bevy_text/src/pipeline.rs | 8 ++++---- crates/bevy_ui/src/widget/text.rs | 26 +++++++++++++++----------- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/crates/bevy_text/src/pipeline.rs b/crates/bevy_text/src/pipeline.rs index 56c861016cd23..47df272ae02c8 100644 --- a/crates/bevy_text/src/pipeline.rs +++ b/crates/bevy_text/src/pipeline.rs @@ -177,10 +177,10 @@ impl TextMeasureInfo { max: Vec2::ZERO, }; - let min = info.compute_size(Vec2::new(0.0, f32::INFINITY)); - let max = info.compute_size(Vec2::INFINITY); - info.min = min; - info.max = max; + let min_width = info.compute_size(Vec2::new(0.0, f32::INFINITY)); + let max_width = info.compute_size(Vec2::INFINITY); + info.min = min_width.min(max_width); + info.max = min_width.max(max_width); info } diff --git a/crates/bevy_ui/src/widget/text.rs b/crates/bevy_ui/src/widget/text.rs index 77204e43c037c..cea3a9ff4f483 100644 --- a/crates/bevy_ui/src/widget/text.rs +++ b/crates/bevy_ui/src/widget/text.rs @@ -50,7 +50,7 @@ impl Measure for TextMeasure { width: Option, height: Option, available_width: AvailableSpace, - _available_height: AvailableSpace, + available_height: AvailableSpace, ) -> Vec2 { let x = width.unwrap_or_else(|| match available_width { AvailableSpace::Definite(x) => { @@ -64,16 +64,20 @@ impl Measure for TextMeasure { AvailableSpace::MaxContent => self.info.max.x, }); - height - .map_or_else( - || match available_width { - AvailableSpace::Definite(_) => self.info.compute_size(Vec2::new(x, f32::MAX)), - AvailableSpace::MinContent => Vec2::new(x, self.info.min.y), - AvailableSpace::MaxContent => Vec2::new(x, self.info.max.y), - }, - |y| Vec2::new(x, y), - ) - .ceil() + let y = height.unwrap_or_else(|| { + if width.is_some() || matches!(available_width, AvailableSpace::Definite(_)) { + // given a definite width we have a definite height + self.info.compute_size(Vec2::new(x, f32::MAX)).y + } else { + match available_height { + AvailableSpace::MinContent => self.info.min.y, + AvailableSpace::MaxContent => self.info.max.y, + AvailableSpace::Definite(_) => self.info.compute_size(Vec2::new(x, f32::MAX)).y, + } + } + }); + + Vec2::new(x, y).ceil() } } From bc796ca847a6b6549523175ad481ffae4b83a6f7 Mon Sep 17 00:00:00 2001 From: robtfm <50659922+robtfm@users.noreply.github.com> Date: Sun, 28 Jan 2024 21:23:01 +0000 Subject: [PATCH 2/5] fix FixedMeasure --- crates/bevy_ui/src/widget/text.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/bevy_ui/src/widget/text.rs b/crates/bevy_ui/src/widget/text.rs index cea3a9ff4f483..2a05fd02a959d 100644 --- a/crates/bevy_ui/src/widget/text.rs +++ b/crates/bevy_ui/src/widget/text.rs @@ -92,7 +92,7 @@ fn create_text_measure( match TextMeasureInfo::from_text(&text, fonts, scale_factor) { Ok(measure) => { if text.linebreak_behavior == BreakLineOn::NoWrap { - content_size.set(FixedMeasure { size: measure.max }); + content_size.set(FixedMeasure { size: Vec2::new(measure.max.x, measure.min.y) }); } else { content_size.set(TextMeasure { info: measure }); } From d9ea764719c4a04139b633d320a301500254647c Mon Sep 17 00:00:00 2001 From: robtfm <50659922+robtfm@users.noreply.github.com> Date: Sun, 28 Jan 2024 21:23:20 +0000 Subject: [PATCH 3/5] fmt --- crates/bevy_ui/src/widget/text.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/crates/bevy_ui/src/widget/text.rs b/crates/bevy_ui/src/widget/text.rs index 2a05fd02a959d..d1f744360a2f0 100644 --- a/crates/bevy_ui/src/widget/text.rs +++ b/crates/bevy_ui/src/widget/text.rs @@ -92,7 +92,9 @@ fn create_text_measure( match TextMeasureInfo::from_text(&text, fonts, scale_factor) { Ok(measure) => { if text.linebreak_behavior == BreakLineOn::NoWrap { - content_size.set(FixedMeasure { size: Vec2::new(measure.max.x, measure.min.y) }); + content_size.set(FixedMeasure { + size: Vec2::new(measure.max.x, measure.min.y), + }); } else { content_size.set(TextMeasure { info: measure }); } From 45182e5b8817013872fb40a7816942560a0b7796 Mon Sep 17 00:00:00 2001 From: robtfm <50659922+robtfm@users.noreply.github.com> Date: Sun, 28 Jan 2024 21:38:59 +0000 Subject: [PATCH 4/5] comment --- crates/bevy_ui/src/widget/text.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/crates/bevy_ui/src/widget/text.rs b/crates/bevy_ui/src/widget/text.rs index d1f744360a2f0..86de67b2635c9 100644 --- a/crates/bevy_ui/src/widget/text.rs +++ b/crates/bevy_ui/src/widget/text.rs @@ -92,6 +92,9 @@ fn create_text_measure( match TextMeasureInfo::from_text(&text, fonts, scale_factor) { Ok(measure) => { if text.linebreak_behavior == BreakLineOn::NoWrap { + // with no wrapping the text will always be a single line, which is as wide as + // possible and as short as possible. so we use the max width and min height + // directly. content_size.set(FixedMeasure { size: Vec2::new(measure.max.x, measure.min.y), }); From d1fc082e3bff5838f94bdd93d50347d64f8e1e27 Mon Sep 17 00:00:00 2001 From: robtfm <50659922+robtfm@users.noreply.github.com> Date: Sun, 28 Jan 2024 23:06:17 +0000 Subject: [PATCH 5/5] fmt --- crates/bevy_ui/src/widget/text.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/bevy_ui/src/widget/text.rs b/crates/bevy_ui/src/widget/text.rs index 86de67b2635c9..6e412de641e1e 100644 --- a/crates/bevy_ui/src/widget/text.rs +++ b/crates/bevy_ui/src/widget/text.rs @@ -93,7 +93,7 @@ fn create_text_measure( Ok(measure) => { if text.linebreak_behavior == BreakLineOn::NoWrap { // with no wrapping the text will always be a single line, which is as wide as - // possible and as short as possible. so we use the max width and min height + // possible and as short as possible. so we use the max width and min height // directly. content_size.set(FixedMeasure { size: Vec2::new(measure.max.x, measure.min.y),