OLD | NEW |
(Empty) | |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "config.h" |
| 6 #include "core/paint/FilterPainter.h" |
| 7 |
| 8 #include "core/rendering/FilterEffectRenderer.h" |
| 9 #include "core/rendering/RenderLayer.h" |
| 10 #include "platform/graphics/GraphicsContext.h" |
| 11 #include "platform/graphics/filters/FilterEffect.h" |
| 12 #include "platform/graphics/filters/SkiaImageFilterBuilder.h" |
| 13 |
| 14 namespace blink { |
| 15 |
| 16 bool FilterPainter::beginFilterEffect(GraphicsContext* context, const FloatRect&
filterBoxRect) |
| 17 { |
| 18 SkiaImageFilterBuilder builder(context); |
| 19 RefPtr<FilterEffect> lastEffect = m_renderLayer.filterRenderer()->lastEffect
(); |
| 20 lastEffect->determineFilterPrimitiveSubregion(MapRectForward); |
| 21 RefPtr<ImageFilter> imageFilter = builder.build(lastEffect.get(), ColorSpace
DeviceRGB); |
| 22 if (!imageFilter) |
| 23 return false; |
| 24 context->save(); |
| 25 FloatRect boundaries = mapImageFilterRect(imageFilter.get(), filterBoxRect); |
| 26 context->translate(filterBoxRect.x(), filterBoxRect.y()); |
| 27 boundaries.move(-filterBoxRect.x(), -filterBoxRect.y()); |
| 28 context->beginLayer(1, CompositeSourceOver, &boundaries, ColorFilterNone, im
ageFilter.get()); |
| 29 context->translate(-filterBoxRect.x(), -filterBoxRect.y()); |
| 30 return true; |
| 31 } |
| 32 |
| 33 void FilterPainter::endFilterEffect(GraphicsContext* context) |
| 34 { |
| 35 context->endLayer(); |
| 36 context->restore(); |
| 37 } |
| 38 |
| 39 } // namespace blink |
OLD | NEW |