GraphicsContext* FilterEffectRendererHelper::beginFilterEffect(GraphicsContext* oldContext) { ASSERT(m_renderLayer); FilterEffectRenderer* filter = m_renderLayer->filterRenderer(); filter->allocateBackingStoreIfNeeded(); // Paint into the context that represents the SourceGraphic of the filter. GraphicsContext* sourceGraphicsContext = filter->inputContext(); if (!sourceGraphicsContext || !FilterEffect::isFilterSizeValid(filter->absoluteFilterRegion())) { // Disable the filters and continue. m_haveFilterEffect = false; return oldContext; } m_savedGraphicsContext = oldContext; // Translate the context so that the contents of the layer is captuterd in the offscreen memory buffer. sourceGraphicsContext->save(); // FIXME: can we just use sourceImageRect for everything, and get rid of // m_repaintRect? FloatPoint offset = filter->sourceImageRect().location(); sourceGraphicsContext->translate(-offset.x(), -offset.y()); sourceGraphicsContext->clearRect(m_repaintRect); sourceGraphicsContext->clip(m_repaintRect); return sourceGraphicsContext; }
GraphicsContext* FilterEffectRendererHelper::beginFilterEffect(GraphicsContext* context) { ASSERT(m_renderLayer); FilterEffectRenderer* filter = m_renderLayer->filterRenderer(); if (m_renderLayer->renderer()->document().settings()->deferredFiltersEnabled()) { SkiaImageFilterBuilder builder(context); RefPtr<ImageFilter> imageFilter = builder.build(filter->lastEffect().get(), ColorSpaceDeviceRGB); if (!imageFilter) { m_haveFilterEffect = false; return context; } m_savedGraphicsContext = context; context->save(); FloatRect boundaries = mapImageFilterRect(imageFilter.get(), m_filterBoxRect); context->translate(m_filterBoxRect.x(), m_filterBoxRect.y()); boundaries.move(-m_filterBoxRect.x(), -m_filterBoxRect.y()); context->beginLayer(1, CompositeSourceOver, &boundaries, ColorFilterNone, imageFilter.get()); context->translate(-m_filterBoxRect.x(), -m_filterBoxRect.y()); return context; } filter->allocateBackingStoreIfNeeded(); // Paint into the context that represents the SourceGraphic of the filter. GraphicsContext* sourceGraphicsContext = filter->inputContext(); if (!sourceGraphicsContext || !FilterEffect::isFilterSizeValid(filter->absoluteFilterRegion())) { // Disable the filters and continue. m_haveFilterEffect = false; return context; } m_savedGraphicsContext = context; // Translate the context so that the contents of the layer is captuterd in the offscreen memory buffer. sourceGraphicsContext->save(); // FIXME: can we just use sourceImageRect for everything, and get rid of // m_paintInvalidationRect? FloatPoint offset = filter->sourceImageRect().location(); sourceGraphicsContext->translate(-offset.x(), -offset.y()); sourceGraphicsContext->clearRect(m_paintInvalidationRect); sourceGraphicsContext->clip(m_paintInvalidationRect); return sourceGraphicsContext; }
bool FilterEffectRendererHelper::beginFilterEffect() { ASSERT(m_renderLayer); FilterEffectRenderer* filter = m_renderLayer->filterRenderer(); filter->allocateBackingStoreIfNeeded(); // Paint into the context that represents the SourceGraphic of the filter. GraphicsContext* sourceGraphicsContext = filter->inputContext(); if (!sourceGraphicsContext || filter->filterRegion().isEmpty() || ImageBuffer::sizeNeedsClamping(filter->filterRegion().size())) { // Disable the filters and continue. m_haveFilterEffect = false; return false; } // Translate the context so that the contents of the layer is captuterd in the offscreen memory buffer. sourceGraphicsContext->save(); sourceGraphicsContext->translate(-m_paintOffset.x(), -m_paintOffset.y()); sourceGraphicsContext->clearRect(m_repaintRect); sourceGraphicsContext->clip(m_repaintRect); m_startedFilterEffect = true; return true; }
GraphicsContext* FilterEffectRendererHelper::beginFilterEffect(GraphicsContext* oldContext) { ASSERT(m_renderLayer); FilterEffectRenderer* filter = m_renderLayer->filterRenderer(); filter->allocateBackingStoreIfNeeded(); // Paint into the context that represents the SourceGraphic of the filter. GraphicsContext* sourceGraphicsContext = filter->inputContext(); if (!sourceGraphicsContext || !isFilterSizeValid(filter->filterRegion())) { // Disable the filters and continue. m_haveFilterEffect = false; return oldContext; } m_savedGraphicsContext = oldContext; // Translate the context so that the contents of the layer is captuterd in the offscreen memory buffer. sourceGraphicsContext->save(); sourceGraphicsContext->translate(-m_paintOffset.x(), -m_paintOffset.y()); sourceGraphicsContext->clearRect(m_repaintRect); sourceGraphicsContext->clip(m_repaintRect); return sourceGraphicsContext; }