SVGPaintContext::~SVGPaintContext() { if (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); // 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; } 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); } 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); } }
bool SVGPaintContext::applyMaskIfNecessary(SVGResources* resources) { if (LayoutSVGResourceMasker* masker = resources ? resources->masker() : nullptr) { if (!SVGMaskPainter(*masker).prepareEffect(*m_object, m_paintInfo.context)) return false; m_masker = masker; } return true; }
SVGPaintContext::~SVGPaintContext() { if (m_filter) { DCHECK(SVGResourcesCache::cachedResourcesForLayoutObject(&m_object)); DCHECK(SVGResourcesCache::cachedResourcesForLayoutObject(&m_object) ->filter() == m_filter); DCHECK(m_filterRecordingContext); SVGFilterPainter(*m_filter).finishEffect(m_object, *m_filterRecordingContext); // Reset the paint info after the filter effect has been completed. m_filterPaintInfo = nullptr; } if (m_masker) { DCHECK(SVGResourcesCache::cachedResourcesForLayoutObject(&m_object)); DCHECK(SVGResourcesCache::cachedResourcesForLayoutObject(&m_object) ->masker() == m_masker); SVGMaskPainter(*m_masker).finishEffect(m_object, paintInfo().context); } }