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) { |