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

Unified Diff: third_party/WebKit/Source/core/paint/SVGPaintContext.cpp

Issue 1512803004: Use refs for GraphicsContext (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ScrollbarTheme
Patch Set: Created 5 years 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: third_party/WebKit/Source/core/paint/SVGPaintContext.cpp
diff --git a/third_party/WebKit/Source/core/paint/SVGPaintContext.cpp b/third_party/WebKit/Source/core/paint/SVGPaintContext.cpp
index 2d1b319e89d32497d4ab30a29c6f8b9dcbf4674e..75c8f94fc68a33cd7bf8aeb494a4cf8ed94f8b74 100644
--- a/third_party/WebKit/Source/core/paint/SVGPaintContext.cpp
+++ b/third_party/WebKit/Source/core/paint/SVGPaintContext.cpp
@@ -39,28 +39,25 @@ namespace blink {
SVGPaintContext::~SVGPaintContext()
{
if (m_filter) {
- ASSERT(SVGResourcesCache::cachedResourcesForLayoutObject(m_object));
- ASSERT(SVGResourcesCache::cachedResourcesForLayoutObject(m_object)->filter() == m_filter);
+ ASSERT(SVGResourcesCache::cachedResourcesForLayoutObject(&m_object));
+ ASSERT(SVGResourcesCache::cachedResourcesForLayoutObject(&m_object)->filter() == m_filter);
ASSERT(m_filterRecordingContext);
- SVGFilterPainter(*m_filter).finishEffect(*m_object, *m_filterRecordingContext);
+ SVGFilterPainter(*m_filter).finishEffect(m_object, *m_filterRecordingContext);
// Reset the paint info after the filter effect has been completed.
- // This isn't strictly required (e.g., m_paintInfo.rect is not used
- // after this).
- m_paintInfo.context = m_originalPaintInfo->context;
- m_paintInfo.m_cullRect.m_rect = m_originalPaintInfo->m_cullRect.m_rect;
+ m_filterPaintInfo = nullptr;
}
if (m_masker) {
- ASSERT(SVGResourcesCache::cachedResourcesForLayoutObject(m_object));
- ASSERT(SVGResourcesCache::cachedResourcesForLayoutObject(m_object)->masker() == m_masker);
- SVGMaskPainter(*m_masker).finishEffect(*m_object, m_paintInfo.context);
+ ASSERT(SVGResourcesCache::cachedResourcesForLayoutObject(&m_object));
+ ASSERT(SVGResourcesCache::cachedResourcesForLayoutObject(&m_object)->masker() == m_masker);
+ SVGMaskPainter(*m_masker).finishEffect(m_object, paintInfo().context);
}
if (m_clipper) {
- ASSERT(SVGResourcesCache::cachedResourcesForLayoutObject(m_object));
- ASSERT(SVGResourcesCache::cachedResourcesForLayoutObject(m_object)->clipper() == m_clipper);
- SVGClipPainter(*m_clipper).finishEffect(*m_object, m_paintInfo.context, m_clipperState);
+ ASSERT(SVGResourcesCache::cachedResourcesForLayoutObject(&m_object));
+ ASSERT(SVGResourcesCache::cachedResourcesForLayoutObject(&m_object)->clipper() == m_clipper);
+ SVGClipPainter(*m_clipper).finishEffect(m_object, paintInfo().context, m_clipperState);
}
}
@@ -71,11 +68,11 @@ bool SVGPaintContext::applyClipMaskAndFilterIfNecessary()
m_applyClipMaskAndFilterIfNecessaryCalled = true;
#endif
- SVGResources* resources = SVGResourcesCache::cachedResourcesForLayoutObject(m_object);
+ SVGResources* resources = SVGResourcesCache::cachedResourcesForLayoutObject(&m_object);
// When rendering clip paths as masks, only geometric operations should be included so skip
// non-geometric operations such as compositing, masking, and filtering.
- if (m_paintInfo.isRenderingClipPathAsMaskImage()) {
+ if (paintInfo().isRenderingClipPathAsMaskImage()) {
if (!applyClipIfNecessary(resources))
return false;
return true;
@@ -92,27 +89,27 @@ bool SVGPaintContext::applyClipMaskAndFilterIfNecessary()
if (!applyFilterIfNecessary(resources))
return false;
- if (!isIsolationInstalled() && SVGLayoutSupport::isIsolationRequired(m_object))
- m_compositingRecorder = adoptPtr(new CompositingRecorder(*m_paintInfo.context, *m_object, SkXfermode::kSrcOver_Mode, 1));
+ if (!isIsolationInstalled() && SVGLayoutSupport::isIsolationRequired(&m_object))
+ m_compositingRecorder = adoptPtr(new CompositingRecorder(paintInfo().context, m_object, SkXfermode::kSrcOver_Mode, 1));
return true;
}
void SVGPaintContext::applyCompositingIfNecessary()
{
- ASSERT(!m_paintInfo.isRenderingClipPathAsMaskImage());
+ ASSERT(!paintInfo().isRenderingClipPathAsMaskImage());
// Layer takes care of root opacity and blend mode.
- if (m_object->isSVGRoot())
+ if (m_object.isSVGRoot())
return;
- const ComputedStyle& style = m_object->styleRef();
+ const ComputedStyle& style = m_object.styleRef();
float opacity = style.opacity();
- WebBlendMode blendMode = style.hasBlendMode() && m_object->isBlendingAllowed() ?
+ WebBlendMode blendMode = style.hasBlendMode() && m_object.isBlendingAllowed() ?
style.blendMode() : WebBlendModeNormal;
if (opacity < 1 || blendMode != WebBlendModeNormal) {
- const FloatRect compositingBounds = m_object->paintInvalidationRectInLocalCoordinates();
- m_compositingRecorder = adoptPtr(new CompositingRecorder(*m_paintInfo.context, *m_object,
+ const FloatRect compositingBounds = m_object.paintInvalidationRectInLocalCoordinates();
+ m_compositingRecorder = adoptPtr(new CompositingRecorder(paintInfo().context, m_object,
WebCoreCompositeToSkiaComposite(CompositeSourceOver, blendMode), opacity, &compositingBounds));
}
}
@@ -120,19 +117,19 @@ void SVGPaintContext::applyCompositingIfNecessary()
bool SVGPaintContext::applyClipIfNecessary(SVGResources* resources)
{
// resources->clipper() corresponds to the non-prefixed 'clip-path' whereas
- // m_object->style()->clipPath() corresponds to '-webkit-clip-path'.
+ // m_object.style()->clipPath() corresponds to '-webkit-clip-path'.
// FIXME: We should unify the clip-path and -webkit-clip-path codepaths.
if (LayoutSVGResourceClipper* clipper = resources ? resources->clipper() : nullptr) {
- if (!SVGClipPainter(*clipper).prepareEffect(*m_object, m_object->objectBoundingBox(), m_object->paintInvalidationRectInLocalCoordinates(), m_paintInfo.context, m_clipperState))
+ if (!SVGClipPainter(*clipper).prepareEffect(m_object, m_object.objectBoundingBox(), m_object.paintInvalidationRectInLocalCoordinates(), paintInfo().context, m_clipperState))
return false;
m_clipper = clipper;
} else {
- ClipPathOperation* clipPathOperation = m_object->style()->clipPath();
+ ClipPathOperation* clipPathOperation = m_object.style()->clipPath();
if (clipPathOperation && clipPathOperation->type() == ClipPathOperation::SHAPE) {
ShapeClipPathOperation* clipPath = toShapeClipPathOperation(clipPathOperation);
if (!clipPath->isValid())
return false;
- m_clipPathRecorder = adoptPtr(new ClipPathRecorder(*m_paintInfo.context, *m_object, clipPath->path(m_object->objectBoundingBox())));
+ m_clipPathRecorder = adoptPtr(new ClipPathRecorder(paintInfo().context, m_object, clipPath->path(m_object.objectBoundingBox())));
}
}
return true;
@@ -141,7 +138,7 @@ bool SVGPaintContext::applyClipIfNecessary(SVGResources* resources)
bool SVGPaintContext::applyMaskIfNecessary(SVGResources* resources)
{
if (LayoutSVGResourceMasker* masker = resources ? resources->masker() : nullptr) {
- if (!SVGMaskPainter(*masker).prepareEffect(*m_object, m_paintInfo.context))
+ if (!SVGMaskPainter(*masker).prepareEffect(m_object, paintInfo().context))
return false;
m_masker = masker;
}
@@ -151,23 +148,23 @@ bool SVGPaintContext::applyMaskIfNecessary(SVGResources* resources)
bool SVGPaintContext::applyFilterIfNecessary(SVGResources* resources)
{
if (!resources) {
- if (m_object->style()->svgStyle().hasFilter())
+ if (m_object.style()->svgStyle().hasFilter())
return false;
} else if (LayoutSVGResourceFilter* filter = resources->filter()) {
- m_filterRecordingContext = adoptPtr(new SVGFilterRecordingContext(m_paintInfo.context));
+ m_filterRecordingContext = adoptPtr(new SVGFilterRecordingContext(paintInfo().context));
m_filter = filter;
- GraphicsContext* filterContext = SVGFilterPainter(*filter).prepareEffect(*m_object, *m_filterRecordingContext);
+ GraphicsContext* filterContext = SVGFilterPainter(*filter).prepareEffect(m_object, *m_filterRecordingContext);
if (!filterContext)
return false;
// Because the filter needs to cache its contents we replace the context
// during filtering with the filter's context.
- m_paintInfo.context = filterContext;
+ m_filterPaintInfo = adoptPtr(new PaintInfo(*filterContext, m_paintInfo));
// Because we cache the filter contents and do not invalidate on paint
// invalidation rect changes, we need to paint the entire filter region
// so elements outside the initial paint (due to scrolling, etc) paint.
- m_paintInfo.m_cullRect.m_rect = LayoutRect::infiniteIntRect();
+ m_filterPaintInfo->m_cullRect.m_rect = LayoutRect::infiniteIntRect();
}
return true;
}
@@ -183,9 +180,8 @@ bool SVGPaintContext::isIsolationInstalled() const
return false;
}
-void SVGPaintContext::paintSubtree(GraphicsContext* context, const LayoutObject* item)
+void SVGPaintContext::paintSubtree(GraphicsContext& context, const LayoutObject* item)
{
- ASSERT(context);
ASSERT(item);
ASSERT(!item->needsLayout());
@@ -229,7 +225,7 @@ bool SVGPaintContext::paintForLayoutObject(const PaintInfo& paintInfo, const Com
// something down the paint pipe may want to farther tweak the color
// filter, which could yield incorrect results. (Consider just using
// saveLayer() w/ this color filter explicitly instead.)
- paint.setColorFilter(paintInfo.context->colorFilter());
+ paint.setColorFilter(paintInfo.context.colorFilter());
return true;
}

Powered by Google App Engine
This is Rietveld 408576698