summaryrefslogtreecommitdiff
path: root/Source/WebCore/rendering/RenderRegion.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/rendering/RenderRegion.cpp')
-rw-r--r--Source/WebCore/rendering/RenderRegion.cpp33
1 files changed, 32 insertions, 1 deletions
diff --git a/Source/WebCore/rendering/RenderRegion.cpp b/Source/WebCore/rendering/RenderRegion.cpp
index 2b7e4252a..8a7487d7c 100644
--- a/Source/WebCore/rendering/RenderRegion.cpp
+++ b/Source/WebCore/rendering/RenderRegion.cpp
@@ -49,6 +49,7 @@ RenderRegion::RenderRegion(Node* node, RenderFlowThread* flowThread)
, m_parentNamedFlowThread(0)
, m_isValid(false)
, m_hasCustomRegionStyle(false)
+ , m_hasAutoLogicalHeight(false)
, m_regionState(RegionUndefined)
{
}
@@ -172,6 +173,23 @@ void RenderRegion::checkRegionStyle()
m_flowThread->checkRegionsWithStyling();
}
+void RenderRegion::updateRegionHasAutoLogicalHeightFlag()
+{
+ ASSERT(m_flowThread);
+
+ if (!isValid())
+ return;
+
+ bool didHaveAutoLogicalHeight = m_hasAutoLogicalHeight;
+ m_hasAutoLogicalHeight = shouldHaveAutoLogicalHeight();
+ if (m_hasAutoLogicalHeight != didHaveAutoLogicalHeight) {
+ if (m_hasAutoLogicalHeight)
+ view()->flowThreadController()->incrementAutoLogicalHeightRegions();
+ else
+ view()->flowThreadController()->decrementAutoLogicalHeightRegions();
+ }
+}
+
void RenderRegion::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle)
{
RenderReplaced::styleDidChange(diff, oldStyle);
@@ -185,6 +203,7 @@ void RenderRegion::styleDidChange(StyleDifference diff, const RenderStyle* oldSt
}
checkRegionStyle();
+ updateRegionHasAutoLogicalHeightFlag();
}
void RenderRegion::layout()
@@ -282,12 +301,24 @@ void RenderRegion::attachRegion()
// The region just got attached to the flow thread, lets check whether
// it has region styling rules associated.
checkRegionStyle();
+
+ if (!isValid())
+ return;
+
+ m_hasAutoLogicalHeight = shouldHaveAutoLogicalHeight();
+ if (hasAutoLogicalHeight())
+ view()->flowThreadController()->incrementAutoLogicalHeightRegions();
}
void RenderRegion::detachRegion()
{
- if (m_flowThread)
+ if (m_flowThread) {
m_flowThread->removeRegionFromThread(this);
+ if (hasAutoLogicalHeight()) {
+ ASSERT(isValid());
+ view()->flowThreadController()->decrementAutoLogicalHeightRegions();
+ }
+ }
m_flowThread = 0;
}