Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1751)

Unified Diff: Source/core/rendering/RenderLayer.cpp

Issue 334373002: Clear absolute clip rects when transform changes (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Split updateTransform into two parts Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/rendering/RenderLayer.cpp
diff --git a/Source/core/rendering/RenderLayer.cpp b/Source/core/rendering/RenderLayer.cpp
index 041337f6fd6b25e64b4d608d8c43317525dc7f92..2df7c1a26c6b02f59484cdc540b2117a9f001400 100644
--- a/Source/core/rendering/RenderLayer.cpp
+++ b/Source/core/rendering/RenderLayer.cpp
@@ -488,11 +488,25 @@ void RenderLayer::updateLayerPositionsAfterScroll(UpdateLayerPositionsAfterScrol
// updated above.
}
-void RenderLayer::updateTransform()
+void RenderLayer::updateTransformationMatrix()
{
+ if (m_transform) {
+ RenderBox* box = renderBox();
+ ASSERT(box);
+ m_transform->makeIdentity();
+ box->style()->applyTransform(*m_transform, box->pixelSnappedBorderBoxRect().size(), RenderStyle::IncludeTransformOrigin);
+ makeMatrixRenderable(*m_transform, compositor()->hasAcceleratedCompositing());
+ }
+}
+
+void RenderLayer::updateTransform(const RenderStyle* oldStyle, RenderStyle* newStyle)
+{
+ if (oldStyle && newStyle->transformDataEquivalent(*oldStyle))
+ return;
+
// hasTransform() on the renderer is also true when there is transform-style: preserve-3d or perspective set,
// so check style too.
- bool hasTransform = renderer()->hasTransform() && renderer()->style()->hasTransform();
+ bool hasTransform = renderer()->hasTransform() && newStyle->hasTransform();
bool had3DTransform = has3DTransform();
bool hadTransform = m_transform;
@@ -504,15 +518,11 @@ void RenderLayer::updateTransform()
// Layers with transforms act as clip rects roots, so clear the cached clip rects here.
m_clipper.clearClipRectsIncludingDescendants();
+ } else if (hasTransform) {
+ m_clipper.clearClipRectsIncludingDescendants(AbsoluteClipRects);
}
- if (hasTransform) {
- RenderBox* box = renderBox();
- ASSERT(box);
- m_transform->makeIdentity();
- box->style()->applyTransform(*m_transform, box->pixelSnappedBorderBoxRect().size(), RenderStyle::IncludeTransformOrigin);
- makeMatrixRenderable(*m_transform, compositor()->hasAcceleratedCompositing());
- }
+ updateTransformationMatrix();
if (had3DTransform != has3DTransform())
ajuma 2014/06/17 23:21:39 We don't need to also check this in the post-layou
dirty3DTransformedDescendantStatus();
@@ -3692,8 +3702,7 @@ void RenderLayer::styleChanged(StyleDifference diff, const RenderStyle* oldStyle
updateDescendantDependentFlags();
- if (!oldStyle || !renderer()->style()->transformDataEquivalent(*oldStyle))
- updateTransform();
+ updateTransform(oldStyle, renderer()->style());
{
// https://code.google.com/p/chromium/issues/detail?id=343759

Powered by Google App Engine
This is Rietveld 408576698