File indexing completed on 2024-05-12 15:39:16
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 #ifndef SVGResourceMarker_h 0027 #define SVGResourceMarker_h 0028 0029 #if ENABLE(SVG) 0030 0031 #include "FloatRect.h" 0032 #include "SVGResource.h" 0033 0034 namespace WebCore 0035 { 0036 0037 class GraphicsContext; 0038 class RenderSVGViewportContainer; 0039 0040 class SVGResourceMarker : public SVGResource 0041 { 0042 public: 0043 static PassRefPtr<SVGResourceMarker> create() 0044 { 0045 return adoptRef(new SVGResourceMarker); 0046 } 0047 virtual ~SVGResourceMarker(); 0048 0049 void setMarker(RenderSVGViewportContainer *); 0050 0051 void setRef(double refX, double refY); 0052 double refX() const 0053 { 0054 return m_refX; 0055 } 0056 double refY() const 0057 { 0058 return m_refY; 0059 } 0060 0061 void setAngle(float angle) 0062 { 0063 m_angle = angle; 0064 } 0065 void setAutoAngle() 0066 { 0067 m_angle = -1; 0068 } 0069 float angle() const 0070 { 0071 return m_angle; 0072 } 0073 0074 void setUseStrokeWidth(bool useStrokeWidth = true) 0075 { 0076 m_useStrokeWidth = useStrokeWidth; 0077 } 0078 bool useStrokeWidth() const 0079 { 0080 return m_useStrokeWidth; 0081 } 0082 0083 FloatRect cachedBounds() const; 0084 void draw(GraphicsContext *, const FloatRect &, double x, double y, double strokeWidth = 1, double angle = 0); 0085 0086 virtual SVGResourceType resourceType() const 0087 { 0088 return MarkerResourceType; 0089 } 0090 virtual TextStream &externalRepresentation(TextStream &) const; 0091 0092 private: 0093 SVGResourceMarker(); 0094 double m_refX, m_refY; 0095 FloatRect m_cachedBounds; 0096 float m_angle; 0097 RenderSVGViewportContainer *m_marker; 0098 bool m_useStrokeWidth; 0099 }; 0100 0101 SVGResourceMarker *getMarkerById(Document *, const AtomicString &); 0102 0103 } // namespace WebCore 0104 0105 #endif 0106 0107 #endif // SVGResourceMarker_h