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

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

Issue 2341923002: Harmonize FilterEffect::mapRect and mapPaintRect (Closed)
Patch Set: Baselines (again) 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 "platform/graphics/filters/SkiaImageFilterBuilder.h" 10 #include "platform/graphics/filters/SkiaImageFilterBuilder.h"
(...skipping 30 matching lines...) Expand all
41 41
42 SkiaImageFilterBuilder::buildSourceGraphic(sourceGraphic, m_context->endReco rding()); 42 SkiaImageFilterBuilder::buildSourceGraphic(sourceGraphic, m_context->endReco rding());
43 43
44 // Content is cached by the source graphic so temporaries can be freed. 44 // Content is cached by the source graphic so temporaries can be freed.
45 m_paintController = nullptr; 45 m_paintController = nullptr;
46 m_context = nullptr; 46 m_context = nullptr;
47 47
48 filterData->m_state = FilterData::ReadyToPaint; 48 filterData->m_state = FilterData::ReadyToPaint;
49 } 49 }
50 50
51 static void paintFilteredContent(GraphicsContext& context, FilterData* filterDat a) 51 static void paintFilteredContent(GraphicsContext& context, const LayoutObject& o bject, FilterData* filterData)
52 { 52 {
53 DCHECK_EQ(filterData->m_state, FilterData::ReadyToPaint); 53 DCHECK_EQ(filterData->m_state, FilterData::ReadyToPaint);
54 DCHECK(filterData->filter->getSourceGraphic()); 54 DCHECK(filterData->filter->getSourceGraphic());
55 55
56 filterData->m_state = FilterData::PaintingFilter; 56 filterData->m_state = FilterData::PaintingFilter;
57 57
58 FilterEffect* lastEffect = filterData->filter->lastEffect(); 58 FilterEffect* lastEffect = filterData->filter->lastEffect();
59 sk_sp<SkImageFilter> imageFilter = SkiaImageFilterBuilder::build(lastEffect, ColorSpaceDeviceRGB); 59 sk_sp<SkImageFilter> imageFilter = SkiaImageFilterBuilder::build(lastEffect, ColorSpaceDeviceRGB);
60 context.save(); 60 context.save();
61 61
62 // Clip drawing of filtered image to the minimum required paint rect. 62 // Clip drawing of filtered image to the minimum required paint rect.
63 context.clipRect(lastEffect->determineAbsolutePaintRect(lastEffect->absolute Bounds())); 63 context.clipRect(lastEffect->mapRect(object.strokeBoundingBox()));
Stephen White 2016/09/20 15:36:19 Does mapRect() now take into effect filters which
fs 2016/09/20 19:14:14 Yes, it should.
64 64
65 FloatRect boundaries = filterData->filter->filterRegion(); 65 FloatRect boundaries = filterData->filter->filterRegion();
66 context.beginLayer(1, SkXfermode::kSrcOver_Mode, &boundaries, ColorFilterNon e, std::move(imageFilter)); 66 context.beginLayer(1, SkXfermode::kSrcOver_Mode, &boundaries, ColorFilterNon e, std::move(imageFilter));
Stephen White 2016/09/20 15:36:19 Not new to this patch, but Skia may ignore the bou
fs 2016/09/20 19:14:14 mapRect() should apply that, which should hopefull
Stephen White 2016/09/20 19:46:38 Eventually, we can probably pass nullptr, and just
67 context.endLayer(); 67 context.endLayer();
68 context.restore(); 68 context.restore();
69 69
70 filterData->m_state = FilterData::ReadyToPaint; 70 filterData->m_state = FilterData::ReadyToPaint;
71 } 71 }
72 72
73 GraphicsContext* SVGFilterPainter::prepareEffect(const LayoutObject& object, SVG FilterRecordingContext& recordingContext) 73 GraphicsContext* SVGFilterPainter::prepareEffect(const LayoutObject& object, SVG FilterRecordingContext& recordingContext)
74 { 74 {
75 m_filter.clearInvalidationMask(); 75 m_filter.clearInvalidationMask();
76 76
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 filterData->m_state = FilterData::RecordingContent; 124 filterData->m_state = FilterData::RecordingContent;
125 } 125 }
126 126
127 GraphicsContext& context = recordingContext.paintingContext(); 127 GraphicsContext& context = recordingContext.paintingContext();
128 if (LayoutObjectDrawingRecorder::useCachedDrawingIfPossible(context, object, DisplayItem::kSVGFilter)) 128 if (LayoutObjectDrawingRecorder::useCachedDrawingIfPossible(context, object, DisplayItem::kSVGFilter))
129 return; 129 return;
130 130
131 FloatRect filterRegion = filterData ? filterData->filter->filterRegion() : F loatRect(); 131 FloatRect filterRegion = filterData ? filterData->filter->filterRegion() : F loatRect();
132 LayoutObjectDrawingRecorder recorder(context, object, DisplayItem::kSVGFilte r, filterRegion); 132 LayoutObjectDrawingRecorder recorder(context, object, DisplayItem::kSVGFilte r, filterRegion);
133 if (filterData && filterData->m_state == FilterData::ReadyToPaint) 133 if (filterData && filterData->m_state == FilterData::ReadyToPaint)
134 paintFilteredContent(context, filterData); 134 paintFilteredContent(context, object, filterData);
135 } 135 }
136 136
137 } // namespace blink 137 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698