Auto merge of #5706 - pcwalton:absolute-clipping-of-own-contents, r=glennw

r? @glennw

<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/5706)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2015-04-15 21:04:59 -05:00
commit f7bfea5879
5 changed files with 96 additions and 10 deletions

View file

@ -170,7 +170,7 @@ impl DisplayList {
let doit = |items: &Vec<DisplayItem>| {
for item in items.iter() {
match *item {
DisplayItem::SolidColorClass(ref solid_color) => println!("{:?} SolidColor. {:?}", indentation, solid_color.base.bounds),
DisplayItem::SolidColorClass(ref solid_color) => println!("{} SolidColor. {:?}", indentation, solid_color.base.bounds),
DisplayItem::TextClass(ref text) => println!("{:?} Text. {:?}", indentation, text.base.bounds),
DisplayItem::ImageClass(ref image) => println!("{:?} Image. {:?}", indentation, image.base.bounds),
DisplayItem::BorderClass(ref border) => println!("{:?} Border. {:?}", indentation, border.base.bounds),
@ -184,14 +184,11 @@ impl DisplayList {
doit(&(self.all_display_items()));
if self.children.len() != 0 {
println!("{} Children stacking contexts list length: {}", indentation, self.children.len());
for subitem in self.children.iter() {
doit(&subitem.display_list.all_display_items());
if subitem.display_list.children.len() != 0 {
// Rant: String doesn't have a substr() method that won't overflow if the
// selected range is bigger than the string length.
subitem.display_list.print_items(indentation.clone()+&indentation[0..min_length]);
}
println!("{} Children stacking contexts list length: {}",
indentation,
self.children.len());
for sublist in self.children.iter() {
sublist.display_list.print_items(indentation.clone()+&indentation[0..min_length]);
}
}
}

View file

@ -1253,6 +1253,11 @@ impl BlockFlowDisplayListBuilding for BlockFlow {
layout_context: &LayoutContext,
background_border_level: BackgroundAndBorderLevel) {
// Add the box that starts the block context.
let clip = if self.fragment.establishes_stacking_context() {
self.base.clip.translate(&-self.base.stacking_relative_position)
} else {
self.base.clip.clone()
};
self.fragment.build_display_list(display_list,
layout_context,
&self.base.stacking_relative_position,
@ -1263,7 +1268,7 @@ impl BlockFlowDisplayListBuilding for BlockFlow {
.absolute_position_info
.relative_containing_block_mode,
background_border_level,
&self.base.clip);
&clip);
// Add children.
for kid in self.base.children.iter_mut() {