• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2     Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
3                   2004, 2005 Rob Buis <buis@kde.org>
4 
5     Based on khtml code by:
6     Copyright (C) 2000-2003 Lars Knoll (knoll@kde.org)
7               (C) 2000 Antti Koivisto (koivisto@kde.org)
8               (C) 2000-2003 Dirk Mueller (mueller@kde.org)
9               (C) 2002-2003 Apple Computer, Inc.
10 
11     This file is part of the KDE project
12 
13     This library is free software; you can redistribute it and/or
14     modify it under the terms of the GNU Library General Public
15     License as published by the Free Software Foundation; either
16     version 2 of the License, or (at your option) any later version.
17 
18     This library is distributed in the hope that it will be useful,
19     but WITHOUT ANY WARRANTY; without even the implied warranty of
20     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21     Library General Public License for more details.
22 
23     You should have received a copy of the GNU Library General Public License
24     along with this library; see the file COPYING.LIB.  If not, write to
25     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
26     Boston, MA 02110-1301, USA.
27 */
28 
29 #ifndef SVGRenderStyleDefs_h
30 #define SVGRenderStyleDefs_h
31 
32 #if ENABLE(SVG)
33 #include "Color.h"
34 #include "Path.h"
35 #include "PlatformString.h"
36 #include <wtf/RefCounted.h>
37 #include <wtf/RefPtr.h>
38 
39 // Helper macros for 'SVGRenderStyle'
40 #define SVG_RS_DEFINE_ATTRIBUTE(Data, Type, Name, Initial) \
41     void set##Type(Data val) { svg_noninherited_flags.f._##Name = val; } \
42     Data Name() const { return (Data) svg_noninherited_flags.f._##Name; } \
43     static Data initial##Type() { return Initial; }
44 
45 #define SVG_RS_DEFINE_ATTRIBUTE_INHERITED(Data, Type, Name, Initial) \
46     void set##Type(Data val) { svg_inherited_flags._##Name = val; } \
47     Data Name() const { return (Data) svg_inherited_flags._##Name; } \
48     static Data initial##Type() { return Initial; }
49 
50 // "Helper" macros for SVG's RenderStyle properties
51 // FIXME: These are impossible to work with or debug.
52 #define SVG_RS_DEFINE_ATTRIBUTE_DATAREF(Data, Group, Variable, Type, Name) \
53     Data Name() const { return Group->Variable; } \
54     void set##Type(Data obj) { SVG_RS_SET_VARIABLE(Group, Variable, obj) }
55 
56 #define SVG_RS_DEFINE_ATTRIBUTE_DATAREF_WITH_INITIAL(Data, Group, Variable, Type, Name, Initial) \
57     SVG_RS_DEFINE_ATTRIBUTE_DATAREF(Data, Group, Variable, Type, Name) \
58     static Data initial##Type() { return Initial; }
59 
60 #define SVG_RS_DEFINE_ATTRIBUTE_DATAREF_WITH_INITIAL_REFCOUNTED(Data, Group, Variable, Type, Name, Initial) \
61     Data* Name() const { return Group->Variable.get(); } \
62     void set##Type(PassRefPtr<Data> obj) { \
63         if (!(Group->Variable == obj)) \
64             Group.access()->Variable = obj; \
65     } \
66     static Data* initial##Type() { return Initial; }
67 
68 #define SVG_RS_SET_VARIABLE(Group, Variable, Value) \
69     if (!(Group->Variable == Value)) \
70         Group.access()->Variable = Value;
71 
72 namespace WebCore {
73 
74     enum EBaselineShift {
75         BS_BASELINE, BS_SUB, BS_SUPER, BS_LENGTH
76     };
77 
78     enum ETextAnchor {
79         TA_START, TA_MIDDLE, TA_END
80     };
81 
82     enum EColorInterpolation {
83         CI_AUTO, CI_SRGB, CI_LINEARRGB
84     };
85 
86     enum EColorRendering {
87         CR_AUTO, CR_OPTIMIZESPEED, CR_OPTIMIZEQUALITY
88     };
89 
90     enum EImageRendering {
91         IR_AUTO, IR_OPTIMIZESPEED, IR_OPTIMIZEQUALITY
92     };
93 
94     enum EShapeRendering {
95         SR_AUTO, SR_OPTIMIZESPEED, SR_CRISPEDGES, SR_GEOMETRICPRECISION
96     };
97 
98     enum ETextRendering {
99         TR_AUTO, TR_OPTIMIZESPEED, TR_OPTIMIZELEGIBILITY, TR_GEOMETRICPRECISION
100     };
101 
102     enum EWritingMode {
103         WM_LRTB, WM_LR, WM_RLTB, WM_RL, WM_TBRL, WM_TB
104     };
105 
106     enum EGlyphOrientation {
107         GO_0DEG, GO_90DEG, GO_180DEG, GO_270DEG, GO_AUTO
108     };
109 
110     enum EAlignmentBaseline {
111         AB_AUTO, AB_BASELINE, AB_BEFORE_EDGE, AB_TEXT_BEFORE_EDGE,
112         AB_MIDDLE, AB_CENTRAL, AB_AFTER_EDGE, AB_TEXT_AFTER_EDGE,
113         AB_IDEOGRAPHIC, AB_ALPHABETIC, AB_HANGING, AB_MATHEMATICAL
114     };
115 
116     enum EDominantBaseline {
117         DB_AUTO, DB_USE_SCRIPT, DB_NO_CHANGE, DB_RESET_SIZE,
118         DB_IDEOGRAPHIC, DB_ALPHABETIC, DB_HANGING, DB_MATHEMATICAL,
119         DB_CENTRAL, DB_MIDDLE, DB_TEXT_AFTER_EDGE, DB_TEXT_BEFORE_EDGE
120     };
121 
122     class CSSValue;
123     class CSSValueList;
124     class SVGPaint;
125 
126     // Inherited/Non-Inherited Style Datastructures
127     class StyleFillData : public RefCounted<StyleFillData> {
128     public:
create()129         static PassRefPtr<StyleFillData> create() { return adoptRef(new StyleFillData); }
copy()130         PassRefPtr<StyleFillData> copy() const { return adoptRef(new StyleFillData(*this)); }
131 
132         bool operator==(const StyleFillData &other) const;
133         bool operator!=(const StyleFillData &other) const
134         {
135             return !(*this == other);
136         }
137 
138         float opacity;
139         RefPtr<SVGPaint> paint;
140 
141     private:
142         StyleFillData();
143         StyleFillData(const StyleFillData&);
144     };
145 
146     class StyleStrokeData : public RefCounted<StyleStrokeData> {
147     public:
create()148         static PassRefPtr<StyleStrokeData> create() { return adoptRef(new StyleStrokeData); }
copy()149         PassRefPtr<StyleStrokeData> copy() const { return adoptRef(new StyleStrokeData(*this)); }
150 
151         bool operator==(const StyleStrokeData&) const;
152         bool operator!=(const StyleStrokeData& other) const
153         {
154             return !(*this == other);
155         }
156 
157         float opacity;
158         float miterLimit;
159 
160         RefPtr<CSSValue> width;
161         RefPtr<CSSValue> dashOffset;
162 
163         RefPtr<SVGPaint> paint;
164         RefPtr<CSSValueList> dashArray;
165 
166     private:
167         StyleStrokeData();
168         StyleStrokeData(const StyleStrokeData&);
169     };
170 
171     class StyleStopData : public RefCounted<StyleStopData> {
172     public:
create()173         static PassRefPtr<StyleStopData> create() { return adoptRef(new StyleStopData); }
copy()174         PassRefPtr<StyleStopData> copy() const { return adoptRef(new StyleStopData(*this)); }
175 
176         bool operator==(const StyleStopData &other) const;
177         bool operator!=(const StyleStopData &other) const
178         {
179             return !(*this == other);
180         }
181 
182         float opacity;
183         Color color;
184 
185     private:
186         StyleStopData();
187         StyleStopData(const StyleStopData&);
188     };
189 
190     class StyleTextData : public RefCounted<StyleTextData> {
191     public:
create()192         static PassRefPtr<StyleTextData> create() { return adoptRef(new StyleTextData); }
copy()193         PassRefPtr<StyleTextData> copy() const { return adoptRef(new StyleTextData(*this)); }
194 
195         bool operator==(const StyleTextData& other) const;
196         bool operator!=(const StyleTextData& other) const
197         {
198             return !(*this == other);
199         }
200 
201         RefPtr<CSSValue> kerning;
202 
203     private:
204         StyleTextData();
205         StyleTextData(const StyleTextData& other);
206     };
207 
208     class StyleClipData : public RefCounted<StyleClipData> {
209     public:
create()210         static PassRefPtr<StyleClipData> create() { return adoptRef(new StyleClipData); }
copy()211         PassRefPtr<StyleClipData> copy() const { return adoptRef(new StyleClipData(*this)); }
212 
213         bool operator==(const StyleClipData &other) const;
214         bool operator!=(const StyleClipData &other) const
215         {
216             return !(*this == other);
217         }
218 
219         String clipPath;
220 
221     private:
222         StyleClipData();
223         StyleClipData(const StyleClipData&);
224     };
225 
226     class StyleMaskData : public RefCounted<StyleMaskData> {
227     public:
create()228         static PassRefPtr<StyleMaskData> create() { return adoptRef(new StyleMaskData); }
copy()229         PassRefPtr<StyleMaskData> copy() const { return adoptRef(new StyleMaskData(*this)); }
230 
231         bool operator==(const StyleMaskData &other) const;
232         bool operator!=(const StyleMaskData &other) const { return !(*this == other); }
233 
234         String maskElement;
235 
236     private:
237         StyleMaskData();
238         StyleMaskData(const StyleMaskData&);
239     };
240 
241     class StyleMarkerData : public RefCounted<StyleMarkerData> {
242     public:
create()243         static PassRefPtr<StyleMarkerData> create() { return adoptRef(new StyleMarkerData); }
copy()244         PassRefPtr<StyleMarkerData> copy() const { return adoptRef(new StyleMarkerData(*this)); }
245 
246         bool operator==(const StyleMarkerData &other) const;
247         bool operator!=(const StyleMarkerData &other) const
248         {
249             return !(*this == other);
250         }
251 
252         String startMarker;
253         String midMarker;
254         String endMarker;
255 
256     private:
257         StyleMarkerData();
258         StyleMarkerData(const StyleMarkerData&);
259     };
260 
261     // Note : the rule for this class is, *no inheritance* of these props
262     class StyleMiscData : public RefCounted<StyleMiscData> {
263     public:
create()264         static PassRefPtr<StyleMiscData> create() { return adoptRef(new StyleMiscData); }
copy()265         PassRefPtr<StyleMiscData> copy() const { return adoptRef(new StyleMiscData(*this)); }
266 
267         bool operator==(const StyleMiscData &other) const;
268         bool operator!=(const StyleMiscData &other) const
269         {
270             return !(*this == other);
271         }
272 
273         String filter;
274         Color floodColor;
275         float floodOpacity;
276 
277         Color lightingColor;
278 
279         // non-inherited text stuff lives here not in StyleTextData.
280         RefPtr<CSSValue> baselineShiftValue;
281 
282     private:
283         StyleMiscData();
284         StyleMiscData(const StyleMiscData&);
285     };
286 
287 } // namespace WebCore
288 
289 #endif // ENABLE(SVG)
290 #endif // SVGRenderStyleDefs_h
291 
292 // vim:ts=4:noet
293