mirror of
https://github.com/servo/servo.git
synced 2025-08-02 20:20:14 +01:00
layout: Allow floats to have negative ceilings due to negative margins.
This fixes `margin-collapse-104.htm`, which is currently accidentally passing due to lack of #10085. When that PR lands, then that will become a representative test case.
This commit is contained in:
parent
a211bd1a12
commit
24d81e95b4
1 changed files with 15 additions and 12 deletions
|
@ -56,14 +56,14 @@ struct FloatList {
|
|||
/// Information about each of the floats here.
|
||||
floats: PersistentList<Float>,
|
||||
/// Cached copy of the maximum block-start offset of the float.
|
||||
max_block_start: Au,
|
||||
max_block_start: Option<Au>,
|
||||
}
|
||||
|
||||
impl FloatList {
|
||||
fn new() -> FloatList {
|
||||
FloatList {
|
||||
floats: PersistentList::new(),
|
||||
max_block_start: Au(0),
|
||||
max_block_start: None,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -247,15 +247,15 @@ impl Floats {
|
|||
|
||||
/// Adds a new float to the list.
|
||||
pub fn add_float(&mut self, info: &PlacementInfo) {
|
||||
let new_info;
|
||||
{
|
||||
new_info = PlacementInfo {
|
||||
size: info.size,
|
||||
ceiling: max(info.ceiling, self.list.max_block_start + self.offset.block),
|
||||
max_inline_size: info.max_inline_size,
|
||||
kind: info.kind
|
||||
}
|
||||
}
|
||||
let new_info = PlacementInfo {
|
||||
size: info.size,
|
||||
ceiling: match self.list.max_block_start {
|
||||
None => info.ceiling,
|
||||
Some(max_block_start) => max(info.ceiling, max_block_start + self.offset.block),
|
||||
},
|
||||
max_inline_size: info.max_inline_size,
|
||||
kind: info.kind
|
||||
};
|
||||
|
||||
debug!("add_float: added float with info {:?}", new_info);
|
||||
|
||||
|
@ -269,7 +269,10 @@ impl Floats {
|
|||
};
|
||||
|
||||
self.list.floats = self.list.floats.prepend_elem(new_float);
|
||||
self.list.max_block_start = max(self.list.max_block_start, new_float.bounds.start.b);
|
||||
self.list.max_block_start = match self.list.max_block_start {
|
||||
None => Some(new_float.bounds.start.b),
|
||||
Some(max_block_start) => Some(max(max_block_start, new_float.bounds.start.b)),
|
||||
}
|
||||
}
|
||||
|
||||
/// Given the three sides of the bounding rectangle in the block-start direction, finds the
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue