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

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

Issue 2303703002: Revamp filter primitive region calculations for Filter Effects (Closed)
Patch Set: Baselines again; Manual for mac10.11-retina 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 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 } 88 }
89 89
90 const FloatRect referenceBox = object.objectBoundingBox(); 90 const FloatRect referenceBox = object.objectBoundingBox();
91 SVGFilterGraphNodeMap* nodeMap = SVGFilterGraphNodeMap::create(); 91 SVGFilterGraphNodeMap* nodeMap = SVGFilterGraphNodeMap::create();
92 Filter* filter = FilterEffectBuilder::buildReferenceFilter(toSVGFilterElemen t(*m_filter.element()), referenceBox, nullptr, nullptr, nullptr, 1, nodeMap); 92 Filter* filter = FilterEffectBuilder::buildReferenceFilter(toSVGFilterElemen t(*m_filter.element()), referenceBox, nullptr, nullptr, nullptr, 1, nodeMap);
93 if (!filter || !filter->lastEffect()) 93 if (!filter || !filter->lastEffect())
94 return nullptr; 94 return nullptr;
95 95
96 IntRect sourceRegion = enclosingIntRect(intersection(filter->filterRegion(), object.strokeBoundingBox())); 96 IntRect sourceRegion = enclosingIntRect(intersection(filter->filterRegion(), object.strokeBoundingBox()));
97 filter->getSourceGraphic()->setSourceRect(sourceRegion); 97 filter->getSourceGraphic()->setSourceRect(sourceRegion);
98 filter->lastEffect()->determineFilterPrimitiveSubregion(ClipToFilterRegion); 98 filter->lastEffect()->determineMaximumEffectRect(ClipToFilterRegion);
99 99
100 FilterData* filterData = FilterData::create(); 100 FilterData* filterData = FilterData::create();
101 filterData->filter = filter; 101 filterData->filter = filter;
102 filterData->nodeMap = nodeMap; 102 filterData->nodeMap = nodeMap;
103 103
104 // TODO(pdr): Can this be moved out of painter? 104 // TODO(pdr): Can this be moved out of painter?
105 m_filter.setFilterDataForLayoutObject(const_cast<LayoutObject*>(&object), fi lterData); 105 m_filter.setFilterDataForLayoutObject(const_cast<LayoutObject*>(&object), fi lterData);
106 return recordingContext.beginContent(filterData); 106 return recordingContext.beginContent(filterData);
107 } 107 }
108 108
(...skipping 20 matching lines...) Expand all
129 if (LayoutObjectDrawingRecorder::useCachedDrawingIfPossible(context, object, DisplayItem::kSVGFilter)) 129 if (LayoutObjectDrawingRecorder::useCachedDrawingIfPossible(context, object, DisplayItem::kSVGFilter))
130 return; 130 return;
131 131
132 // TODO(chrishtr): stop using an infinite rect, and instead bound the filter . 132 // TODO(chrishtr): stop using an infinite rect, and instead bound the filter .
133 LayoutObjectDrawingRecorder recorder(context, object, DisplayItem::kSVGFilte r, LayoutRect::infiniteIntRect()); 133 LayoutObjectDrawingRecorder recorder(context, object, DisplayItem::kSVGFilte r, LayoutRect::infiniteIntRect());
134 if (filterData && filterData->m_state == FilterData::ReadyToPaint) 134 if (filterData && filterData->m_state == FilterData::ReadyToPaint)
135 paintFilteredContent(context, filterData); 135 paintFilteredContent(context, filterData);
136 } 136 }
137 137
138 } // namespace blink 138 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698