From 96964b7093726debc478930b578ad21d9eb3cecd Mon Sep 17 00:00:00 2001 From: Matt Brubeck Date: Mon, 28 Sep 2015 18:57:08 -0600 Subject: [PATCH] servo: Merge #7771 - Use the correct container size in compute_overflow (from mbrubeck:rtl-stacking-context); r=pcwalton Fixes #7768 - positioning of RTL stacking contexts. r? @pcwalton Source-Repo: https://github.com/servo/servo Source-Revision: e68bd8d4ffc7f2cd9511999760c7a67418a853e1 --- servo/components/layout/block.rs | 7 ++++--- servo/components/layout/fragment.rs | 9 ++++++--- servo/components/layout/inline.rs | 3 ++- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/servo/components/layout/block.rs b/servo/components/layout/block.rs index 1083c1749796..890353b7a10f 100644 --- a/servo/components/layout/block.rs +++ b/servo/components/layout/block.rs @@ -2126,9 +2126,10 @@ impl Flow for BlockFlow { } fn compute_overflow(&self) -> Rect { - self.fragment.compute_overflow(&self.base - .early_absolute_position_info - .relative_containing_block_size) + self.fragment.compute_overflow(&self.base.early_absolute_position_info + .relative_containing_block_size, + self.base.early_absolute_position_info + .relative_containing_block_mode) } fn iterate_through_fragment_border_boxes(&self, diff --git a/servo/components/layout/fragment.rs b/servo/components/layout/fragment.rs index 5981f13b7abb..c6cea07b77b7 100644 --- a/servo/components/layout/fragment.rs +++ b/servo/components/layout/fragment.rs @@ -2160,9 +2160,12 @@ impl Fragment { } /// Computes the overflow rect of this fragment relative to the start of the flow. - pub fn compute_overflow(&self, relative_containing_block_size: &LogicalSize) -> Rect { - // FIXME(pcwalton, #2795): Get the real container size. - let container_size = Size2D::zero(); + pub fn compute_overflow(&self, + relative_containing_block_size: &LogicalSize, + relative_containing_block_mode: WritingMode) + -> Rect { + let container_size = + relative_containing_block_size.to_physical(relative_containing_block_mode); let mut border_box = self.border_box.to_physical(self.style.writing_mode, container_size); // Relative position can cause us to draw outside our border box. diff --git a/servo/components/layout/inline.rs b/servo/components/layout/inline.rs index cdcc46e2ad90..5692ffa93df1 100644 --- a/servo/components/layout/inline.rs +++ b/servo/components/layout/inline.rs @@ -1775,7 +1775,8 @@ impl Flow for InlineFlow { let mut overflow = ZERO_RECT; for fragment in &self.fragments.fragments { overflow = overflow.union(&fragment.compute_overflow( - &self.base.early_absolute_position_info.relative_containing_block_size)) + &self.base.early_absolute_position_info.relative_containing_block_size, + self.base.early_absolute_position_info.relative_containing_block_mode)); } overflow }