File indexing completed on 2024-05-12 15:39:15
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