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;
}
示例#3
0
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);
  }
}