diff --git a/src/buffer.rs b/src/buffer.rs index 9b844e5..6794e42 100644 --- a/src/buffer.rs +++ b/src/buffer.rs @@ -126,17 +126,9 @@ impl<'b> Iterator for LayoutRunIter<'b> { continue; } - let mut line_height_opt: Option = None; - for glyph in layout_line.glyphs.iter() { - if let Some(glyph_line_height) = glyph.line_height_opt { - line_height_opt = match line_height_opt { - Some(line_height) => Some(line_height.max(glyph_line_height)), - None => Some(glyph_line_height), - }; - } - } - - let line_height = line_height_opt.unwrap_or(self.buffer.metrics.line_height); + let line_height = layout_line + .line_height_opt + .unwrap_or(self.buffer.metrics.line_height); let line_top = self.line_top; let glyph_height = layout_line.max_ascent + layout_line.max_descent; let centering_offset = (line_height - glyph_height) / 2.0; diff --git a/src/layout.rs b/src/layout.rs index 64226b5..b1bcca4 100644 --- a/src/layout.rs +++ b/src/layout.rs @@ -95,6 +95,8 @@ pub struct LayoutLine { pub max_ascent: f32, /// Maximum descent of the glyphs in line pub max_descent: f32, + /// Maximum line height of any spans in line + pub line_height_opt: Option, /// Glyphs in line pub glyphs: Vec, } diff --git a/src/shape.rs b/src/shape.rs index e631f16..ec74857 100644 --- a/src/shape.rs +++ b/src/shape.rs @@ -1453,6 +1453,16 @@ impl ShapeLine { } } + let mut line_height_opt: Option = None; + for glyph in glyphs.iter() { + if let Some(glyph_line_height) = glyph.line_height_opt { + line_height_opt = match line_height_opt { + Some(line_height) => Some(line_height.max(glyph_line_height)), + None => Some(glyph_line_height), + }; + } + } + layout_lines.push(LayoutLine { w: if align != Align::Justified { visual_line.w @@ -1463,6 +1473,7 @@ impl ShapeLine { }, max_ascent, max_descent, + line_height_opt, glyphs, }); } @@ -1473,6 +1484,7 @@ impl ShapeLine { w: 0.0, max_ascent: 0.0, max_descent: 0.0, + line_height_opt: None, glyphs: Default::default(), }); }