summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/rendering/svg/SVGResources.h
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2011-05-13 16:23:25 +0100
committerBen Murdoch <benm@google.com>2011-05-16 11:35:02 +0100
commit65f03d4f644ce73618e5f4f50dd694b26f55ae12 (patch)
treef478babb801e720de7bfaee23443ffe029f58731 /Source/WebCore/rendering/svg/SVGResources.h
parent47de4a2fb7262c7ebdb9cd133ad2c54c187454d0 (diff)
downloadexternal_webkit-65f03d4f644ce73618e5f4f50dd694b26f55ae12.zip
external_webkit-65f03d4f644ce73618e5f4f50dd694b26f55ae12.tar.gz
external_webkit-65f03d4f644ce73618e5f4f50dd694b26f55ae12.tar.bz2
Merge WebKit at r75993: Initial merge by git.
Change-Id: I602bbdc3974787a3b0450456a30a7868286921c3
Diffstat (limited to 'Source/WebCore/rendering/svg/SVGResources.h')
-rw-r--r--Source/WebCore/rendering/svg/SVGResources.h179
1 files changed, 179 insertions, 0 deletions
diff --git a/Source/WebCore/rendering/svg/SVGResources.h b/Source/WebCore/rendering/svg/SVGResources.h
new file mode 100644
index 0000000..dd328b8
--- /dev/null
+++ b/Source/WebCore/rendering/svg/SVGResources.h
@@ -0,0 +1,179 @@
+/*
+ * Copyright (C) Research In Motion Limited 2010. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef SVGResources_h
+#define SVGResources_h
+
+#if ENABLE(SVG)
+#include <wtf/HashSet.h>
+#include <wtf/Noncopyable.h>
+#include <wtf/OwnPtr.h>
+#include <wtf/PassOwnPtr.h>
+
+namespace WebCore {
+
+class Document;
+class RenderObject;
+class RenderSVGResourceClipper;
+class RenderSVGResourceContainer;
+class RenderSVGResourceFilter;
+class RenderSVGResourceMarker;
+class RenderSVGResourceMasker;
+class SVGRenderStyle;
+
+// Holds a set of resources associated with a RenderObject
+class SVGResources : public Noncopyable {
+public:
+ SVGResources();
+
+ bool buildCachedResources(const RenderObject*, const SVGRenderStyle*);
+
+ // Ordinary resources
+ RenderSVGResourceClipper* clipper() const { return m_clipperFilterMaskerData ? m_clipperFilterMaskerData->clipper : 0; }
+#if ENABLE(FILTERS)
+ RenderSVGResourceFilter* filter() const { return m_clipperFilterMaskerData ? m_clipperFilterMaskerData->filter : 0; }
+#endif
+ RenderSVGResourceMarker* markerStart() const { return m_markerData ? m_markerData->markerStart : 0; }
+ RenderSVGResourceMarker* markerMid() const { return m_markerData ? m_markerData->markerMid : 0; }
+ RenderSVGResourceMarker* markerEnd() const { return m_markerData ? m_markerData->markerEnd : 0; }
+ RenderSVGResourceMasker* masker() const { return m_clipperFilterMaskerData ? m_clipperFilterMaskerData->masker : 0; }
+
+ // Paint servers
+ RenderSVGResourceContainer* fill() const { return m_fillStrokeData ? m_fillStrokeData->fill : 0; }
+ RenderSVGResourceContainer* stroke() const { return m_fillStrokeData ? m_fillStrokeData->stroke : 0; }
+
+ // Chainable resources - linked through xlink:href
+ RenderSVGResourceContainer* linkedResource() const { return m_linkedResource; }
+
+ void buildSetOfResources(HashSet<RenderSVGResourceContainer*>&);
+
+ // Methods operating on all cached resources
+ void removeClientFromCache(RenderObject*, bool markForInvalidation = true) const;
+ void resourceDestroyed(RenderSVGResourceContainer*);
+
+#ifndef NDEBUG
+ void dump(const RenderObject*);
+#endif
+
+private:
+ friend class SVGResourcesCycleSolver;
+
+ // Only used by SVGResourcesCache cycle detection logic
+ void resetClipper();
+#if ENABLE(FILTERS)
+ void resetFilter();
+#endif
+ void resetMarkerStart();
+ void resetMarkerMid();
+ void resetMarkerEnd();
+ void resetMasker();
+ void resetFill();
+ void resetStroke();
+ void resetLinkedResource();
+
+private:
+ bool setClipper(RenderSVGResourceClipper*);
+#if ENABLE(FILTERS)
+ bool setFilter(RenderSVGResourceFilter*);
+#endif
+ bool setMarkerStart(RenderSVGResourceMarker*);
+ bool setMarkerMid(RenderSVGResourceMarker*);
+ bool setMarkerEnd(RenderSVGResourceMarker*);
+ bool setMasker(RenderSVGResourceMasker*);
+ bool setFill(RenderSVGResourceContainer*);
+ bool setStroke(RenderSVGResourceContainer*);
+ bool setLinkedResource(RenderSVGResourceContainer*);
+
+ // 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 {
+ ClipperFilterMaskerData()
+ : clipper(0)
+#if ENABLE(FILTERS)
+ , filter(0)
+#endif
+ , masker(0)
+ {
+ }
+
+ static PassOwnPtr<ClipperFilterMaskerData> create()
+ {
+ return new ClipperFilterMaskerData;
+ }
+
+ RenderSVGResourceClipper* clipper;
+#if ENABLE(FILTERS)
+ RenderSVGResourceFilter* filter;
+#endif
+ RenderSVGResourceMasker* masker;
+ };
+
+ // From SVG 1.1 2nd Edition
+ // marker: line, path, polygon, polyline
+ struct MarkerData {
+ MarkerData()
+ : markerStart(0)
+ , markerMid(0)
+ , markerEnd(0)
+ {
+ }
+
+ static PassOwnPtr<MarkerData> create()
+ {
+ return new MarkerData;
+ }
+
+ RenderSVGResourceMarker* markerStart;
+ RenderSVGResourceMarker* markerMid;
+ RenderSVGResourceMarker* markerEnd;
+ };
+
+ // From SVG 1.1 2nd Edition
+ // fill: 'shapes' and 'text content elements'
+ // stroke: 'shapes' and 'text content elements'
+ // -> altGlyph, circle, ellipse, line, path, polygon, polyline, rect, text, textPath, tref, tspan
+ struct FillStrokeData {
+ FillStrokeData()
+ : fill(0)
+ , stroke(0)
+ {
+ }
+
+ static PassOwnPtr<FillStrokeData> create()
+ {
+ return new FillStrokeData;
+ }
+
+ RenderSVGResourceContainer* fill;
+ RenderSVGResourceContainer* stroke;
+ };
+
+ OwnPtr<ClipperFilterMaskerData> m_clipperFilterMaskerData;
+ OwnPtr<MarkerData> m_markerData;
+ OwnPtr<FillStrokeData> m_fillStrokeData;
+ RenderSVGResourceContainer* m_linkedResource;
+};
+
+}
+
+#endif
+#endif