Commit 675768b4 authored by Fredrik Söderqvist's avatar Fredrik Söderqvist Committed by Chromium LUCI CQ

Make FilterData an inner class of SVGElementResourceClient

This class is now a proper "implementation detail", so we don't need to
expose it.

Bug: 1028063
Change-Id: I3a6769e2c6d3aa9a2c162f84aa2064526e040369
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2574853Reviewed-by: default avatarStephen Chenney <schenney@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#834276}
parent e5e703e3
...@@ -625,11 +625,20 @@ void SVGResources::ClearMarkers(SVGElement& element, ...@@ -625,11 +625,20 @@ void SVGResources::ClearMarkers(SVGElement& element,
marker_resource->RemoveClient(*client); marker_resource->RemoveClient(*client);
} }
sk_sp<PaintFilter> FilterData::BuildPaintFilter() { class SVGElementResourceClient::FilterData final
: public GarbageCollected<SVGElementResourceClient::FilterData> {
public:
FilterData(FilterEffect* last_effect, SVGFilterGraphNodeMap* node_map)
: last_effect_(last_effect), node_map_(node_map) {}
sk_sp<PaintFilter> BuildPaintFilter() {
return paint_filter_builder::Build(last_effect_, kInterpolationSpaceSRGB); return paint_filter_builder::Build(last_effect_, kInterpolationSpaceSRGB);
} }
bool FilterData::Invalidate(SVGFilterPrimitiveStandardAttributes& primitive, // Perform a finegrained invalidation of the filter chain for the
// specified filter primitive and attribute. Returns false if no
// further invalidation is required, otherwise true.
bool Invalidate(SVGFilterPrimitiveStandardAttributes& primitive,
const QualifiedName& attribute) { const QualifiedName& attribute) {
if (FilterEffect* effect = node_map_->EffectForElement(primitive)) { if (FilterEffect* effect = node_map_->EffectForElement(primitive)) {
if (!primitive.SetFilterEffectAttribute(effect, attribute)) if (!primitive.SetFilterEffectAttribute(effect, attribute))
...@@ -637,19 +646,24 @@ bool FilterData::Invalidate(SVGFilterPrimitiveStandardAttributes& primitive, ...@@ -637,19 +646,24 @@ bool FilterData::Invalidate(SVGFilterPrimitiveStandardAttributes& primitive,
node_map_->InvalidateDependentEffects(effect); node_map_->InvalidateDependentEffects(effect);
} }
return true; return true;
} }
void FilterData::Trace(Visitor* visitor) const {
visitor->Trace(last_effect_);
visitor->Trace(node_map_);
}
void FilterData::Dispose() { void Dispose() {
node_map_ = nullptr; node_map_ = nullptr;
if (last_effect_) if (last_effect_)
last_effect_->DisposeImageFiltersRecursive(); last_effect_->DisposeImageFiltersRecursive();
last_effect_ = nullptr; last_effect_ = nullptr;
} }
void Trace(Visitor* visitor) const {
visitor->Trace(last_effect_);
visitor->Trace(node_map_);
}
private:
Member<FilterEffect> last_effect_;
Member<SVGFilterGraphNodeMap> node_map_;
};
SVGElementResourceClient::SVGElementResourceClient(SVGElement* element) SVGElementResourceClient::SVGElementResourceClient(SVGElement* element)
: element_(element), filter_data_dirty_(false) {} : element_(element), filter_data_dirty_(false) {}
...@@ -731,7 +745,8 @@ void SVGElementResourceClient::FilterPrimitiveChanged( ...@@ -731,7 +745,8 @@ void SVGElementResourceClient::FilterPrimitiveChanged(
MarkFilterDataDirty(); MarkFilterDataDirty();
} }
static FilterData* CreateFilterDataWithNodeMap( SVGElementResourceClient::FilterData*
SVGElementResourceClient::CreateFilterDataWithNodeMap(
FilterEffectBuilder& builder, FilterEffectBuilder& builder,
const ReferenceFilterOperation& reference_filter) { const ReferenceFilterOperation& reference_filter) {
auto* node_map = MakeGarbageCollected<SVGFilterGraphNodeMap>(); auto* node_map = MakeGarbageCollected<SVGFilterGraphNodeMap>();
......
...@@ -31,16 +31,16 @@ ...@@ -31,16 +31,16 @@
namespace blink { namespace blink {
class ComputedStyle; class ComputedStyle;
class FilterEffect; class FilterEffectBuilder;
class LayoutObject; class LayoutObject;
class LayoutSVGResourceClipper; class LayoutSVGResourceClipper;
class LayoutSVGResourceFilter; class LayoutSVGResourceFilter;
class LayoutSVGResourceMarker; class LayoutSVGResourceMarker;
class LayoutSVGResourceMasker; class LayoutSVGResourceMasker;
class LayoutSVGResourcePaintServer; class LayoutSVGResourcePaintServer;
class ReferenceFilterOperation;
class SVGElement; class SVGElement;
class SVGElementResourceClient; class SVGElementResourceClient;
class SVGFilterGraphNodeMap;
// Holds a set of resources associated with a LayoutObject // Holds a set of resources associated with a LayoutObject
class SVGResources { class SVGResources {
...@@ -189,27 +189,6 @@ class SVGResources { ...@@ -189,27 +189,6 @@ class SVGResources {
LayoutSVGResourceContainer* linked_resource_; LayoutSVGResourceContainer* linked_resource_;
}; };
class FilterData final : public GarbageCollected<FilterData> {
public:
FilterData(FilterEffect* last_effect, SVGFilterGraphNodeMap* node_map)
: last_effect_(last_effect), node_map_(node_map) {}
sk_sp<PaintFilter> BuildPaintFilter();
// Perform a finegrained invalidation of the filter chain for the
// specified filter primitive and attribute. Returns false if no
// further invalidation is required, otherwise true.
bool Invalidate(SVGFilterPrimitiveStandardAttributes& primitive,
const QualifiedName& attribute);
void Dispose();
void Trace(Visitor*) const;
private:
Member<FilterEffect> last_effect_;
Member<SVGFilterGraphNodeMap> node_map_;
};
class SVGElementResourceClient final class SVGElementResourceClient final
: public GarbageCollected<SVGElementResourceClient>, : public GarbageCollected<SVGElementResourceClient>,
public SVGResourceClient { public SVGResourceClient {
...@@ -230,6 +209,12 @@ class SVGElementResourceClient final ...@@ -230,6 +209,12 @@ class SVGElementResourceClient final
void Trace(Visitor*) const override; void Trace(Visitor*) const override;
private: private:
class FilterData;
static FilterData* CreateFilterDataWithNodeMap(
FilterEffectBuilder&,
const ReferenceFilterOperation&);
Member<SVGElement> element_; Member<SVGElement> element_;
Member<FilterData> filter_data_; Member<FilterData> filter_data_;
bool filter_data_dirty_; bool filter_data_dirty_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment