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