Fix text wrapping when a child of a v_stack()

Conrad Irwin created

Change summary

crates/gpui2/src/elements/text.rs     | 9 +++++++--
crates/storybook2/src/stories/text.rs | 3 ++-
2 files changed, 9 insertions(+), 3 deletions(-)

Detailed changes

crates/gpui2/src/elements/text.rs 🔗

@@ -64,13 +64,18 @@ impl<V: 'static> Element<V> for Text {
 
         let layout_id = cx.request_measured_layout(Default::default(), rem_size, {
             let element_state = element_state.clone();
-            move |known_dimensions, _| {
+            move |known_dimensions, available_space| {
+                let wrap_width = known_dimensions.width.or(match available_space.width {
+                    crate::AvailableSpace::Definite(x) => Some(x),
+                    _ => None,
+                });
+
                 let Some(lines) = text_system
                     .shape_text(
                         &text,
                         font_size,
                         &runs[..],
-                        known_dimensions.width, // Wrap if we know the width.
+                        wrap_width, // Wrap if we know the width.
                     )
                     .log_err()
                 else {

crates/storybook2/src/stories/text.rs 🔗

@@ -1,4 +1,5 @@
 use gpui::{div, white, Div, ParentComponent, Render, Styled, View, VisualContext, WindowContext};
+use ui::v_stack;
 
 pub struct TextStory;
 
@@ -12,7 +13,7 @@ impl Render for TextStory {
     type Element = Div<Self>;
 
     fn render(&mut self, cx: &mut gpui::ViewContext<Self>) -> Self::Element {
-        div().size_full().bg(white()).child(concat!(
+        v_stack().w_96().bg(white()).child(concat!(
             "The quick brown fox jumps over the lazy dog. ",
             "Meanwhile, the lazy dog decided it was time for a change. ",
             "He started daily workout routines, ate healthier and became the fastest dog in town.",