Skip to content

Commit

Permalink
Merge pull request #2667 from mrobinson/overflow
Browse files Browse the repository at this point in the history
Add overflow to child layer size
  • Loading branch information
pcwalton committed Jun 20, 2014
2 parents 1a8d1ed + 22ea9a6 commit 5b0feac
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 12 deletions.
35 changes: 23 additions & 12 deletions src/components/main/layout/block.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1256,10 +1256,11 @@ impl BlockFlow {
}

// If we got here, then we need a new layer.
let size = Size2D(self.base.position.size.width.to_nearest_px() as uint,
self.base.position.size.height.to_nearest_px() as uint);
let origin = Point2D(self.base.abs_position.x.to_nearest_px() as uint,
self.base.abs_position.y.to_nearest_px() as uint);
let layer_rect = self.base.position.union(&self.base.overflow);
let size = Size2D(layer_rect.size.width.to_nearest_px() as uint,
layer_rect.size.height.to_nearest_px() as uint);
let origin = Point2D(layer_rect.origin.x.to_nearest_px() as uint,
layer_rect.origin.y.to_nearest_px() as uint);
let scroll_policy = if self.is_fixed() {
FixedPosition
} else {
Expand Down Expand Up @@ -1814,15 +1815,25 @@ pub trait WidthAndMarginsComputer {
fn set_width_constraint_solutions(&self,
block: &mut BlockFlow,
solution: WidthConstraintSolution) {
let fragment = block.fragment();
fragment.margin.left = solution.margin_left;
fragment.margin.right = solution.margin_right;
let mut width = Au(0);
{
let fragment = block.fragment();
fragment.margin.left = solution.margin_left;
fragment.margin.right = solution.margin_right;

// The associated fragment has the border box of this flow.
// Left border edge.
fragment.border_box.origin.x = fragment.margin.left;
// Border box width.
width = solution.width + fragment.border_padding.horizontal();
fragment.border_box.size.width = width;
}

// The associated fragment has the border box of this flow.
// Left border edge.
fragment.border_box.origin.x = fragment.margin.left;
// Border box width.
fragment.border_box.size.width = solution.width + fragment.border_padding.horizontal();
// We also resize the block itself, to ensure that overflow is not calculated
// as the width of our parent. We might be smaller and we might be larger if we
// overflow.
let flow = flow::mut_base(block);
flow.position.size.width = width;
}

/// Set the x coordinate of the given flow if it is absolutely positioned.
Expand Down
1 change: 1 addition & 0 deletions src/test/ref/basic.list
Original file line number Diff line number Diff line change
Expand Up @@ -77,3 +77,4 @@
== linebreak_inline_span_a.html linebreak_inline_span_b.html
== overconstrained_block.html overconstrained_block_ref.html
== position_fixed_background_color_a.html position_fixed_background_color_b.html
== position_fixed_overflow_a.html position_fixed_overflow_b.html
8 changes: 8 additions & 0 deletions src/test/ref/position_fixed_overflow_a.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<html>
<body>
<div style="top: 5px; left: 5px; height: 5px; width: 5px; position: fixed;">
<div style="height: 100px; width: 100px; background: black;"></div>
</div>
</body>
</html>

6 changes: 6 additions & 0 deletions src/test/ref/position_fixed_overflow_b.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<html>
<body>
<div style="top: 5px; left: 5px; height: 100px; width: 100px; position: absolute; background: black;"></div>
</body>
</html>

0 comments on commit 5b0feac

Please sign in to comment.