From ad9fad097c4d171686b1b7c4f4e6ce27ca633c0d Mon Sep 17 00:00:00 2001 From: Eric Atkinson Date: Mon, 27 May 2013 15:13:12 -0700 Subject: [PATCH] Tweak inline layout so text is baseline-aligned --- src/components/servo/layout/inline.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/components/servo/layout/inline.rs b/src/components/servo/layout/inline.rs index 062afd6d5b4..9eba9c966e8 100644 --- a/src/components/servo/layout/inline.rs +++ b/src/components/servo/layout/inline.rs @@ -840,13 +840,23 @@ impl InlineFlowData { // according to the `vertical-align` property of the containing block. let halfleading = match cur_box { TextRenderBoxClass(text_box) => { - (text_box.run.font.metrics.em_size - line_height).scale_by(0.5) + //ad is the AD height as defined by CSS 2.1 ยง 10.8.1 + let ad = text_box.text_data.run.font.metrics.ascent + text_box.text_data.run.font.metrics.descent; + (line_height - ad).scale_by(0.5) }, _ => Au(0), }; + //FIXME: when line-height is set on an inline element, the half leading + //distance can be negative. + let halfleading = Au::max(halfleading, Au(0)); + + let height = match cur_box { + TextRenderBoxClass(text_box) => text_box.text_data.run.font.metrics.ascent, + _ => cur_box.position().size.height + }; + do cur_box.with_mut_base |base| { - let height = base.position.size.height; base.position.origin.y = cur_y + halfleading + baseline_offset - height; } }