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