File indexing completed on 2024-05-12 11:51:55

0001 /*
0002  * Copyright (C) 2006 Nikolas Zimmermann <zimmermann@kde.org>
0003  *
0004  * Redistribution and use in source and binary forms, with or without
0005  * modification, are permitted provided that the following conditions
0006  * are met:
0007  * 1. Redistributions of source code must retain the above copyright
0008  *    notice, this list of conditions and the following disclaimer.
0009  * 2. Redistributions in binary form must reproduce the above copyright
0010  *    notice, this list of conditions and the following disclaimer in the
0011  *    documentation and/or other materials provided with the distribution.
0012  *
0013  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
0014  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0015  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
0016  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
0017  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
0018  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
0019  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
0020  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
0021  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
0022  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
0023  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
0024  */
0025 
0026 #include "wtf/Platform.h"
0027 
0028 #if ENABLE(SVG)
0029 #include "SVGPaintServerGradient.h"
0030 
0031 #include "SVGGradientElement.h"
0032 /*#include "SVGRenderTreeAsText.h"*/
0033 
0034 namespace WebCore
0035 {
0036 
0037 /*TextStream& operator<<(TextStream& ts, SVGGradientSpreadMethod m)
0038 {
0039     switch (m) {
0040         case SPREADMETHOD_PAD:
0041             ts << "PAD"; break;
0042         case SPREADMETHOD_REPEAT:
0043             ts << "REPEAT"; break;
0044         case SPREADMETHOD_REFLECT:
0045             ts << "REFLECT"; break;
0046     }
0047 
0048     return ts;
0049 }
0050 
0051 TextStream& operator<<(TextStream& ts, const Vector<SVGGradientStop>& l)
0052 {
0053     ts << "[";
0054     for (Vector<SVGGradientStop>::const_iterator it = l.begin(); it != l.end(); ++it) {
0055         ts << "(" << it->first << "," << it->second << ")";
0056         if (it + 1 != l.end())
0057             ts << ", ";
0058     }
0059     ts << "]";
0060     return ts;
0061 }*/
0062 
0063 SVGPaintServerGradient::SVGPaintServerGradient(const SVGGradientElement *owner)
0064     : m_spreadMethod(SPREADMETHOD_PAD)
0065     , m_boundingBoxMode(true)
0066     , m_ownerElement(owner)
0067 
0068 #if PLATFORM(CG)
0069     , m_stopsCache(0)
0070     , m_shadingCache(0)
0071     , m_savedContext(0)
0072     , m_imageBuffer(0)
0073 #endif
0074 {
0075     ASSERT(owner);
0076 }
0077 
0078 SVGPaintServerGradient::~SVGPaintServerGradient()
0079 {
0080 #if PLATFORM(CG)
0081     CGShadingRelease(m_shadingCache);
0082 #endif
0083 }
0084 
0085 const Vector<SVGGradientStop> &SVGPaintServerGradient::gradientStops() const
0086 {
0087     return m_stops;
0088 }
0089 
0090 void SVGPaintServerGradient::setGradientStops(const Vector<SVGGradientStop> &stops)
0091 {
0092     m_stops = stops;
0093 }
0094 
0095 SVGGradientSpreadMethod SVGPaintServerGradient::spreadMethod() const
0096 {
0097     return m_spreadMethod;
0098 }
0099 
0100 void SVGPaintServerGradient::setGradientSpreadMethod(const SVGGradientSpreadMethod &method)
0101 {
0102     m_spreadMethod = method;
0103 }
0104 
0105 bool SVGPaintServerGradient::boundingBoxMode() const
0106 {
0107     return m_boundingBoxMode;
0108 }
0109 
0110 void SVGPaintServerGradient::setBoundingBoxMode(bool mode)
0111 {
0112     m_boundingBoxMode = mode;
0113 }
0114 
0115 AffineTransform SVGPaintServerGradient::gradientTransform() const
0116 {
0117     return m_gradientTransform;
0118 }
0119 
0120 void SVGPaintServerGradient::setGradientTransform(const AffineTransform &transform)
0121 {
0122     m_gradientTransform = transform;
0123 }
0124 
0125 /*TextStream& SVGPaintServerGradient::externalRepresentation(TextStream& ts) const
0126 {
0127     // Gradients/patterns aren't setup, until they are used for painting. Work around that fact.
0128     m_ownerElement->buildGradient();
0129 
0130     // abstract, don't stream type
0131     ts  << "[stops=" << gradientStops() << "]";
0132     if (spreadMethod() != SPREADMETHOD_PAD)
0133         ts << "[method=" << spreadMethod() << "]";
0134     if (!boundingBoxMode())
0135         ts << " [bounding box mode=" << boundingBoxMode() << "]";
0136     if (!gradientTransform().isIdentity())
0137         ts << " [transform=" << gradientTransform() << "]";
0138 
0139     return ts;
0140 }*/
0141 
0142 } // namespace WebCore
0143 
0144 #endif