Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(445)

Unified Diff: Source/core/rendering/RenderFlowThread.cpp

Issue 17176018: [CSS Regions] Add new regionOversetChange event (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Integrated styling fixes Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/rendering/RenderFlowThread.h ('k') | Source/core/rendering/RenderNamedFlowThread.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/rendering/RenderFlowThread.cpp
diff --git a/Source/core/rendering/RenderFlowThread.cpp b/Source/core/rendering/RenderFlowThread.cpp
index f8148f44e5f228e3dfba58e9f305752fca01068c..4fdffddee14ec1646890918b6cd850b102321f91 100644
--- a/Source/core/rendering/RenderFlowThread.cpp
+++ b/Source/core/rendering/RenderFlowThread.cpp
@@ -48,6 +48,7 @@ namespace WebCore {
RenderFlowThread::RenderFlowThread()
: RenderBlock(0)
+ , m_previousRegionCount(0)
, m_autoLogicalHeightRegionsCount(0)
, m_regionsInvalidated(false)
, m_regionsHaveUniformLogicalWidth(true)
@@ -55,6 +56,7 @@ RenderFlowThread::RenderFlowThread()
, m_overset(true)
, m_hasRegionsWithStyling(false)
, m_dispatchRegionLayoutUpdateEvent(false)
+ , m_dispatchRegionOversetChangeEvent(false)
, m_pageLogicalSizeChanged(false)
, m_inConstrainedLayoutPhase(false)
, m_needsTwoPhasesLayout(false)
@@ -217,6 +219,9 @@ void RenderFlowThread::layout()
if (shouldDispatchRegionLayoutUpdateEvent())
dispatchRegionLayoutUpdateEvent();
+
+ if (shouldDispatchRegionOversetChangeEvent())
+ dispatchRegionOversetChangeEvent();
}
void RenderFlowThread::updateLogicalWidth()
@@ -729,7 +734,7 @@ void RenderFlowThread::applyBreakAfterContent(LayoutUnit clientHeight)
addForcedRegionBreak(clientHeight, this, false);
}
-void RenderFlowThread::computeOverflowStateForRegions(LayoutUnit oldClientAfterEdge)
+void RenderFlowThread::computeOversetStateForRegions(LayoutUnit oldClientAfterEdge)
{
LayoutUnit height = oldClientAfterEdge;
@@ -747,25 +752,34 @@ void RenderFlowThread::computeOverflowStateForRegions(LayoutUnit oldClientAfterE
RenderRegion* region = *iter;
LayoutUnit flowMin = height - (isHorizontalWritingMode() ? region->flowThreadPortionRect().y() : region->flowThreadPortionRect().x());
LayoutUnit flowMax = height - (isHorizontalWritingMode() ? region->flowThreadPortionRect().maxY() : region->flowThreadPortionRect().maxX());
- RenderRegion::RegionState previousState = region->regionState();
- RenderRegion::RegionState state = RenderRegion::RegionFit;
+ RegionOversetState previousState = region->regionOversetState();
+ RegionOversetState state = RegionFit;
if (flowMin <= 0)
- state = RenderRegion::RegionEmpty;
+ state = RegionEmpty;
if (flowMax > 0 && region == lastReg)
- state = RenderRegion::RegionOverset;
- region->setRegionState(state);
+ state = RegionOverset;
+ region->setRegionOversetState(state);
// determine whether the NamedFlow object should dispatch a regionLayoutUpdate event
// FIXME: currently it cannot determine whether a region whose regionOverset state remained either "fit" or "overset" has actually
// changed, so it just assumes that the NamedFlow should dispatch the event
if (previousState != state
- || state == RenderRegion::RegionFit
- || state == RenderRegion::RegionOverset)
+ || state == RegionFit
+ || state == RegionOverset)
setDispatchRegionLayoutUpdateEvent(true);
+
+ if (previousState != state)
+ setDispatchRegionOversetChangeEvent(true);
+ }
+
+ // If the number of regions has changed since we last computed the overset property, schedule the regionOversetChange event.
+ if (previousRegionCountChanged()) {
+ setDispatchRegionOversetChangeEvent(true);
+ updatePreviousRegionCount();
}
// With the regions overflow state computed we can also set the overset flag for the named flow.
// If there are no valid regions in the chain, overset is true.
- m_overset = lastReg ? lastReg->regionState() == RenderRegion::RegionOverset : true;
+ m_overset = lastReg ? lastReg->regionOversetState() == RegionOverset : true;
}
bool RenderFlowThread::regionInRange(const RenderRegion* targetRegion, const RenderRegion* startRegion, const RenderRegion* endRegion) const
« no previous file with comments | « Source/core/rendering/RenderFlowThread.h ('k') | Source/core/rendering/RenderNamedFlowThread.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698