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

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

Issue 598623002: Initial PaintInvalidationState support for SVG (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Move code to clippedOverflow... Created 6 years, 3 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
« no previous file with comments | « Source/core/rendering/PaintInvalidationState.h ('k') | Source/core/rendering/svg/RenderSVGModelObject.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/rendering/PaintInvalidationState.cpp
diff --git a/Source/core/rendering/PaintInvalidationState.cpp b/Source/core/rendering/PaintInvalidationState.cpp
index 96a6bf8aaff2808f557b513d6429e600d28d1943..ea23a83849be1b53469ff767b5c31f42f7a1c890 100644
--- a/Source/core/rendering/PaintInvalidationState.cpp
+++ b/Source/core/rendering/PaintInvalidationState.cpp
@@ -9,6 +9,7 @@
#include "core/rendering/RenderLayer.h"
#include "core/rendering/RenderView.h"
#include "core/rendering/svg/RenderSVGModelObject.h"
+#include "core/rendering/svg/RenderSVGRoot.h"
#include "platform/Partitions.h"
namespace blink {
@@ -76,11 +77,43 @@ PaintInvalidationState::PaintInvalidationState(const PaintInvalidationState& nex
m_clipRect = next.m_clipRect;
}
+ if (m_cachedOffsetsEnabled && renderer.isSVGRoot()) {
+ const RenderSVGRoot& svgRoot = toRenderSVGRoot(renderer);
+ m_svgTransform = adoptPtr(new AffineTransform(svgRoot.localToBorderBoxTransform()));
+ if (svgRoot.shouldApplyViewportClip())
+ addClipRectRelativeToPaintOffset(svgRoot.pixelSnappedSize());
+ }
+
applyClipIfNeeded(renderer);
// FIXME: <http://bugs.webkit.org/show_bug.cgi?id=13443> Apply control clip if present.
}
+PaintInvalidationState::PaintInvalidationState(const PaintInvalidationState& next, const RenderSVGModelObject& renderer)
+ : m_clipped(next.m_clipped)
+ , m_cachedOffsetsEnabled(next.m_cachedOffsetsEnabled)
+ , m_forceCheckForPaintInvalidation(next.m_forceCheckForPaintInvalidation)
+ , m_clipRect(next.m_clipRect)
+ , m_paintOffset(next.m_paintOffset)
+ , m_paintInvalidationContainer(next.m_paintInvalidationContainer)
+{
+ ASSERT(renderer != m_paintInvalidationContainer);
+
+ if (m_cachedOffsetsEnabled)
+ m_svgTransform = adoptPtr(new AffineTransform(next.svgTransform() * renderer.localToParentTransform()));
+}
+
+void PaintInvalidationState::addClipRectRelativeToPaintOffset(const LayoutSize& clipSize)
+{
+ LayoutRect clipRect(toPoint(m_paintOffset), clipSize);
+ if (m_clipped) {
+ m_clipRect.intersect(clipRect);
+ } else {
+ m_clipRect = clipRect;
+ m_clipped = true;
+ }
+}
+
void PaintInvalidationState::applyClipIfNeeded(const RenderObject& renderer)
{
if (!renderer.hasOverflowClip())
@@ -90,17 +123,10 @@ void PaintInvalidationState::applyClipIfNeeded(const RenderObject& renderer)
// Do not clip scroll layer contents because the compositor expects the whole layer
// to be always invalidated in-time.
- if (box.usesCompositedScrolling()) {
+ if (box.usesCompositedScrolling())
ASSERT(!m_clipped); // The box should establish paint invalidation container, so no m_clipped inherited.
- } else {
- LayoutRect clipRect(toPoint(m_paintOffset), box.layer()->size());
- if (m_clipped) {
- m_clipRect.intersect(clipRect);
- } else {
- m_clipRect = clipRect;
- m_clipped = true;
- }
- }
+ else
+ addClipRectRelativeToPaintOffset(box.layer()->size());
m_paintOffset -= box.scrolledContentOffset();
}
« no previous file with comments | « Source/core/rendering/PaintInvalidationState.h ('k') | Source/core/rendering/svg/RenderSVGModelObject.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698