Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Actually store the overflow for inline-block elements. #7588

Merged
merged 1 commit into from Sep 17, 2015
Merged
Changes from all commits
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

Actually store the overflow for inline-block elements.

Fixes #7571
  • Loading branch information
notriddle committed Sep 9, 2015
commit 029af815707333266e7192241b74bef0e129cf27
@@ -40,6 +40,7 @@ use flow::{ImmutableFlowUtils, LateAbsolutePositionInfo, MutableFlowUtils, Opaqu
use flow::{LAYERS_NEEDED_FOR_DESCENDANTS, NEEDS_LAYER};
use flow::{PostorderFlowTraversal, PreorderFlowTraversal, mut_base};
use flow::{self, BaseFlow, EarlyAbsolutePositionInfo, ForceNonfloatedFlag, FlowClass, Flow};
use flow_ref;
use fragment::{CoordinateSystem, Fragment, FragmentBorderBoxIterator, HAS_LAYER};
use fragment::{SpecificFragmentInfo};
use incremental::{REFLOW, REFLOW_OUT_OF_FLOW};
@@ -494,6 +495,20 @@ impl<'a> PostorderFlowTraversal for AbsoluteStoreOverflowTraversal<'a> {
}
}

flow.mutate_fragments(&mut |f: &mut Fragment| {
match f.specific {
SpecificFragmentInfo::InlineBlock(ref mut info) => {
let block = flow_ref::deref_mut(&mut info.flow_ref);
(block.as_mut_block() as &mut Flow).early_store_overflow(self.layout_context);
}
SpecificFragmentInfo::InlineAbsolute(ref mut info) => {
let block = flow_ref::deref_mut(&mut info.flow_ref);
(block.as_mut_block() as &mut Flow).early_store_overflow(self.layout_context);
}
_ => (),
}
});

flow.early_store_overflow(self.layout_context);
}
}
@@ -953,10 +953,11 @@ unsafe impl Sync for BaseFlow {}
impl fmt::Debug for BaseFlow {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f,
"@ {:?}, CC {}, ADC {}",
"@ {:?}, CC {}, ADC {}, Ovr {:?}",
self.position,
self.parallel.children_count.load(Ordering::SeqCst),
self.abs_descendants.len())
self.abs_descendants.len(),
self.overflow)
}
}

@@ -2179,11 +2179,11 @@ impl Fragment {
match self.specific {
SpecificFragmentInfo::InlineBlock(ref info) => {
let block_flow = info.flow_ref.as_block();
overflow = overflow.union(&block_flow.compute_overflow());
overflow = overflow.union(&flow::base(block_flow).overflow);
}
SpecificFragmentInfo::InlineAbsolute(ref info) => {
let block_flow = info.flow_ref.as_block();
overflow = overflow.union(&block_flow.compute_overflow());
overflow = overflow.union(&flow::base(block_flow).overflow);
}
_ => (),
}
@@ -8,7 +8,7 @@ use block::{AbsoluteAssignBSizesTraversal, AbsoluteStoreOverflowTraversal};
use context::LayoutContext;
use display_list_builder::{FragmentDisplayListBuilding, InlineFlowDisplayListBuilding};
use floats::{FloatKind, Floats, PlacementInfo};
use flow::{MutableFlowUtils, OpaqueFlow};
use flow::{MutableFlowUtils, EarlyAbsolutePositionInfo, OpaqueFlow};
use flow::{self, BaseFlow, FlowClass, Flow, ForceNonfloatedFlag, IS_ABSOLUTELY_POSITIONED};
use flow_ref;
use fragment::{CoordinateSystem, Fragment, FragmentBorderBoxIterator, SpecificFragmentInfo};
@@ -1616,6 +1616,31 @@ impl Flow for InlineFlow {
Au(0),
-self.base.position.size.block));

let containing_block_size = LogicalSize::new(writing_mode,
Au(0),
self.base.position.size.block);
self.mutate_fragments(&mut |f: &mut Fragment| {
match f.specific {
SpecificFragmentInfo::InlineBlock(ref mut info) => {
let block = flow_ref::deref_mut(&mut info.flow_ref);
flow::mut_base(block).early_absolute_position_info = EarlyAbsolutePositionInfo {
relative_containing_block_size: containing_block_size,
relative_containing_block_mode: writing_mode,
};
(block.as_mut_block() as &mut Flow).late_store_overflow(layout_context);
}
SpecificFragmentInfo::InlineAbsolute(ref mut info) => {
let block = flow_ref::deref_mut(&mut info.flow_ref);
flow::mut_base(block).early_absolute_position_info = EarlyAbsolutePositionInfo {
relative_containing_block_size: containing_block_size,
relative_containing_block_mode: writing_mode,
};
(block.as_mut_block() as &mut Flow).late_store_overflow(layout_context);
}
_ => (),
}
});

self.base.restyle_damage.remove(REFLOW_OUT_OF_FLOW | REFLOW);
}

@@ -1817,7 +1842,11 @@ impl Flow for InlineFlow {

impl fmt::Debug for InlineFlow {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{:?} - {:x} - {:?}", self.class(), self.base.debug_id(), self.fragments)
write!(f, "{:?} - {:x} - Ovr {:?} - {:?}",
self.class(),
self.base.debug_id(),
flow::base(self).overflow,
self.fragments)
}
}

@@ -271,6 +271,7 @@ flaky_cpu == linebreak_simple_a.html linebreak_simple_b.html
# Should be ==?
!= overflow_position_abs_inside_normal_a.html overflow_position_abs_inside_normal_b.html
== overflow_position_abs_simple_a.html overflow_position_abs_simple_b.html
== overflow_position_rel_inline_block.html overflow_position_rel_inline_block_ref.html
== overflow_scroll.html overflow_simple_b.html
== overflow_simple_a.html overflow_simple_b.html
== overflow_wrap_a.html overflow_wrap_ref.html
@@ -0,0 +1,11 @@
<style>
div {
overflow:hidden;
display:inline-block;
position:relative;
width:100px;
height:100px;
background:red
}
</style>
<div></div>
@@ -0,0 +1,9 @@
<style>
div {
position:relative;
width:100px;
height:100px;
background:red
}
</style>
<div></div>
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.