883641970444b16aae8d19135ad8da77bdaeec4d
[WebKit-https.git] / Source / WebCore / rendering / style / SVGRenderStyleDefs.h
1 /*
2     Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
3                   2004, 2005 Rob Buis <buis@kde.org>
4     Copyright (C) Research In Motion Limited 2010. All rights reserved.
5     Copyright (C) 2014 Adobe Systems Incorporated. All rights reserved.
6
7     Based on khtml code by:
8     Copyright (C) 2000-2003 Lars Knoll (knoll@kde.org)
9               (C) 2000 Antti Koivisto (koivisto@kde.org)
10               (C) 2000-2003 Dirk Mueller (mueller@kde.org)
11               (C) 2002-2003 Apple Inc.
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 #include "Length.h"
33 #include "SVGLength.h"
34 #include "SVGPaint.h"
35 #include "ShadowData.h"
36 #include <wtf/RefCounted.h>
37 #include <wtf/RefPtr.h>
38
39 namespace WebCore {
40
41     enum EBaselineShift {
42         BS_BASELINE, BS_SUB, BS_SUPER, BS_LENGTH
43     };
44
45     enum ETextAnchor {
46         TA_START, TA_MIDDLE, TA_END
47     };
48
49     enum EColorInterpolation {
50         CI_AUTO, CI_SRGB, CI_LINEARRGB
51     };
52
53     enum EColorRendering {
54         CR_AUTO, CR_OPTIMIZESPEED, CR_OPTIMIZEQUALITY
55     };
56     enum EShapeRendering {
57         SR_AUTO, SR_OPTIMIZESPEED, SR_CRISPEDGES, SR_GEOMETRICPRECISION
58     };
59
60     enum SVGWritingMode {
61         WM_LRTB, WM_LR, WM_RLTB, WM_RL, WM_TBRL, WM_TB
62     };
63
64     enum EGlyphOrientation {
65         GO_0DEG, GO_90DEG, GO_180DEG, GO_270DEG, GO_AUTO
66     };
67
68     enum EAlignmentBaseline {
69         AB_AUTO, AB_BASELINE, AB_BEFORE_EDGE, AB_TEXT_BEFORE_EDGE,
70         AB_MIDDLE, AB_CENTRAL, AB_AFTER_EDGE, AB_TEXT_AFTER_EDGE,
71         AB_IDEOGRAPHIC, AB_ALPHABETIC, AB_HANGING, AB_MATHEMATICAL
72     };
73
74     enum EDominantBaseline {
75         DB_AUTO, DB_USE_SCRIPT, DB_NO_CHANGE, DB_RESET_SIZE,
76         DB_IDEOGRAPHIC, DB_ALPHABETIC, DB_HANGING, DB_MATHEMATICAL,
77         DB_CENTRAL, DB_MIDDLE, DB_TEXT_AFTER_EDGE, DB_TEXT_BEFORE_EDGE
78     };
79     
80     enum EVectorEffect {
81         VE_NONE,
82         VE_NON_SCALING_STROKE
83     };
84
85     enum EBufferedRendering {
86         BR_AUTO,
87         BR_DYNAMIC,
88         BR_STATIC
89     };
90
91     enum EMaskType {
92         MT_LUMINANCE,
93         MT_ALPHA
94     };
95
96     // These are all minimized combinations of paint-order.
97     enum PaintOrder {
98         PaintOrderNormal = 0,
99         PaintOrderFill = 1,
100         PaintOrderFillMarkers = 2,
101         PaintOrderStroke = 3,
102         PaintOrderStrokeMarkers = 4,
103         PaintOrderMarkers = 5,
104         PaintOrderMarkersStroke = 6
105     };
106
107     enum PaintType {
108         PaintTypeFill,
109         PaintTypeStroke,
110         PaintTypeMarkers
111     };
112
113     class CSSValue;
114     class CSSValueList;
115     class SVGPaint;
116
117     // Inherited/Non-Inherited Style Datastructures
118     class StyleFillData : public RefCounted<StyleFillData> {
119     public:
120         static Ref<StyleFillData> create() { return adoptRef(*new StyleFillData); }
121         Ref<StyleFillData> copy() const;
122
123         bool operator==(const StyleFillData&) const;
124         bool operator!=(const StyleFillData& other) const
125         {
126             return !(*this == other);
127         }
128
129         float opacity;
130         SVGPaint::SVGPaintType paintType;
131         Color paintColor;
132         String paintUri;
133         SVGPaint::SVGPaintType visitedLinkPaintType;
134         Color visitedLinkPaintColor;
135         String visitedLinkPaintUri;
136
137     private:
138         StyleFillData();
139         StyleFillData(const StyleFillData&);
140     };
141
142     class StyleStrokeData : public RefCounted<StyleStrokeData> {
143     public:
144         static Ref<StyleStrokeData> create() { return adoptRef(*new StyleStrokeData); }
145         Ref<StyleStrokeData> copy() const;
146
147         bool operator==(const StyleStrokeData&) const;
148         bool operator!=(const StyleStrokeData& other) const
149         {
150             return !(*this == other);
151         }
152
153         float opacity;
154         float miterLimit;
155
156         Length width;
157         Length dashOffset;
158         Vector<SVGLength> dashArray;
159
160         SVGPaint::SVGPaintType paintType;
161         Color paintColor;
162         String paintUri;
163         SVGPaint::SVGPaintType visitedLinkPaintType;
164         Color visitedLinkPaintColor;
165         String visitedLinkPaintUri;
166
167     private:        
168         StyleStrokeData();
169         StyleStrokeData(const StyleStrokeData&);
170     };
171
172     class StyleStopData : public RefCounted<StyleStopData> {
173     public:
174         static Ref<StyleStopData> create() { return adoptRef(*new StyleStopData); }
175         Ref<StyleStopData> copy() const;
176
177         bool operator==(const StyleStopData&) const;
178         bool operator!=(const StyleStopData& other) const
179         {
180             return !(*this == other);
181         }
182
183         float opacity;
184         Color color;
185
186     private:        
187         StyleStopData();
188         StyleStopData(const StyleStopData&);
189     };
190
191     class StyleTextData : public RefCounted<StyleTextData> {
192     public:
193         static Ref<StyleTextData> create() { return adoptRef(*new StyleTextData); }
194         Ref<StyleTextData> copy() const;
195         
196         bool operator==(const StyleTextData& other) const;
197         bool operator!=(const StyleTextData& other) const
198         {
199             return !(*this == other);
200         }
201
202         SVGLength kerning;
203
204     private:
205         StyleTextData();
206         StyleTextData(const StyleTextData&);
207     };
208
209     // Note: the rule for this class is, *no inheritance* of these props
210     class StyleMiscData : public RefCounted<StyleMiscData> {
211     public:
212         static Ref<StyleMiscData> create() { return adoptRef(*new StyleMiscData); }
213         Ref<StyleMiscData> copy() const;
214
215         bool operator==(const StyleMiscData&) const;
216         bool operator!=(const StyleMiscData& other) const
217         {
218             return !(*this == other);
219         }
220
221         Color floodColor;
222         float floodOpacity;
223         Color lightingColor;
224
225         // non-inherited text stuff lives here not in StyleTextData.
226         SVGLength baselineShiftValue;
227
228     private:
229         StyleMiscData();
230         StyleMiscData(const StyleMiscData&);
231     };
232
233     class StyleShadowSVGData : public RefCounted<StyleShadowSVGData> {
234     public:
235         static Ref<StyleShadowSVGData> create() { return adoptRef(*new StyleShadowSVGData); }
236         Ref<StyleShadowSVGData> copy() const;
237
238         bool operator==(const StyleShadowSVGData&) const;
239         bool operator!=(const StyleShadowSVGData& other) const
240         {
241             return !(*this == other);
242         }
243
244         std::unique_ptr<ShadowData> shadow;
245
246     private:
247         StyleShadowSVGData();
248         StyleShadowSVGData(const StyleShadowSVGData&);
249     };
250
251     // Non-inherited resources
252     class StyleResourceData : public RefCounted<StyleResourceData> {
253     public:
254         static Ref<StyleResourceData> create() { return adoptRef(*new StyleResourceData); }
255         Ref<StyleResourceData> copy() const;
256
257         bool operator==(const StyleResourceData&) const;
258         bool operator!=(const StyleResourceData& other) const
259         {
260             return !(*this == other);
261         }
262
263         String clipper;
264         String masker;
265
266     private:
267         StyleResourceData();
268         StyleResourceData(const StyleResourceData&);
269     };
270
271     // Inherited resources
272     class StyleInheritedResourceData : public RefCounted<StyleInheritedResourceData> {
273     public:
274         static Ref<StyleInheritedResourceData> create() { return adoptRef(*new StyleInheritedResourceData); }
275         Ref<StyleInheritedResourceData> copy() const;
276
277         bool operator==(const StyleInheritedResourceData&) const;
278         bool operator!=(const StyleInheritedResourceData& other) const
279         {
280             return !(*this == other);
281         }
282
283         String markerStart;
284         String markerMid;
285         String markerEnd;
286
287     private:
288         StyleInheritedResourceData();
289         StyleInheritedResourceData(const StyleInheritedResourceData&);
290     };
291
292     // Positioning and sizing properties.
293     class StyleLayoutData : public RefCounted<StyleLayoutData> {
294     public:
295         static Ref<StyleLayoutData> create() { return adoptRef(*new StyleLayoutData); }
296         Ref<StyleLayoutData> copy() const;
297
298         bool operator==(const StyleLayoutData&) const;
299         bool operator!=(const StyleLayoutData& other) const
300         {
301             return !(*this == other);
302         }
303
304         Length cx;
305         Length cy;
306         Length r;
307         Length rx;
308         Length ry;
309         Length x;
310         Length y;
311
312     private:        
313         StyleLayoutData();
314         StyleLayoutData(const StyleLayoutData&);
315     };
316
317 } // namespace WebCore
318
319 #endif // SVGRenderStyleDefs_h