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

Side by Side Diff: third_party/WebKit/Source/core/paint/SVGFilterPainter.cpp

Issue 2341923002: Harmonize FilterEffect::mapRect and mapPaintRect (Closed)
Patch Set: Rebase Created 4 years, 3 months 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/paint/SVGFilterPainter.h" 5 #include "core/paint/SVGFilterPainter.h"
6 6
7 #include "core/layout/svg/LayoutSVGResourceFilter.h" 7 #include "core/layout/svg/LayoutSVGResourceFilter.h"
8 #include "core/paint/FilterEffectBuilder.h" 8 #include "core/paint/FilterEffectBuilder.h"
9 #include "core/paint/LayoutObjectDrawingRecorder.h" 9 #include "core/paint/LayoutObjectDrawingRecorder.h"
10 #include "core/svg/graphics/filters/SVGFilterBuilder.h" 10 #include "core/svg/graphics/filters/SVGFilterBuilder.h"
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 43
44 SkiaImageFilterBuilder::buildSourceGraphic(sourceGraphic, m_context->endReco rding()); 44 SkiaImageFilterBuilder::buildSourceGraphic(sourceGraphic, m_context->endReco rding());
45 45
46 // Content is cached by the source graphic so temporaries can be freed. 46 // Content is cached by the source graphic so temporaries can be freed.
47 m_paintController = nullptr; 47 m_paintController = nullptr;
48 m_context = nullptr; 48 m_context = nullptr;
49 49
50 filterData->m_state = FilterData::ReadyToPaint; 50 filterData->m_state = FilterData::ReadyToPaint;
51 } 51 }
52 52
53 static void paintFilteredContent(GraphicsContext& context, FilterData* filterDat a) 53 static void paintFilteredContent(GraphicsContext& context, const LayoutObject& o bject, FilterData* filterData)
54 { 54 {
55 DCHECK_EQ(filterData->m_state, FilterData::ReadyToPaint); 55 DCHECK_EQ(filterData->m_state, FilterData::ReadyToPaint);
56 DCHECK(filterData->lastEffect->getFilter()->getSourceGraphic()); 56 DCHECK(filterData->lastEffect->getFilter()->getSourceGraphic());
57 57
58 filterData->m_state = FilterData::PaintingFilter; 58 filterData->m_state = FilterData::PaintingFilter;
59 59
60 FilterEffect* lastEffect = filterData->lastEffect; 60 FilterEffect* lastEffect = filterData->lastEffect;
61 sk_sp<SkImageFilter> imageFilter = SkiaImageFilterBuilder::build(lastEffect, ColorSpaceDeviceRGB); 61 sk_sp<SkImageFilter> imageFilter = SkiaImageFilterBuilder::build(lastEffect, ColorSpaceDeviceRGB);
62 context.save(); 62 context.save();
63 63
64 // Clip drawing of filtered image to the minimum required paint rect. 64 // Clip drawing of filtered image to the minimum required paint rect.
65 context.clipRect(lastEffect->determineAbsolutePaintRect(lastEffect->absolute Bounds())); 65 context.clipRect(lastEffect->mapRect(object.strokeBoundingBox()));
66 66
67 FloatRect boundaries = lastEffect->getFilter()->filterRegion(); 67 FloatRect boundaries = lastEffect->getFilter()->filterRegion();
68 context.beginLayer(1, SkXfermode::kSrcOver_Mode, &boundaries, ColorFilterNon e, std::move(imageFilter)); 68 context.beginLayer(1, SkXfermode::kSrcOver_Mode, &boundaries, ColorFilterNon e, std::move(imageFilter));
69 context.endLayer(); 69 context.endLayer();
70 context.restore(); 70 context.restore();
71 71
72 filterData->m_state = FilterData::ReadyToPaint; 72 filterData->m_state = FilterData::ReadyToPaint;
73 } 73 }
74 74
75 GraphicsContext* SVGFilterPainter::prepareEffect(const LayoutObject& object, SVG FilterRecordingContext& recordingContext) 75 GraphicsContext* SVGFilterPainter::prepareEffect(const LayoutObject& object, SVG FilterRecordingContext& recordingContext)
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 filterData->m_state = FilterData::RecordingContent; 126 filterData->m_state = FilterData::RecordingContent;
127 } 127 }
128 128
129 GraphicsContext& context = recordingContext.paintingContext(); 129 GraphicsContext& context = recordingContext.paintingContext();
130 if (LayoutObjectDrawingRecorder::useCachedDrawingIfPossible(context, object, DisplayItem::kSVGFilter)) 130 if (LayoutObjectDrawingRecorder::useCachedDrawingIfPossible(context, object, DisplayItem::kSVGFilter))
131 return; 131 return;
132 132
133 FloatRect filterRegion = filterData ? filterData->lastEffect->getFilter()->f ilterRegion() : FloatRect(); 133 FloatRect filterRegion = filterData ? filterData->lastEffect->getFilter()->f ilterRegion() : FloatRect();
134 LayoutObjectDrawingRecorder recorder(context, object, DisplayItem::kSVGFilte r, filterRegion); 134 LayoutObjectDrawingRecorder recorder(context, object, DisplayItem::kSVGFilte r, filterRegion);
135 if (filterData && filterData->m_state == FilterData::ReadyToPaint) 135 if (filterData && filterData->m_state == FilterData::ReadyToPaint)
136 paintFilteredContent(context, filterData); 136 paintFilteredContent(context, object, filterData);
137 } 137 }
138 138
139 } // namespace blink 139 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698