auto merge of #3673 : mrobinson/servo/iframe-margin, r=pcwalton

Instead of taking margin size into account twice when positioning
layers, just rely on the absolute position calculated during display
list construction.
This commit is contained in:
bors-servo 2014-10-14 04:51:35 -06:00
commit 834df4e211
4 changed files with 23 additions and 12 deletions

View file

@ -1249,7 +1249,7 @@ impl Fragment {
match self.specific {
IframeFragment(ref iframe_fragment) => {
self.finalize_position_and_size_of_iframe(iframe_fragment,
flow_origin,
absolute_fragment_bounds.origin,
layout_context)
}
_ => {}
@ -1755,23 +1755,20 @@ impl Fragment {
iframe_fragment: &IframeFragmentInfo,
offset: Point2D<Au>,
layout_context: &LayoutContext) {
let mbp = (self.margin + self.border_padding).to_physical(self.style.writing_mode);
let border_padding = (self.border_padding).to_physical(self.style.writing_mode);
let content_size = self.content_box().size.to_physical(self.style.writing_mode);
let left = offset.x + mbp.left;
let top = offset.y + mbp.top;
let width = content_size.width;
let height = content_size.height;
let origin = Point2D(geometry::to_frac_px(left) as f32, geometry::to_frac_px(top) as f32);
let size = Size2D(geometry::to_frac_px(width) as f32, geometry::to_frac_px(height) as f32);
let rect = Rect(origin, size);
let iframe_rect = Rect(Point2D(geometry::to_frac_px(offset.x + border_padding.left) as f32,
geometry::to_frac_px(offset.y + border_padding.top) as f32),
Size2D(geometry::to_frac_px(content_size.width) as f32,
geometry::to_frac_px(content_size.height) as f32));
debug!("finalizing position and size of iframe for {:?},{:?}",
iframe_fragment.pipeline_id,
iframe_fragment.subpage_id);
let msg = FrameRectMsg(iframe_fragment.pipeline_id, iframe_fragment.subpage_id, rect);
let ConstellationChan(ref chan) = layout_context.shared.constellation_chan;
chan.send(msg)
chan.send(FrameRectMsg(iframe_fragment.pipeline_id,
iframe_fragment.subpage_id,
iframe_rect));
}
/// Returns true if and only if this is the *primary fragment* for the fragment's style object

View file

@ -127,6 +127,7 @@ fragment=top != ../html/acid2.html acid2_ref.html
== iframe/simple.html iframe/simple_ref.html
== iframe/multiple_external.html iframe/multiple_external_ref.html
== iframe/overflow.html iframe/overflow_ref.html
== iframe/positioning_margin.html iframe/positioning_margin_ref.html
== floated_generated_content_a.html floated_generated_content_b.html
== inline_block_margin_a.html inline_block_margin_ref.html

View file

@ -0,0 +1,8 @@
<html>
<body style="margin: 0px;">
<iframe src="data:text/html,%3Chtml%3E%3Cbody%20style%3D%22margin%3A%200px%3B%22%3E%3Cdiv%20style%3D%22background%3A%20green%3B%20height%3A%20100px%3B%20width%3A%20100px%3B%22%3E%3C%2Fdiv%3E%3C%2Fbody%3E%3C%2Fhtml%3E"
style="display: block; border: 0px; width: 100px; height: 100px; margin-top: 100px;">
</iframe>
</body>
</html>

View file

@ -0,0 +1,5 @@
<html>
<body>
<div style="position: absolute; width: 100px; height: 100px; background: green; top: 100px; left: 0px;"></div>
</body>
</html>