summaryrefslogtreecommitdiffstats
path: root/WebCore/svg/graphics/SVGPaintServerGradient.cpp
diff options
context:
space:
mode:
authorUpstream <upstream-import@none>1970-01-12 13:46:40 +0000
committerUpstream <upstream-import@none>1970-01-12 13:46:40 +0000
commitd8543bb6618c17b12da906afa77d216f58cf4058 (patch)
treec58dc05ed86825bd0ef8d305d58c8205106b540f /WebCore/svg/graphics/SVGPaintServerGradient.cpp
downloadexternal_webkit-d8543bb6618c17b12da906afa77d216f58cf4058.zip
external_webkit-d8543bb6618c17b12da906afa77d216f58cf4058.tar.gz
external_webkit-d8543bb6618c17b12da906afa77d216f58cf4058.tar.bz2
external/webkit r30707
Diffstat (limited to 'WebCore/svg/graphics/SVGPaintServerGradient.cpp')
-rw-r--r--WebCore/svg/graphics/SVGPaintServerGradient.cpp143
1 files changed, 143 insertions, 0 deletions
diff --git a/WebCore/svg/graphics/SVGPaintServerGradient.cpp b/WebCore/svg/graphics/SVGPaintServerGradient.cpp
new file mode 100644
index 0000000..6a701b8
--- /dev/null
+++ b/WebCore/svg/graphics/SVGPaintServerGradient.cpp
@@ -0,0 +1,143 @@
+/*
+ * Copyright (C) 2006 Nikolas Zimmermann <zimmermann@kde.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+
+#if ENABLE(SVG)
+#include "SVGPaintServerGradient.h"
+
+#include "SVGGradientElement.h"
+#include "SVGRenderTreeAsText.h"
+
+namespace WebCore {
+
+TextStream& operator<<(TextStream& ts, SVGGradientSpreadMethod m)
+{
+ switch (m) {
+ case SPREADMETHOD_PAD:
+ ts << "PAD"; break;
+ case SPREADMETHOD_REPEAT:
+ ts << "REPEAT"; break;
+ case SPREADMETHOD_REFLECT:
+ ts << "REFLECT"; break;
+ }
+
+ return ts;
+}
+
+TextStream& operator<<(TextStream& ts, const Vector<SVGGradientStop>& l)
+{
+ ts << "[";
+ for (Vector<SVGGradientStop>::const_iterator it = l.begin(); it != l.end(); ++it) {
+ ts << "(" << it->first << "," << it->second << ")";
+ if (it + 1 != l.end())
+ ts << ", ";
+ }
+ ts << "]";
+ return ts;
+}
+
+SVGPaintServerGradient::SVGPaintServerGradient(const SVGGradientElement* owner)
+ : m_spreadMethod(SPREADMETHOD_PAD)
+ , m_boundingBoxMode(true)
+ , m_ownerElement(owner)
+
+#if PLATFORM(CG)
+ , m_stopsCache(0)
+ , m_shadingCache(0)
+ , m_savedContext(0)
+ , m_imageBuffer(0)
+#endif
+{
+ ASSERT(owner);
+}
+
+SVGPaintServerGradient::~SVGPaintServerGradient()
+{
+#if PLATFORM(CG)
+ CGShadingRelease(m_shadingCache);
+#endif
+}
+
+const Vector<SVGGradientStop>& SVGPaintServerGradient::gradientStops() const
+{
+ return m_stops;
+}
+
+void SVGPaintServerGradient::setGradientStops(const Vector<SVGGradientStop>& stops)
+{
+ m_stops = stops;
+}
+
+SVGGradientSpreadMethod SVGPaintServerGradient::spreadMethod() const
+{
+ return m_spreadMethod;
+}
+
+void SVGPaintServerGradient::setGradientSpreadMethod(const SVGGradientSpreadMethod& method)
+{
+ m_spreadMethod = method;
+}
+
+bool SVGPaintServerGradient::boundingBoxMode() const
+{
+ return m_boundingBoxMode;
+}
+
+void SVGPaintServerGradient::setBoundingBoxMode(bool mode)
+{
+ m_boundingBoxMode = mode;
+}
+
+AffineTransform SVGPaintServerGradient::gradientTransform() const
+{
+ return m_gradientTransform;
+}
+
+void SVGPaintServerGradient::setGradientTransform(const AffineTransform& transform)
+{
+ m_gradientTransform = transform;
+}
+
+TextStream& SVGPaintServerGradient::externalRepresentation(TextStream& ts) const
+{
+ // Gradients/patterns aren't setup, until they are used for painting. Work around that fact.
+ m_ownerElement->buildGradient();
+
+ // abstract, don't stream type
+ ts << "[stops=" << gradientStops() << "]";
+ if (spreadMethod() != SPREADMETHOD_PAD)
+ ts << "[method=" << spreadMethod() << "]";
+ if (!boundingBoxMode())
+ ts << " [bounding box mode=" << boundingBoxMode() << "]";
+ if (!gradientTransform().isIdentity())
+ ts << " [transform=" << gradientTransform() << "]";
+
+ return ts;
+}
+
+} // namespace WebCore
+
+#endif