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,31 +625,45 @@ void SVGResources::ClearMarkers(SVGElement& element,
marker_resource->RemoveClient(*client);
}
sk_sp<PaintFilter> FilterData::BuildPaintFilter() {
return paint_filter_builder::Build(last_effect_, kInterpolationSpaceSRGB);
}
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);
}
bool FilterData::Invalidate(SVGFilterPrimitiveStandardAttributes& primitive,
const QualifiedName& attribute) {
if (FilterEffect* effect = node_map_->EffectForElement(primitive)) {
if (!primitive.SetFilterEffectAttribute(effect, attribute))
return false; // No change
node_map_->InvalidateDependentEffects(effect);
// 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) {
if (FilterEffect* effect = node_map_->EffectForElement(primitive)) {
if (!primitive.SetFilterEffectAttribute(effect, attribute))
return false; // No change
node_map_->InvalidateDependentEffects(effect);
}
return true;
}
return true;
}
void FilterData::Trace(Visitor* visitor) const {
visitor->Trace(last_effect_);
visitor->Trace(node_map_);
}
void Dispose() {
node_map_ = nullptr;
if (last_effect_)
last_effect_->DisposeImageFiltersRecursive();
last_effect_ = nullptr;
}
void FilterData::Dispose() {
node_map_ = nullptr;
if (last_effect_)
last_effect_->DisposeImageFiltersRecursive();
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)
: element_(element), filter_data_dirty_(false) {}
......@@ -731,7 +745,8 @@ void SVGElementResourceClient::FilterPrimitiveChanged(
MarkFilterDataDirty();
}
static FilterData* CreateFilterDataWithNodeMap(
SVGElementResourceClient::FilterData*
SVGElementResourceClient::CreateFilterDataWithNodeMap(
FilterEffectBuilder& builder,
const ReferenceFilterOperation& reference_filter) {
auto* node_map = MakeGarbageCollected<SVGFilterGraphNodeMap>();
......
......@@ -31,16 +31,16 @@
namespace blink {
class ComputedStyle;
class FilterEffect;
class FilterEffectBuilder;
class LayoutObject;
class LayoutSVGResourceClipper;
class LayoutSVGResourceFilter;
class LayoutSVGResourceMarker;
class LayoutSVGResourceMasker;
class LayoutSVGResourcePaintServer;
class ReferenceFilterOperation;
class SVGElement;
class SVGElementResourceClient;
class SVGFilterGraphNodeMap;
// Holds a set of resources associated with a LayoutObject
class SVGResources {
......@@ -189,27 +189,6 @@ class SVGResources {
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
: public GarbageCollected<SVGElementResourceClient>,
public SVGResourceClient {
......@@ -230,6 +209,12 @@ class SVGElementResourceClient final
void Trace(Visitor*) const override;
private:
class FilterData;
static FilterData* CreateFilterDataWithNodeMap(
FilterEffectBuilder&,
const ReferenceFilterOperation&);
Member<SVGElement> element_;
Member<FilterData> filter_data_;
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