| Index: third_party/WebKit/Source/platform/geometry/TransformState.cpp
|
| diff --git a/third_party/WebKit/Source/platform/geometry/TransformState.cpp b/third_party/WebKit/Source/platform/geometry/TransformState.cpp
|
| index 9ec2073661391dd75f49b5aa40f7459213729c7b..c119f0f8d48cfd1b8afb73dfd88b92288aa34bff 100644
|
| --- a/third_party/WebKit/Source/platform/geometry/TransformState.cpp
|
| +++ b/third_party/WebKit/Source/platform/geometry/TransformState.cpp
|
| @@ -39,6 +39,7 @@ TransformState& TransformState::operator=(const TransformState& other)
|
| if (m_mapQuad)
|
| m_lastPlanarQuad = other.m_lastPlanarQuad;
|
| m_accumulatingTransform = other.m_accumulatingTransform;
|
| + m_forceAccumulatingTransform = other.m_forceAccumulatingTransform;
|
| m_direction = other.m_direction;
|
|
|
| m_accumulatedTransform.clear();
|
| @@ -68,6 +69,9 @@ void TransformState::translateMappedCoordinates(const LayoutSize& offset)
|
|
|
| void TransformState::move(const LayoutSize& offset, TransformAccumulation accumulate)
|
| {
|
| + if (m_forceAccumulatingTransform)
|
| + accumulate = AccumulateTransform;
|
| +
|
| if (accumulate == FlattenTransform || !m_accumulatedTransform) {
|
| m_accumulatedOffset += offset;
|
| } else {
|
| @@ -127,14 +131,19 @@ void TransformState::applyTransform(const TransformationMatrix& transformFromCon
|
| }
|
|
|
| if (accumulate == FlattenTransform) {
|
| - const TransformationMatrix* finalTransform = m_accumulatedTransform ? m_accumulatedTransform.get() : &transformFromContainer;
|
| - flattenWithTransform(*finalTransform, wasClamped);
|
| + if (m_forceAccumulatingTransform) {
|
| + m_accumulatedTransform->flattenTo2d();
|
| + } else {
|
| + const TransformationMatrix* finalTransform = m_accumulatedTransform ? m_accumulatedTransform.get() : &transformFromContainer;
|
| + flattenWithTransform(*finalTransform, wasClamped);
|
| + }
|
| }
|
| - m_accumulatingTransform = accumulate == AccumulateTransform;
|
| + m_accumulatingTransform = accumulate == AccumulateTransform || m_forceAccumulatingTransform;
|
| }
|
|
|
| void TransformState::flatten(bool* wasClamped)
|
| {
|
| + ASSERT(!m_forceAccumulatingTransform);
|
| if (wasClamped)
|
| *wasClamped = false;
|
|
|
| @@ -180,6 +189,12 @@ FloatQuad TransformState::mappedQuad(bool* wasClamped) const
|
| return m_accumulatedTransform->inverse().projectQuad(quad, wasClamped);
|
| }
|
|
|
| +const TransformationMatrix& TransformState::accumulatedTransform() const
|
| +{
|
| + ASSERT(m_forceAccumulatingTransform && m_accumulatingTransform);
|
| + return *m_accumulatedTransform;
|
| +}
|
| +
|
| void TransformState::flattenWithTransform(const TransformationMatrix& t, bool* wasClamped)
|
| {
|
| if (m_direction == ApplyTransformDirection) {
|
|
|