From c143846e426c8352e7c6fe6997323db114a4e5d6 Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Thu, 10 Apr 2025 18:58:36 -0600 Subject: [PATCH] Revert buggy pr (#28554) Earlier, I merged #24723 Before merging it, I made a change that was incorrect and fast followed with a fix: #28548 Following that fix, @bennetbo discovered that the modals where no longer highlighting correctly, particularly the outline modal. So I'm going to revert it all. Release Notes: - N/A --- .../{text_style.rs => text_layout.rs} | 20 -------- crates/gpui/src/elements/div.rs | 4 +- crates/gpui/src/elements/text.rs | 18 ++----- crates/gpui/src/text_system/line.rs | 49 ++++++------------- 4 files changed, 21 insertions(+), 70 deletions(-) rename crates/gpui/examples/{text_style.rs => text_layout.rs} (79%) diff --git a/crates/gpui/examples/text_style.rs b/crates/gpui/examples/text_layout.rs similarity index 79% rename from crates/gpui/examples/text_style.rs rename to crates/gpui/examples/text_layout.rs index 4c8a7b83a9b4cdc3916ad7a0a26a7b8cd64b6a98..c4cbcd4e5edc142dde58a1dd5d9b61a1daee0c3a 100644 --- a/crates/gpui/examples/text_style.rs +++ b/crates/gpui/examples/text_layout.rs @@ -8,13 +8,11 @@ struct HelloWorld {} impl Render for HelloWorld { fn render(&mut self, _window: &mut Window, _cx: &mut Context) -> impl IntoElement { div() - .font_family(".SystemUIFont") .bg(gpui::white()) .flex() .flex_col() .gap_2() .p_4() - .gap_4() .size_full() .child(div().child("Text left")) .child(div().text_center().child("Text center")) @@ -73,24 +71,6 @@ impl Render for HelloWorld { .child("100%"), ), ) - .child( - div() - .id("Text Link") - .text_color(gpui::blue()) - .cursor_pointer() - .active(|this| { - this.text_color(gpui::white()) - .bg(gpui::blue()) - .text_decoration_1() - .text_decoration_wavy() - }) - .hover(|this| { - this.text_color(gpui::rgb(0x973717)) - .bg(gpui::yellow()) - .text_decoration_1() - }) - .child("Text with hover, active styles"), - ) } } diff --git a/crates/gpui/src/elements/div.rs b/crates/gpui/src/elements/div.rs index 543881fbfd382eef5c8c4946fd28b448d4230bae..cf9cc45291226206514c42937dc7cd8003ed2330 100644 --- a/crates/gpui/src/elements/div.rs +++ b/crates/gpui/src/elements/div.rs @@ -1666,7 +1666,7 @@ impl Interactivity { window: &mut Window, cx: &mut App, ) { - use crate::BorderStyle; + use crate::{BorderStyle, TextAlign}; if global_id.is_some() && (style.debug || style.debug_below || cx.has_global::()) @@ -1689,7 +1689,7 @@ impl Interactivity { .ok() .and_then(|mut text| text.pop()) { - text.paint(hitbox.origin, FONT_SIZE, None, None, window, cx) + text.paint(hitbox.origin, FONT_SIZE, TextAlign::Left, None, window, cx) .ok(); let text_bounds = crate::Bounds { diff --git a/crates/gpui/src/elements/text.rs b/crates/gpui/src/elements/text.rs index faacbc75527fd26f572c772b2a85a87f6406d0c7..2407606a6636a958082e58af0d15069857198219 100644 --- a/crates/gpui/src/elements/text.rs +++ b/crates/gpui/src/elements/text.rs @@ -1,12 +1,10 @@ use crate::{ ActiveTooltip, AnyView, App, Bounds, DispatchPhase, Element, ElementId, GlobalElementId, HighlightStyle, Hitbox, IntoElement, LayoutId, MouseDownEvent, MouseMoveEvent, MouseUpEvent, - Pixels, Point, SharedString, Size, TextAlign, TextOverflow, TextRun, TextStyle, - TextStyleRefinement, TooltipId, WhiteSpace, Window, WrappedLine, WrappedLineLayout, - register_tooltip_mouse_handlers, set_tooltip_on_window, + Pixels, Point, SharedString, Size, TextOverflow, TextRun, TextStyle, TooltipId, WhiteSpace, + Window, WrappedLine, WrappedLineLayout, register_tooltip_mouse_handlers, set_tooltip_on_window, }; use anyhow::anyhow; -use refineable::Refineable as _; use smallvec::SmallVec; use std::{ cell::{Cell, RefCell}, @@ -417,18 +415,12 @@ impl TextLayout { let line_height = element_state.line_height; let mut line_origin = bounds.origin; - - // Get current text_style refinements - let mut text_style = TextStyleRefinement::default(); - for style in window.text_style_stack.iter().as_ref() { - text_style.refine(&style); - } - + let text_style = window.text_style(); for line in &element_state.lines { line.paint_background( line_origin, line_height, - text_style.text_align.unwrap_or(TextAlign::Left), + text_style.text_align, Some(bounds), window, cx, @@ -437,7 +429,7 @@ impl TextLayout { line.paint( line_origin, line_height, - Some(&text_style), + text_style.text_align, Some(bounds), window, cx, diff --git a/crates/gpui/src/text_system/line.rs b/crates/gpui/src/text_system/line.rs index 35037b261c3d17a25974661a31d956a33d7a73b4..ee351c342a00d9873478e04067866dd7f78d9f0b 100644 --- a/crates/gpui/src/text_system/line.rs +++ b/crates/gpui/src/text_system/line.rs @@ -1,7 +1,7 @@ use crate::{ App, Bounds, Half, Hsla, LineLayout, Pixels, Point, Result, SharedString, StrikethroughStyle, - TextAlign, TextStyleRefinement, UnderlineStyle, Window, WrapBoundary, WrappedLineLayout, black, - fill, point, px, size, + TextAlign, UnderlineStyle, Window, WrapBoundary, WrappedLineLayout, black, fill, point, px, + size, }; use derive_more::{Deref, DerefMut}; use smallvec::SmallVec; @@ -71,7 +71,7 @@ impl ShapedLine { origin, &self.layout, line_height, - None, + TextAlign::default(), None, &self.decoration_runs, &[], @@ -125,12 +125,11 @@ impl WrappedLine { } /// Paint this line of text to the window. - #[allow(clippy::too_many_arguments)] pub fn paint( &self, origin: Point, line_height: Pixels, - text_style: Option<&TextStyleRefinement>, + align: TextAlign, bounds: Option>, window: &mut Window, cx: &mut App, @@ -144,7 +143,7 @@ impl WrappedLine { origin, &self.layout.unwrapped_layout, line_height, - text_style, + align, align_width, &self.decoration_runs, &self.wrap_boundaries, @@ -190,7 +189,7 @@ fn paint_line( origin: Point, layout: &LineLayout, line_height: Pixels, - text_style: Option<&TextStyleRefinement>, + align: TextAlign, align_width: Option, decoration_runs: &[DecorationRun], wrap_boundaries: &[WrapBoundary], @@ -204,12 +203,6 @@ fn paint_line( line_height * (wrap_boundaries.len() as f32 + 1.), ), ); - - // TODO: text_align and line_height need to inherit from normal style when is hovered or activated. - let mut text_align = text_style - .and_then(|s| s.text_align) - .unwrap_or(TextAlign::Left); - window.paint_layer(line_bounds, |window| { let padding_top = (line_height - layout.ascent - layout.descent) / 2.; let baseline_offset = point(px(0.), padding_top + layout.ascent); @@ -225,7 +218,7 @@ fn paint_line( origin, align_width.unwrap_or(layout.width), px(0.0), - &text_align, + &align, layout, wraps.peek(), ), @@ -276,7 +269,7 @@ fn paint_line( origin, align_width.unwrap_or(layout.width), glyph.position.x, - &text_align, + &align, layout, wraps.peek(), ); @@ -299,44 +292,30 @@ fn paint_line( } if let Some(style_run) = style_run { - let mut run_color = style_run.color; - let mut run_underline = style_run.underline.as_ref(); - let mut run_strikethrough = style_run.strikethrough; - // Override by text run by current style when hovered or activated. - if let Some(val) = text_style.and_then(|s| s.color) { - run_color = val; - } - if let Some(val) = text_style.and_then(|s| s.underline.as_ref()) { - run_underline = Some(val); - } - if let Some(val) = text_style.and_then(|s| s.strikethrough) { - run_strikethrough = Some(val); - } - if let Some((_, underline_style)) = &mut current_underline { if style_run.underline.as_ref() != Some(underline_style) { finished_underline = current_underline.take(); } } - if let Some(run_underline) = run_underline.as_ref() { + if let Some(run_underline) = style_run.underline.as_ref() { current_underline.get_or_insert(( point( glyph_origin.x, glyph_origin.y + baseline_offset.y + (layout.descent * 0.618), ), UnderlineStyle { - color: Some(run_underline.color.unwrap_or(run_color)), + color: Some(run_underline.color.unwrap_or(style_run.color)), thickness: run_underline.thickness, wavy: run_underline.wavy, }, )); } if let Some((_, strikethrough_style)) = &mut current_strikethrough { - if run_strikethrough.as_ref() != Some(strikethrough_style) { + if style_run.strikethrough.as_ref() != Some(strikethrough_style) { finished_strikethrough = current_strikethrough.take(); } } - if let Some(mut run_strikethrough) = run_strikethrough.as_ref() { + if let Some(run_strikethrough) = style_run.strikethrough.as_ref() { current_strikethrough.get_or_insert(( point( glyph_origin.x, @@ -344,14 +323,14 @@ fn paint_line( + (((layout.ascent * 0.5) + baseline_offset.y) * 0.5), ), StrikethroughStyle { - color: Some(run_strikethrough.color.unwrap_or(run_color)), + color: Some(run_strikethrough.color.unwrap_or(style_run.color)), thickness: run_strikethrough.thickness, }, )); } run_end += style_run.len as usize; - color = run_color; + color = style_run.color; } else { run_end = layout.len; finished_underline = current_underline.take();