summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/core/layout/svg/svg_resources.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/core/layout/svg/svg_resources.h')
-rw-r--r--chromium/third_party/blink/renderer/core/layout/svg/svg_resources.h180
1 files changed, 16 insertions, 164 deletions
diff --git a/chromium/third_party/blink/renderer/core/layout/svg/svg_resources.h b/chromium/third_party/blink/renderer/core/layout/svg/svg_resources.h
index 34c7ca8f159..a04e420041f 100644
--- a/chromium/third_party/blink/renderer/core/layout/svg/svg_resources.h
+++ b/chromium/third_party/blink/renderer/core/layout/svg/svg_resources.h
@@ -20,43 +20,30 @@
#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_SVG_SVG_RESOURCES_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_SVG_SVG_RESOURCES_H_
-#include <memory>
-
-#include "base/memory/ptr_util.h"
-#include "third_party/blink/renderer/core/layout/svg/layout_svg_resource_container.h"
#include "third_party/blink/renderer/core/svg/svg_resource_client.h"
+#include "third_party/blink/renderer/platform/geometry/float_rect.h"
+#include "third_party/blink/renderer/platform/heap/heap.h"
+#include "third_party/blink/renderer/platform/heap/member.h"
#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
-#include "third_party/blink/renderer/platform/wtf/hash_set.h"
namespace blink {
+class CompositorFilterOperations;
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 {
- USING_FAST_MALLOC(SVGResources);
+ STATIC_ONLY(SVGResources);
public:
- SVGResources();
- SVGResources(const SVGResources&) = delete;
- SVGResources& operator=(const SVGResources&) = delete;
-
static SVGElementResourceClient* GetClient(const LayoutObject&);
static FloatRect ReferenceBoxForEffects(const LayoutObject&);
- static std::unique_ptr<SVGResources> BuildResources(const LayoutObject&,
- const ComputedStyle&);
-
static void UpdateClipPathFilterMask(SVGElement&,
const ComputedStyle* old_style,
const ComputedStyle&);
@@ -69,145 +56,6 @@ class SVGResources {
const ComputedStyle* old_style,
const ComputedStyle&);
static void ClearMarkers(SVGElement&, const ComputedStyle*);
-
- static bool SupportsMarkers(const SVGElement&);
-
- // Ordinary resources
- LayoutSVGResourceClipper* Clipper() const {
- return clipper_filter_masker_data_ ? clipper_filter_masker_data_->clipper
- : nullptr;
- }
- LayoutSVGResourceMarker* MarkerStart() const {
- return marker_data_ ? marker_data_->marker_start : nullptr;
- }
- LayoutSVGResourceMarker* MarkerMid() const {
- return marker_data_ ? marker_data_->marker_mid : nullptr;
- }
- LayoutSVGResourceMarker* MarkerEnd() const {
- return marker_data_ ? marker_data_->marker_end : nullptr;
- }
- LayoutSVGResourceMasker* Masker() const {
- return clipper_filter_masker_data_ ? clipper_filter_masker_data_->masker
- : nullptr;
- }
-
- LayoutSVGResourceFilter* Filter() const {
- if (clipper_filter_masker_data_)
- return clipper_filter_masker_data_->filter;
- return nullptr;
- }
-
- bool HasClipOrMaskOrFilter() const { return !!clipper_filter_masker_data_; }
-
- // Paint servers
- LayoutSVGResourcePaintServer* Fill() const {
- return fill_stroke_data_ ? fill_stroke_data_->fill : nullptr;
- }
- LayoutSVGResourcePaintServer* Stroke() const {
- return fill_stroke_data_ ? fill_stroke_data_->stroke : nullptr;
- }
-
- // Chainable resources - linked through xlink:href
- LayoutSVGResourceContainer* LinkedResource() const {
- return linked_resource_;
- }
-
- void BuildSetOfResources(HashSet<LayoutSVGResourceContainer*>&);
-
- // Methods operating on all cached resources
- void ResourceDestroyed(LayoutSVGResourceContainer*);
- void ClearReferencesTo(LayoutSVGResourceContainer*);
-
-#if DCHECK_IS_ON()
- void Dump(const LayoutObject*);
-#endif
-
- private:
- bool HasResourceData() const;
-
- void SetClipper(LayoutSVGResourceClipper*);
- void SetFilter(LayoutSVGResourceFilter*);
- void SetMarkerStart(LayoutSVGResourceMarker*);
- void SetMarkerMid(LayoutSVGResourceMarker*);
- void SetMarkerEnd(LayoutSVGResourceMarker*);
- void SetMasker(LayoutSVGResourceMasker*);
- void SetFill(LayoutSVGResourcePaintServer*);
- void SetStroke(LayoutSVGResourcePaintServer*);
- void SetLinkedResource(LayoutSVGResourceContainer*);
-
- // From SVG 1.1 2nd Edition
- // clipper: 'container elements' and 'graphics elements'
- // filter: 'container elements' and 'graphics elements'
- // masker: 'container elements' and 'graphics elements'
- // -> a, circle, defs, ellipse, glyph, g, image, line, marker, mask,
- // missing-glyph, path, pattern, polygon, polyline, rect, svg, switch, symbol,
- // text, use
- struct ClipperFilterMaskerData {
- USING_FAST_MALLOC(ClipperFilterMaskerData);
-
- public:
- ClipperFilterMaskerData()
- : clipper(nullptr), filter(nullptr), masker(nullptr) {}
-
- LayoutSVGResourceClipper* clipper;
- LayoutSVGResourceFilter* filter;
- LayoutSVGResourceMasker* masker;
- };
-
- // From SVG 1.1 2nd Edition
- // marker: line, path, polygon, polyline
- struct MarkerData {
- USING_FAST_MALLOC(MarkerData);
-
- public:
- MarkerData()
- : marker_start(nullptr), marker_mid(nullptr), marker_end(nullptr) {}
-
- LayoutSVGResourceMarker* marker_start;
- LayoutSVGResourceMarker* marker_mid;
- LayoutSVGResourceMarker* marker_end;
- };
-
- // From SVG 1.1 2nd Edition
- // fill: 'shapes' and 'text content elements'
- // stroke: 'shapes' and 'text content elements'
- // -> circle, ellipse, line, path, polygon, polyline, rect, text, textPath,
- // tspan
- struct FillStrokeData {
- USING_FAST_MALLOC(FillStrokeData);
-
- public:
- FillStrokeData() : fill(nullptr), stroke(nullptr) {}
-
- LayoutSVGResourcePaintServer* fill;
- LayoutSVGResourcePaintServer* stroke;
- };
-
- std::unique_ptr<ClipperFilterMaskerData> clipper_filter_masker_data_;
- std::unique_ptr<MarkerData> marker_data_;
- std::unique_ptr<FillStrokeData> fill_stroke_data_;
- 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
@@ -216,11 +64,10 @@ class SVGElementResourceClient final
public:
explicit SVGElementResourceClient(SVGElement*);
- void ResourceContentChanged(InvalidationModeMask) override;
- void ResourceElementChanged() override;
- void ResourceDestroyed(LayoutSVGResourceContainer*) override;
+ void ResourceContentChanged(SVGResource*) override;
- void FilterPrimitiveChanged(SVGFilterPrimitiveStandardAttributes& primitive,
+ void FilterPrimitiveChanged(SVGResource*,
+ SVGFilterPrimitiveStandardAttributes& primitive,
const QualifiedName& attribute) override;
void UpdateFilterData(CompositorFilterOperations&);
@@ -230,6 +77,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_;
@@ -250,7 +103,6 @@ class SVGResourceInvalidator {
void InvalidatePaints();
private:
- const SVGResources* resources_;
LayoutObject& object_;
};