Extract a named struct from text_layout::Line's style runs
This commit is contained in:
parent
3cb50ed6b7
commit
a7145021b6
1 changed files with 25 additions and 12 deletions
|
@ -177,7 +177,14 @@ impl<'a> Hash for CacheKeyRef<'a> {
|
|||
#[derive(Default, Debug, Clone)]
|
||||
pub struct Line {
|
||||
layout: Arc<LineLayout>,
|
||||
style_runs: SmallVec<[(u32, Color, Underline); 32]>,
|
||||
style_runs: SmallVec<[StyleRun; 32]>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
struct StyleRun {
|
||||
len: u32,
|
||||
color: Color,
|
||||
underline: Underline,
|
||||
}
|
||||
|
||||
#[derive(Default, Debug)]
|
||||
|
@ -208,7 +215,11 @@ impl Line {
|
|||
fn new(layout: Arc<LineLayout>, runs: &[(usize, RunStyle)]) -> Self {
|
||||
let mut style_runs = SmallVec::new();
|
||||
for (len, style) in runs {
|
||||
style_runs.push((*len as u32, style.color, style.underline));
|
||||
style_runs.push(StyleRun {
|
||||
len: *len as u32,
|
||||
color: style.color,
|
||||
underline: style.underline,
|
||||
});
|
||||
}
|
||||
Self { layout, style_runs }
|
||||
}
|
||||
|
@ -301,28 +312,30 @@ impl Line {
|
|||
|
||||
let mut finished_underline = None;
|
||||
if glyph.index >= run_end {
|
||||
if let Some((run_len, run_color, run_underline)) = style_runs.next() {
|
||||
if let Some(style_run) = style_runs.next() {
|
||||
if let Some((_, underline_style)) = underline {
|
||||
if *run_underline != underline_style {
|
||||
if style_run.underline != underline_style {
|
||||
finished_underline = underline.take();
|
||||
}
|
||||
}
|
||||
if run_underline.thickness.into_inner() > 0. {
|
||||
if style_run.underline.thickness.into_inner() > 0. {
|
||||
underline.get_or_insert((
|
||||
vec2f(
|
||||
glyph_origin.x(),
|
||||
origin.y() + baseline_offset.y() + 0.618 * self.layout.descent,
|
||||
),
|
||||
Underline {
|
||||
color: Some(run_underline.color.unwrap_or(*run_color)),
|
||||
thickness: run_underline.thickness,
|
||||
squiggly: run_underline.squiggly,
|
||||
color: Some(
|
||||
style_run.underline.color.unwrap_or(style_run.color),
|
||||
),
|
||||
thickness: style_run.underline.thickness,
|
||||
squiggly: style_run.underline.squiggly,
|
||||
},
|
||||
));
|
||||
}
|
||||
|
||||
run_end += *run_len as usize;
|
||||
color = *run_color;
|
||||
run_end += style_run.len as usize;
|
||||
color = style_run.color;
|
||||
} else {
|
||||
run_end = self.layout.len;
|
||||
finished_underline = underline.take();
|
||||
|
@ -405,8 +418,8 @@ impl Line {
|
|||
|
||||
if glyph.index >= color_end {
|
||||
if let Some(next_run) = color_runs.next() {
|
||||
color_end += next_run.0 as usize;
|
||||
color = next_run.1;
|
||||
color_end += next_run.len as usize;
|
||||
color = next_run.color;
|
||||
} else {
|
||||
color_end = self.layout.len;
|
||||
color = Color::black();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue