18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                  2004, 2005 Rob Buis <buis@kde.org>
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Copyright (C) 2005, 2006 Apple Computer, Inc.
5dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    Copyright (C) Research In Motion Limited 2010. All rights reserved.
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    This library is free software; you can redistribute it and/or
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    modify it under the terms of the GNU Library General Public
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    License as published by the Free Software Foundation; either
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    version 2 of the License, or (at your option) any later version.
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    This library is distributed in the hope that it will be useful,
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    but WITHOUT ANY WARRANTY; without even the implied warranty of
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Library General Public License for more details.
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    You should have received a copy of the GNU Library General Public License
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    along with this library; see the file COPYING.LIB.  If not, write to
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Boston, MA 02110-1301, USA.
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef SVGRenderStyle_h
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define SVGRenderStyle_h
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(SVG)
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CSSValueList.h"
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "DataRef.h"
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "GraphicsTypes.h"
30dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "Path.h"
31ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#include "RenderStyleConstants.h"
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGPaint.h"
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGRenderStyleDefs.h"
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
37d0825bca7fe65beaee391d30da42e937db621564Steve Blockclass FloatRect;
38d0825bca7fe65beaee391d30da42e937db621564Steve Blockclass IntRect;
39d0825bca7fe65beaee391d30da42e937db621564Steve Blockclass RenderObject;
40d0825bca7fe65beaee391d30da42e937db621564Steve Block
41d0825bca7fe65beaee391d30da42e937db621564Steve Blockclass SVGRenderStyle : public RefCounted<SVGRenderStyle> {
42d0825bca7fe65beaee391d30da42e937db621564Steve Blockpublic:
43d0825bca7fe65beaee391d30da42e937db621564Steve Block    static PassRefPtr<SVGRenderStyle> create() { return adoptRef(new SVGRenderStyle); }
44d0825bca7fe65beaee391d30da42e937db621564Steve Block    PassRefPtr<SVGRenderStyle> copy() const { return adoptRef(new SVGRenderStyle(*this));}
45d0825bca7fe65beaee391d30da42e937db621564Steve Block    ~SVGRenderStyle();
46d0825bca7fe65beaee391d30da42e937db621564Steve Block
47d0825bca7fe65beaee391d30da42e937db621564Steve Block    bool inheritedNotEqual(const SVGRenderStyle*) const;
48d0825bca7fe65beaee391d30da42e937db621564Steve Block    void inheritFrom(const SVGRenderStyle*);
49d0825bca7fe65beaee391d30da42e937db621564Steve Block
50ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    StyleDifference diff(const SVGRenderStyle*) const;
51ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block
52d0825bca7fe65beaee391d30da42e937db621564Steve Block    bool operator==(const SVGRenderStyle&) const;
53d0825bca7fe65beaee391d30da42e937db621564Steve Block    bool operator!=(const SVGRenderStyle& o) const { return !(*this == o); }
54d0825bca7fe65beaee391d30da42e937db621564Steve Block
55db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    // Initial values for all the properties
56db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    static EAlignmentBaseline initialAlignmentBaseline() { return AB_AUTO; }
57db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    static EDominantBaseline initialDominantBaseline() { return DB_AUTO; }
58db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    static EBaselineShift initialBaselineShift() { return BS_BASELINE; }
59db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    static EVectorEffect initialVectorEffect() { return VE_NONE; }
60db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    static LineCap initialCapStyle() { return ButtCap; }
61db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    static WindRule initialClipRule() { return RULE_NONZERO; }
62db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    static EColorInterpolation initialColorInterpolation() { return CI_SRGB; }
63db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    static EColorInterpolation initialColorInterpolationFilters() { return CI_LINEARRGB; }
64db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    static EColorRendering initialColorRendering() { return CR_AUTO; }
65db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    static WindRule initialFillRule() { return RULE_NONZERO; }
66db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    static EImageRendering initialImageRendering() { return IR_AUTO; }
67db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    static LineJoin initialJoinStyle() { return MiterJoin; }
68db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    static EShapeRendering initialShapeRendering() { return SR_AUTO; }
69db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    static ETextAnchor initialTextAnchor() { return TA_START; }
70a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    static SVGWritingMode initialWritingMode() { return WM_LRTB; }
71db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    static EGlyphOrientation initialGlyphOrientationHorizontal() { return GO_0DEG; }
72db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    static EGlyphOrientation initialGlyphOrientationVertical() { return GO_AUTO; }
7354cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block    static float initialFillOpacity() { return 1.0f; }
7454cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block    static SVGPaint* initialFillPaint() { return SVGPaint::defaultFill(); }
7554cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block    static float initialStrokeOpacity() { return 1.0f; }
7654cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block    static SVGPaint* initialStrokePaint() { return SVGPaint::defaultStroke(); }
77dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    static Vector<SVGLength> initialStrokeDashArray() { return Vector<SVGLength>(); }
7854cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block    static float initialStrokeMiterLimit() { return 4.0f; }
7954cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block    static float initialStopOpacity() { return 1.0f; }
80db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    static Color initialStopColor() { return Color(0, 0, 0); }
8154cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block    static float initialFloodOpacity() { return 1.0f; }
82db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    static Color initialFloodColor() { return Color(0, 0, 0); }
83db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    static Color initialLightingColor() { return Color(255, 255, 255); }
84db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    static ShadowData* initialShadow() { return 0; }
85db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    static String initialClipperResource() { return String(); }
86db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    static String initialFilterResource() { return String(); }
87db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    static String initialMaskerResource() { return String(); }
88db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    static String initialMarkerStartResource() { return String(); }
89db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    static String initialMarkerMidResource() { return String(); }
90db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    static String initialMarkerEndResource() { return String(); }
91db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
92dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    static SVGLength initialBaselineShiftValue()
93dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    {
94dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch        SVGLength length;
9528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        ExceptionCode ec = 0;
9628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        length.newValueSpecifiedUnits(LengthTypeNumber, 0, ec);
9728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        ASSERT(!ec);
98dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch        return length;
99dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    }
100dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch
101dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    static SVGLength initialKerning()
102dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    {
103dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch        SVGLength length;
10428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        ExceptionCode ec = 0;
10528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        length.newValueSpecifiedUnits(LengthTypeNumber, 0, ec);
10628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        ASSERT(!ec);
107dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch        return length;
108dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    }
109dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch
110dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    static SVGLength initialStrokeDashOffset()
111dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    {
112dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch        SVGLength length;
11328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        ExceptionCode ec = 0;
11428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        length.newValueSpecifiedUnits(LengthTypeNumber, 0, ec);
11528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        ASSERT(!ec);
116dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch        return length;
117dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    }
118dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch
119dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    static SVGLength initialStrokeWidth()
120dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    {
121dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch        SVGLength length;
12228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        ExceptionCode ec = 0;
12328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        length.newValueSpecifiedUnits(LengthTypeNumber, 1, ec);
12428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        ASSERT(!ec);
125dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch        return length;
126dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    }
127dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch
128db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    // SVG CSS Property setters
129db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    void setAlignmentBaseline(EAlignmentBaseline val) { svg_noninherited_flags.f._alignmentBaseline = val; }
130db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    void setDominantBaseline(EDominantBaseline val) { svg_noninherited_flags.f._dominantBaseline = val; }
131db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    void setBaselineShift(EBaselineShift val) { svg_noninherited_flags.f._baselineShift = val; }
132db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    void setVectorEffect(EVectorEffect val) { svg_noninherited_flags.f._vectorEffect = val; }
133db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    void setCapStyle(LineCap val) { svg_inherited_flags._capStyle = val; }
134db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    void setClipRule(WindRule val) { svg_inherited_flags._clipRule = val; }
135db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    void setColorInterpolation(EColorInterpolation val) { svg_inherited_flags._colorInterpolation = val; }
136db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    void setColorInterpolationFilters(EColorInterpolation val) { svg_inherited_flags._colorInterpolationFilters = val; }
137db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    void setColorRendering(EColorRendering val) { svg_inherited_flags._colorRendering = val; }
138db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    void setFillRule(WindRule val) { svg_inherited_flags._fillRule = val; }
139db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    void setImageRendering(EImageRendering val) { svg_inherited_flags._imageRendering = val; }
140db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    void setJoinStyle(LineJoin val) { svg_inherited_flags._joinStyle = val; }
141db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    void setShapeRendering(EShapeRendering val) { svg_inherited_flags._shapeRendering = val; }
142db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    void setTextAnchor(ETextAnchor val) { svg_inherited_flags._textAnchor = val; }
143a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    void setWritingMode(SVGWritingMode val) { svg_inherited_flags._writingMode = val; }
144db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    void setGlyphOrientationHorizontal(EGlyphOrientation val) { svg_inherited_flags._glyphOrientationHorizontal = val; }
145db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    void setGlyphOrientationVertical(EGlyphOrientation val) { svg_inherited_flags._glyphOrientationVertical = val; }
146d0825bca7fe65beaee391d30da42e937db621564Steve Block
147db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    void setFillOpacity(float obj)
148db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    {
149db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        if (!(fill->opacity == obj))
150db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block            fill.access()->opacity = obj;
151db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    }
152db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
15354cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block    void setFillPaint(PassRefPtr<SVGPaint> obj)
154db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    {
15554cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block        if (!(fill->paint == obj))
15654cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block            fill.access()->paint = obj;
157db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    }
158db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
159db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    void setStrokeOpacity(float obj)
160db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    {
161db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        if (!(stroke->opacity == obj))
162db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block            stroke.access()->opacity = obj;
163db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    }
164db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
16554cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block    void setStrokePaint(PassRefPtr<SVGPaint> obj)
166db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    {
16754cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block        if (!(stroke->paint == obj))
16854cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block            stroke.access()->paint = obj;
169db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    }
170db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
171dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    void setStrokeDashArray(const Vector<SVGLength>& obj)
172db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    {
173db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        if (!(stroke->dashArray == obj))
174db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block            stroke.access()->dashArray = obj;
175db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    }
176db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
177db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    void setStrokeMiterLimit(float obj)
178db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    {
179db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        if (!(stroke->miterLimit == obj))
180db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block            stroke.access()->miterLimit = obj;
181db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    }
182db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
183dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    void setStrokeWidth(const SVGLength& obj)
184db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    {
185db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        if (!(stroke->width == obj))
186db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block            stroke.access()->width = obj;
187db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    }
188db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
189dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    void setStrokeDashOffset(const SVGLength& obj)
190db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    {
191db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        if (!(stroke->dashOffset == obj))
192db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block            stroke.access()->dashOffset = obj;
193db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    }
194db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
195dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    void setKerning(const SVGLength& obj)
196db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    {
197db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        if (!(text->kerning == obj))
198db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block            text.access()->kerning = obj;
199db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    }
200db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
201db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    void setStopOpacity(float obj)
202db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    {
203db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        if (!(stops->opacity == obj))
204db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block            stops.access()->opacity = obj;
205db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    }
206db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
207dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    void setStopColor(const Color& obj)
208db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    {
209db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        if (!(stops->color == obj))
210db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block            stops.access()->color = obj;
211db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    }
212db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
213db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    void setFloodOpacity(float obj)
214db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    {
215db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        if (!(misc->floodOpacity == obj))
216db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block            misc.access()->floodOpacity = obj;
217db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    }
218db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
219dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    void setFloodColor(const Color& obj)
220db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    {
221db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        if (!(misc->floodColor == obj))
222db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block            misc.access()->floodColor = obj;
223db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    }
224db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
225dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    void setLightingColor(const Color& obj)
226db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    {
227db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        if (!(misc->lightingColor == obj))
228db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block            misc.access()->lightingColor = obj;
229db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    }
230db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
231dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    void setBaselineShiftValue(const SVGLength& obj)
232db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    {
233db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        if (!(misc->baselineShiftValue == obj))
234db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block            misc.access()->baselineShiftValue = obj;
235db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    }
236db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
237dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    void setShadow(PassOwnPtr<ShadowData> obj) { shadowSVG.access()->shadow = obj; }
238db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
239db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    // Setters for non-inherited resources
240dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    void setClipperResource(const String& obj)
241db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    {
242db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        if (!(resources->clipper == obj))
243db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block            resources.access()->clipper = obj;
244db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    }
245d0825bca7fe65beaee391d30da42e937db621564Steve Block
246dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    void setFilterResource(const String& obj)
247db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    {
248db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        if (!(resources->filter == obj))
249db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block            resources.access()->filter = obj;
250db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    }
251d0825bca7fe65beaee391d30da42e937db621564Steve Block
252dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    void setMaskerResource(const String& obj)
253db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    {
254db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        if (!(resources->masker == obj))
255db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block            resources.access()->masker = obj;
256db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    }
257d0825bca7fe65beaee391d30da42e937db621564Steve Block
258db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    // Setters for inherited resources
259dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    void setMarkerStartResource(const String& obj)
260db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    {
261db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        if (!(inheritedResources->markerStart == obj))
262db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block            inheritedResources.access()->markerStart = obj;
263db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    }
264d0825bca7fe65beaee391d30da42e937db621564Steve Block
265dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    void setMarkerMidResource(const String& obj)
266db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    {
267db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        if (!(inheritedResources->markerMid == obj))
268db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block            inheritedResources.access()->markerMid = obj;
269db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    }
270d0825bca7fe65beaee391d30da42e937db621564Steve Block
271dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    void setMarkerEndResource(const String& obj)
272db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    {
273db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        if (!(inheritedResources->markerEnd == obj))
274db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block            inheritedResources.access()->markerEnd = obj;
275db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    }
276dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
277db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    // Read accessors for all the properties
278db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    EAlignmentBaseline alignmentBaseline() const { return (EAlignmentBaseline) svg_noninherited_flags.f._alignmentBaseline; }
279db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    EDominantBaseline dominantBaseline() const { return (EDominantBaseline) svg_noninherited_flags.f._dominantBaseline; }
280db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    EBaselineShift baselineShift() const { return (EBaselineShift) svg_noninherited_flags.f._baselineShift; }
281db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    EVectorEffect vectorEffect() const { return (EVectorEffect) svg_noninherited_flags.f._vectorEffect; }
282db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    LineCap capStyle() const { return (LineCap) svg_inherited_flags._capStyle; }
283db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    WindRule clipRule() const { return (WindRule) svg_inherited_flags._clipRule; }
284db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    EColorInterpolation colorInterpolation() const { return (EColorInterpolation) svg_inherited_flags._colorInterpolation; }
285db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    EColorInterpolation colorInterpolationFilters() const { return (EColorInterpolation) svg_inherited_flags._colorInterpolationFilters; }
286db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    EColorRendering colorRendering() const { return (EColorRendering) svg_inherited_flags._colorRendering; }
287db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    WindRule fillRule() const { return (WindRule) svg_inherited_flags._fillRule; }
288db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    EImageRendering imageRendering() const { return (EImageRendering) svg_inherited_flags._imageRendering; }
289db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    LineJoin joinStyle() const { return (LineJoin) svg_inherited_flags._joinStyle; }
290db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    EShapeRendering shapeRendering() const { return (EShapeRendering) svg_inherited_flags._shapeRendering; }
291db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    ETextAnchor textAnchor() const { return (ETextAnchor) svg_inherited_flags._textAnchor; }
292a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    SVGWritingMode writingMode() const { return (SVGWritingMode) svg_inherited_flags._writingMode; }
293db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    EGlyphOrientation glyphOrientationHorizontal() const { return (EGlyphOrientation) svg_inherited_flags._glyphOrientationHorizontal; }
294db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    EGlyphOrientation glyphOrientationVertical() const { return (EGlyphOrientation) svg_inherited_flags._glyphOrientationVertical; }
295db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    float fillOpacity() const { return fill->opacity; }
29654cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block    SVGPaint* fillPaint() const { return fill->paint.get(); }
297db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    float strokeOpacity() const { return stroke->opacity; }
29854cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block    SVGPaint* strokePaint() const { return stroke->paint.get(); }
299dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    Vector<SVGLength> strokeDashArray() const { return stroke->dashArray; }
300db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    float strokeMiterLimit() const { return stroke->miterLimit; }
301dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    SVGLength strokeWidth() const { return stroke->width; }
302dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    SVGLength strokeDashOffset() const { return stroke->dashOffset; }
303dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    SVGLength kerning() const { return text->kerning; }
304db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    float stopOpacity() const { return stops->opacity; }
305db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    Color stopColor() const { return stops->color; }
306db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    float floodOpacity() const { return misc->floodOpacity; }
307db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    Color floodColor() const { return misc->floodColor; }
308db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    Color lightingColor() const { return misc->lightingColor; }
309dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    SVGLength baselineShiftValue() const { return misc->baselineShiftValue; }
310db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    ShadowData* shadow() const { return shadowSVG->shadow.get(); }
311db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    String clipperResource() const { return resources->clipper; }
312db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    String filterResource() const { return resources->filter; }
313db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    String maskerResource() const { return resources->masker; }
314db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    String markerStartResource() const { return inheritedResources->markerStart; }
315db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    String markerMidResource() const { return inheritedResources->markerMid; }
316db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    String markerEndResource() const { return inheritedResources->markerEnd; }
317dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
318d0825bca7fe65beaee391d30da42e937db621564Steve Block    // convenience
319545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    bool hasClipper() const { return !clipperResource().isEmpty(); }
320545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    bool hasMasker() const { return !maskerResource().isEmpty(); }
321545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    bool hasFilter() const { return !filterResource().isEmpty(); }
32221939df44de1705786c545cd1bf519d47250322dBen Murdoch    bool hasMarkers() const { return !markerStartResource().isEmpty() || !markerMidResource().isEmpty() || !markerEndResource().isEmpty(); }
32354cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block    bool hasStroke() const { return strokePaint()->paintType() != SVGPaint::SVG_PAINTTYPE_NONE; }
32454cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block    bool hasFill() const { return fillPaint()->paintType() != SVGPaint::SVG_PAINTTYPE_NONE; }
325a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    bool isVerticalWritingMode() const { return writingMode() == WM_TBRL || writingMode() == WM_TB; }
326d0825bca7fe65beaee391d30da42e937db621564Steve Block
327d0825bca7fe65beaee391d30da42e937db621564Steve Blockprotected:
328d0825bca7fe65beaee391d30da42e937db621564Steve Block    // inherit
329d0825bca7fe65beaee391d30da42e937db621564Steve Block    struct InheritedFlags {
330d0825bca7fe65beaee391d30da42e937db621564Steve Block        bool operator==(const InheritedFlags& other) const
331d0825bca7fe65beaee391d30da42e937db621564Steve Block        {
332d0825bca7fe65beaee391d30da42e937db621564Steve Block            return (_colorRendering == other._colorRendering)
333d0825bca7fe65beaee391d30da42e937db621564Steve Block                && (_imageRendering == other._imageRendering)
334d0825bca7fe65beaee391d30da42e937db621564Steve Block                && (_shapeRendering == other._shapeRendering)
335d0825bca7fe65beaee391d30da42e937db621564Steve Block                && (_clipRule == other._clipRule)
336d0825bca7fe65beaee391d30da42e937db621564Steve Block                && (_fillRule == other._fillRule)
337d0825bca7fe65beaee391d30da42e937db621564Steve Block                && (_capStyle == other._capStyle)
338d0825bca7fe65beaee391d30da42e937db621564Steve Block                && (_joinStyle == other._joinStyle)
339d0825bca7fe65beaee391d30da42e937db621564Steve Block                && (_textAnchor == other._textAnchor)
340d0825bca7fe65beaee391d30da42e937db621564Steve Block                && (_colorInterpolation == other._colorInterpolation)
341d0825bca7fe65beaee391d30da42e937db621564Steve Block                && (_colorInterpolationFilters == other._colorInterpolationFilters)
342d0825bca7fe65beaee391d30da42e937db621564Steve Block                && (_writingMode == other._writingMode)
343d0825bca7fe65beaee391d30da42e937db621564Steve Block                && (_glyphOrientationHorizontal == other._glyphOrientationHorizontal)
344d0825bca7fe65beaee391d30da42e937db621564Steve Block                && (_glyphOrientationVertical == other._glyphOrientationVertical);
345d0825bca7fe65beaee391d30da42e937db621564Steve Block        }
3468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
347d0825bca7fe65beaee391d30da42e937db621564Steve Block        bool operator!=(const InheritedFlags& other) const
3488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        {
349d0825bca7fe65beaee391d30da42e937db621564Steve Block            return !(*this == other);
3508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
351d0825bca7fe65beaee391d30da42e937db621564Steve Block
352d0825bca7fe65beaee391d30da42e937db621564Steve Block        unsigned _colorRendering : 2; // EColorRendering
353d0825bca7fe65beaee391d30da42e937db621564Steve Block        unsigned _imageRendering : 2; // EImageRendering
354d0825bca7fe65beaee391d30da42e937db621564Steve Block        unsigned _shapeRendering : 2; // EShapeRendering
355d0825bca7fe65beaee391d30da42e937db621564Steve Block        unsigned _clipRule : 1; // WindRule
356d0825bca7fe65beaee391d30da42e937db621564Steve Block        unsigned _fillRule : 1; // WindRule
357d0825bca7fe65beaee391d30da42e937db621564Steve Block        unsigned _capStyle : 2; // LineCap
358d0825bca7fe65beaee391d30da42e937db621564Steve Block        unsigned _joinStyle : 2; // LineJoin
359d0825bca7fe65beaee391d30da42e937db621564Steve Block        unsigned _textAnchor : 2; // ETextAnchor
360d0825bca7fe65beaee391d30da42e937db621564Steve Block        unsigned _colorInterpolation : 2; // EColorInterpolation
361d0825bca7fe65beaee391d30da42e937db621564Steve Block        unsigned _colorInterpolationFilters : 2; // EColorInterpolation
362a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        unsigned _writingMode : 3; // SVGWritingMode
363d0825bca7fe65beaee391d30da42e937db621564Steve Block        unsigned _glyphOrientationHorizontal : 3; // EGlyphOrientation
364d0825bca7fe65beaee391d30da42e937db621564Steve Block        unsigned _glyphOrientationVertical : 3; // EGlyphOrientation
365d0825bca7fe65beaee391d30da42e937db621564Steve Block    } svg_inherited_flags;
366d0825bca7fe65beaee391d30da42e937db621564Steve Block
367d0825bca7fe65beaee391d30da42e937db621564Steve Block    // don't inherit
368d0825bca7fe65beaee391d30da42e937db621564Steve Block    struct NonInheritedFlags {
369d0825bca7fe65beaee391d30da42e937db621564Steve Block        // 32 bit non-inherited, don't add to the struct, or the operator will break.
370d0825bca7fe65beaee391d30da42e937db621564Steve Block        bool operator==(const NonInheritedFlags &other) const { return _niflags == other._niflags; }
371d0825bca7fe65beaee391d30da42e937db621564Steve Block        bool operator!=(const NonInheritedFlags &other) const { return _niflags != other._niflags; }
372d0825bca7fe65beaee391d30da42e937db621564Steve Block
373d0825bca7fe65beaee391d30da42e937db621564Steve Block        union {
374d0825bca7fe65beaee391d30da42e937db621564Steve Block            struct {
375d0825bca7fe65beaee391d30da42e937db621564Steve Block                unsigned _alignmentBaseline : 4; // EAlignmentBaseline
376d0825bca7fe65beaee391d30da42e937db621564Steve Block                unsigned _dominantBaseline : 4; // EDominantBaseline
377d0825bca7fe65beaee391d30da42e937db621564Steve Block                unsigned _baselineShift : 2; // EBaselineShift
378545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch                unsigned _vectorEffect: 1; // EVectorEffect
379545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch                // 21 bits unused
380d0825bca7fe65beaee391d30da42e937db621564Steve Block            } f;
381d0825bca7fe65beaee391d30da42e937db621564Steve Block            uint32_t _niflags;
382d0825bca7fe65beaee391d30da42e937db621564Steve Block        };
383d0825bca7fe65beaee391d30da42e937db621564Steve Block    } svg_noninherited_flags;
384d0825bca7fe65beaee391d30da42e937db621564Steve Block
385d0825bca7fe65beaee391d30da42e937db621564Steve Block    // inherited attributes
386d0825bca7fe65beaee391d30da42e937db621564Steve Block    DataRef<StyleFillData> fill;
387d0825bca7fe65beaee391d30da42e937db621564Steve Block    DataRef<StyleStrokeData> stroke;
388d0825bca7fe65beaee391d30da42e937db621564Steve Block    DataRef<StyleTextData> text;
389dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    DataRef<StyleInheritedResourceData> inheritedResources;
390d0825bca7fe65beaee391d30da42e937db621564Steve Block
391d0825bca7fe65beaee391d30da42e937db621564Steve Block    // non-inherited attributes
392d0825bca7fe65beaee391d30da42e937db621564Steve Block    DataRef<StyleStopData> stops;
393d0825bca7fe65beaee391d30da42e937db621564Steve Block    DataRef<StyleMiscData> misc;
394d0825bca7fe65beaee391d30da42e937db621564Steve Block    DataRef<StyleShadowSVGData> shadowSVG;
395dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    DataRef<StyleResourceData> resources;
396d0825bca7fe65beaee391d30da42e937db621564Steve Block
397d0825bca7fe65beaee391d30da42e937db621564Steve Blockprivate:
398d0825bca7fe65beaee391d30da42e937db621564Steve Block    enum CreateDefaultType { CreateDefault };
399d0825bca7fe65beaee391d30da42e937db621564Steve Block
400d0825bca7fe65beaee391d30da42e937db621564Steve Block    SVGRenderStyle();
401d0825bca7fe65beaee391d30da42e937db621564Steve Block    SVGRenderStyle(const SVGRenderStyle&);
402d0825bca7fe65beaee391d30da42e937db621564Steve Block    SVGRenderStyle(CreateDefaultType); // Used to create the default style.
403d0825bca7fe65beaee391d30da42e937db621564Steve Block
404d0825bca7fe65beaee391d30da42e937db621564Steve Block    void setBitDefaults()
405d0825bca7fe65beaee391d30da42e937db621564Steve Block    {
406d0825bca7fe65beaee391d30da42e937db621564Steve Block        svg_inherited_flags._clipRule = initialClipRule();
407d0825bca7fe65beaee391d30da42e937db621564Steve Block        svg_inherited_flags._colorRendering = initialColorRendering();
408d0825bca7fe65beaee391d30da42e937db621564Steve Block        svg_inherited_flags._fillRule = initialFillRule();
409d0825bca7fe65beaee391d30da42e937db621564Steve Block        svg_inherited_flags._imageRendering = initialImageRendering();
410d0825bca7fe65beaee391d30da42e937db621564Steve Block        svg_inherited_flags._shapeRendering = initialShapeRendering();
411d0825bca7fe65beaee391d30da42e937db621564Steve Block        svg_inherited_flags._textAnchor = initialTextAnchor();
412d0825bca7fe65beaee391d30da42e937db621564Steve Block        svg_inherited_flags._capStyle = initialCapStyle();
413d0825bca7fe65beaee391d30da42e937db621564Steve Block        svg_inherited_flags._joinStyle = initialJoinStyle();
414d0825bca7fe65beaee391d30da42e937db621564Steve Block        svg_inherited_flags._colorInterpolation = initialColorInterpolation();
415d0825bca7fe65beaee391d30da42e937db621564Steve Block        svg_inherited_flags._colorInterpolationFilters = initialColorInterpolationFilters();
416d0825bca7fe65beaee391d30da42e937db621564Steve Block        svg_inherited_flags._writingMode = initialWritingMode();
417d0825bca7fe65beaee391d30da42e937db621564Steve Block        svg_inherited_flags._glyphOrientationHorizontal = initialGlyphOrientationHorizontal();
418d0825bca7fe65beaee391d30da42e937db621564Steve Block        svg_inherited_flags._glyphOrientationVertical = initialGlyphOrientationVertical();
419d0825bca7fe65beaee391d30da42e937db621564Steve Block
420d0825bca7fe65beaee391d30da42e937db621564Steve Block        svg_noninherited_flags._niflags = 0;
421d0825bca7fe65beaee391d30da42e937db621564Steve Block        svg_noninherited_flags.f._alignmentBaseline = initialAlignmentBaseline();
422d0825bca7fe65beaee391d30da42e937db621564Steve Block        svg_noninherited_flags.f._dominantBaseline = initialDominantBaseline();
423d0825bca7fe65beaee391d30da42e937db621564Steve Block        svg_noninherited_flags.f._baselineShift = initialBaselineShift();
424545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        svg_noninherited_flags.f._vectorEffect = initialVectorEffect();
425d0825bca7fe65beaee391d30da42e937db621564Steve Block    }
426d0825bca7fe65beaee391d30da42e937db621564Steve Block};
4278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore
4298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // ENABLE(SVG)
4318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // SVGRenderStyle_h
432