Index: third_party/WebKit/Source/core/layout/LayoutGeometryMap.cpp |
diff --git a/third_party/WebKit/Source/core/layout/LayoutGeometryMap.cpp b/third_party/WebKit/Source/core/layout/LayoutGeometryMap.cpp |
index 9cb0abffa3efaf13210faa2fc3893274ad9efdbc..a50e90597ccf64ec8477691147a3cba62bf81adc 100644 |
--- a/third_party/WebKit/Source/core/layout/LayoutGeometryMap.cpp |
+++ b/third_party/WebKit/Source/core/layout/LayoutGeometryMap.cpp |
@@ -105,6 +105,10 @@ void LayoutGeometryMap::mapToAncestor(TransformState& transformState, const Layo |
ASSERT(currentStep.m_layoutObject->isLayoutView()); |
transformState.move(currentStep.m_offsetForFixedPosition); |
} |
+ if (!currentStep.m_offsetForStickyPosition.isZero()) { |
+ ASSERT(currentStep.m_layoutObject->style()->position() == StickyPosition); |
+ transformState.move(currentStep.m_offsetForStickyPosition); |
+ } |
} |
ASSERT(foundAncestor); |
@@ -218,33 +222,37 @@ void LayoutGeometryMap::pushMappingsToAncestor(const PaintLayer* layer, const Pa |
pushMappingsToAncestor(layoutObject, ancestorLayoutObject); |
} |
-void LayoutGeometryMap::push(const LayoutObject* layoutObject, const LayoutSize& offsetFromContainer, bool accumulatingTransform, bool isNonUniform, bool isFixedPosition, bool hasTransform, LayoutSize offsetForFixedPosition) |
+void LayoutGeometryMap::push(const LayoutObject* layoutObject, const LayoutSize& offsetFromContainer, bool accumulatingTransform, bool isNonUniform, bool isFixedPosition, bool hasTransform, LayoutSize offsetForFixedPosition, LayoutSize offsetForStickyPosition) |
{ |
LAYOUT_GEOMETRY_MAP_LOG("LayoutGeometryMap::push %p %d,%d isNonUniform=%d\n", layoutObject, offsetFromContainer.width().toInt(), offsetFromContainer.height().toInt(), isNonUniform); |
ASSERT(m_insertionPosition != kNotFound); |
ASSERT(!layoutObject->isLayoutView() || !m_insertionPosition || m_mapCoordinatesFlags & TraverseDocumentBoundaries); |
ASSERT(offsetForFixedPosition.isZero() || layoutObject->isLayoutView()); |
+ ASSERT(offsetForStickyPosition.isZero() || layoutObject->style()->position() == StickyPosition); |
m_mapping.insert(m_insertionPosition, LayoutGeometryMapStep(layoutObject, accumulatingTransform, isNonUniform, isFixedPosition, hasTransform)); |
LayoutGeometryMapStep& step = m_mapping[m_insertionPosition]; |
step.m_offset = offsetFromContainer; |
step.m_offsetForFixedPosition = offsetForFixedPosition; |
+ step.m_offsetForStickyPosition = offsetForStickyPosition; |
stepInserted(step); |
} |
-void LayoutGeometryMap::push(const LayoutObject* layoutObject, const TransformationMatrix& t, bool accumulatingTransform, bool isNonUniform, bool isFixedPosition, bool hasTransform, LayoutSize offsetForFixedPosition) |
+void LayoutGeometryMap::push(const LayoutObject* layoutObject, const TransformationMatrix& t, bool accumulatingTransform, bool isNonUniform, bool isFixedPosition, bool hasTransform, LayoutSize offsetForFixedPosition, LayoutSize offsetForStickyPosition) |
{ |
ASSERT(m_insertionPosition != kNotFound); |
ASSERT(!layoutObject->isLayoutView() || !m_insertionPosition || m_mapCoordinatesFlags & TraverseDocumentBoundaries); |
ASSERT(offsetForFixedPosition.isZero() || layoutObject->isLayoutView()); |
+ ASSERT(offsetForStickyPosition.isZero() || layoutObject->style()->position() == StickyPosition); |
m_mapping.insert(m_insertionPosition, LayoutGeometryMapStep(layoutObject, accumulatingTransform, isNonUniform, isFixedPosition, hasTransform)); |
LayoutGeometryMapStep& step = m_mapping[m_insertionPosition]; |
step.m_offsetForFixedPosition = offsetForFixedPosition; |
+ step.m_offsetForStickyPosition = offsetForStickyPosition; |
if (!t.isIntegerTranslation()) |
step.m_transform = adoptPtr(new TransformationMatrix(t)); |