aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout/inline.rs
diff options
context:
space:
mode:
authorGlenn Watson <gw@intuitionlibrary.com>2014-09-26 17:12:22 +1000
committerGlenn Watson <gw@intuitionlibrary.com>2014-09-26 17:12:22 +1000
commitcf79e64a5aae68604e2c194310b650aca481c92a (patch)
tree49906a2fb459f3ab7d42f36a472042523b971309 /components/layout/inline.rs
parent20f5fdd000408867ac2d3a90ad9a8b55cfb8bc9e (diff)
downloadservo-cf79e64a5aae68604e2c194310b650aca481c92a.tar.gz
servo-cf79e64a5aae68604e2c194310b650aca481c92a.zip
Improve acid2. Fix line height calculation. Text fragments get correct enclosing element style.
* Enabled acid2 on mac + linux. Updated the reference image. The only difference from the real acid2 now is the paint order and a 1 pixel horizontal offset on the nose. * Change line-height to be calculated correctly. * Apply enclosing element style to text fragments.
Diffstat (limited to 'components/layout/inline.rs')
-rw-r--r--components/layout/inline.rs37
1 files changed, 28 insertions, 9 deletions
diff --git a/components/layout/inline.rs b/components/layout/inline.rs
index 613cd27a3d1..dd473d8edda 100644
--- a/components/layout/inline.rs
+++ b/components/layout/inline.rs
@@ -674,8 +674,7 @@ impl InlineFragments {
}
/// Pushes a new inline fragment.
- pub fn push(&mut self, fragment: &mut Fragment, style: Arc<ComputedValues>) {
- fragment.add_inline_context_style(style);
+ pub fn push(&mut self, fragment: &mut Fragment) {
self.fragments.push(fragment.clone());
}
@@ -821,12 +820,9 @@ impl InlineFlow {
vertical_align::baseline => (-ascent, false),
vertical_align::middle => {
// TODO: x-block-size value should be used from font info.
- let xblock_size = Au(0);
- let fragment_block_size = fragment.content_block_size(layout_context);
- let offset_block_start = -(xblock_size + fragment_block_size).scale_by(0.5);
- *block_size_above_baseline = offset_block_start.scale_by(-1.0);
- *depth_below_baseline = fragment_block_size - *block_size_above_baseline;
- (offset_block_start, false)
+ // TODO: The code below passes our current reftests but
+ // doesn't work in all situations. Add vertical align reftests and fix this.
+ (-ascent, false)
},
vertical_align::sub => {
// TODO: The proper position for subscripts should be used. Lower the baseline to
@@ -917,7 +913,27 @@ impl InlineFlow {
let font_metrics = text::font_metrics_for_style(font_context, &font_style);
let line_height = text::line_height_from_style(style, &font_metrics);
let inline_metrics = InlineMetrics::from_font_metrics(&font_metrics, line_height);
- (inline_metrics.block_size_above_baseline, inline_metrics.depth_below_baseline)
+
+ let mut block_size_above_baseline = inline_metrics.block_size_above_baseline;
+ let mut depth_below_baseline = inline_metrics.depth_below_baseline;
+
+ for frag in self.fragments.fragments.iter() {
+ match frag.inline_context {
+ Some(ref inline_context) => {
+ for style in inline_context.styles.iter() {
+ let font_style = text::computed_style_to_font_style(&**style);
+ let font_metrics = text::font_metrics_for_style(font_context, &font_style);
+ let line_height = text::line_height_from_style(&**style, &font_metrics);
+ let inline_metrics = InlineMetrics::from_font_metrics(&font_metrics, line_height);
+ block_size_above_baseline = Au::max(block_size_above_baseline, inline_metrics.block_size_above_baseline);
+ depth_below_baseline = Au::max(depth_below_baseline, inline_metrics.depth_below_baseline);
+ }
+ }
+ None => {}
+ }
+ }
+
+ (block_size_above_baseline, depth_below_baseline)
}
}
@@ -954,6 +970,9 @@ impl Flow for InlineFlow {
intrinsic_inline_sizes.preferred_inline_size =
intrinsic_inline_sizes.preferred_inline_size +
fragment_intrinsic_inline_sizes.preferred_inline_size;
+ intrinsic_inline_sizes.surround_inline_size =
+ intrinsic_inline_sizes.surround_inline_size +
+ fragment_intrinsic_inline_sizes.surround_inline_size;
}
self.base.intrinsic_inline_sizes = intrinsic_inline_sizes;