@@ -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,
@@ -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<Pixels>,
line_height: Pixels,
- text_style: Option<&TextStyleRefinement>,
+ align: TextAlign,
bounds: Option<Bounds<Pixels>>,
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<Pixels>,
layout: &LineLayout,
line_height: Pixels,
- text_style: Option<&TextStyleRefinement>,
+ align: TextAlign,
align_width: Option<Pixels>,
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();