| 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 ca3bd92df2e3316f1b930dad517d4e557e0961c8..0f6ba900566200e11a9216fb33d87a75e224cd12 100644
|
| --- a/third_party/WebKit/Source/core/layout/LayoutGeometryMap.cpp
|
| +++ b/third_party/WebKit/Source/core/layout/LayoutGeometryMap.cpp
|
| @@ -98,6 +98,10 @@ void LayoutGeometryMap::mapToContainer(TransformState& transformState, const Lay
|
| 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(foundContainer);
|
| @@ -124,7 +128,6 @@ void LayoutGeometryMap::dumpSteps() const
|
| FloatQuad LayoutGeometryMap::mapToContainer(const FloatRect& rect, const LayoutBoxModelObject* container) const
|
| {
|
| FloatQuad result;
|
| -
|
| if (!hasFixedPositionStep() && !hasTransformStep() && !hasNonUniformStep() && (!container || (m_mapping.size() && container == m_mapping[0].m_layoutObject))) {
|
| result = rect;
|
| result.move(m_accumulatedOffset);
|
| @@ -217,33 +220,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)
|
| {
|
| // fprintf(stderr, "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));
|
|
|