1 //////////////////////////////////////////////////////////////////////////////
2 // Name:        CSSStyleDeclaration.h
3 // Author:      Alex Thuering
4 // Copyright:   (c) 2005 Alex Thuering
5 // Licence:     wxWindows licence
6 // Notes:       generated by genCSS.py
7 //////////////////////////////////////////////////////////////////////////////
8 
9 #ifndef WX_CSS_STYLE_DECLARATION_H
10 #define WX_CSS_STYLE_DECLARATION_H
11 
12 
13 #include "CSSValue.h"
14 #include "SVGPaint.h"
15 #include "SVGAnimatedType.h"
16 #include <wx/hashmap.h>
17 
18 enum wxCSS_PROPERTY
19 {
20   wxCSS_PROPERTY_UNKNOWN,
21   wxCSS_PROPERTY_ALIGNMENT_BASELINE,
22   wxCSS_PROPERTY_BASELINE_SHIFT,
23   wxCSS_PROPERTY_CLIP,
24   wxCSS_PROPERTY_CLIP_PATH,
25   wxCSS_PROPERTY_CLIP_RULE,
26   wxCSS_PROPERTY_COLOR,
27   wxCSS_PROPERTY_COLOR_INTERPOLATION,
28   wxCSS_PROPERTY_COLOR_INTERPOLATION_FILTERS,
29   wxCSS_PROPERTY_COLOR_PROFILE,
30   wxCSS_PROPERTY_COLOR_RENDERING,
31   wxCSS_PROPERTY_CURSOR,
32   wxCSS_PROPERTY_DIRECTION,
33   wxCSS_PROPERTY_DISPLAY,
34   wxCSS_PROPERTY_DOMINANT_BASELINE,
35   wxCSS_PROPERTY_ENABLE_BACKGROUND,
36   wxCSS_PROPERTY_FILL,
37   wxCSS_PROPERTY_FILL_OPACITY,
38   wxCSS_PROPERTY_FILL_RULE,
39   wxCSS_PROPERTY_FILTER,
40   wxCSS_PROPERTY_FLOOD_COLOR,
41   wxCSS_PROPERTY_FLOOD_OPACITY,
42   wxCSS_PROPERTY_FONT_FAMILY,
43   wxCSS_PROPERTY_FONT_SIZE,
44   wxCSS_PROPERTY_FONT_SIZE_ADJUST,
45   wxCSS_PROPERTY_FONT_STRETCH,
46   wxCSS_PROPERTY_FONT_STYLE,
47   wxCSS_PROPERTY_FONT_VARIANT,
48   wxCSS_PROPERTY_FONT_WEIGHT,
49   wxCSS_PROPERTY_GLYPH_ORIENTATION_HORIZONTAL,
50   wxCSS_PROPERTY_GLYPH_ORIENTATION_VERTICAL,
51   wxCSS_PROPERTY_IMAGE_RENDERING,
52   wxCSS_PROPERTY_KERNING,
53   wxCSS_PROPERTY_LETTER_SPACING,
54   wxCSS_PROPERTY_LIGHTING_COLOR,
55   wxCSS_PROPERTY_MARKER_END,
56   wxCSS_PROPERTY_MARKER_MID,
57   wxCSS_PROPERTY_MARKER_START,
58   wxCSS_PROPERTY_MASK,
59   wxCSS_PROPERTY_OPACITY,
60   wxCSS_PROPERTY_OVERFLOW,
61   wxCSS_PROPERTY_POINTER_EVENTS,
62   wxCSS_PROPERTY_SHAPE_RENDERING,
63   wxCSS_PROPERTY_STOP_COLOR,
64   wxCSS_PROPERTY_STOP_OPACITY,
65   wxCSS_PROPERTY_STROKE,
66   wxCSS_PROPERTY_STROKE_DASHARRAY,
67   wxCSS_PROPERTY_STROKE_DASHOFFSET,
68   wxCSS_PROPERTY_STROKE_LINECAP,
69   wxCSS_PROPERTY_STROKE_LINEJOIN,
70   wxCSS_PROPERTY_STROKE_MITERLIMIT,
71   wxCSS_PROPERTY_STROKE_OPACITY,
72   wxCSS_PROPERTY_STROKE_WIDTH,
73   wxCSS_PROPERTY_TEXT_ANCHOR,
74   wxCSS_PROPERTY_TEXT_DECORATION,
75   wxCSS_PROPERTY_TEXT_RENDERING,
76   wxCSS_PROPERTY_UNICODE_BIDI,
77   wxCSS_PROPERTY_VISIBILITY,
78   wxCSS_PROPERTY_WORD_SPACING,
79   wxCSS_PROPERTY_WRITING_MODE
80 };
81 
82 WX_DECLARE_HASH_MAP(wxCSS_PROPERTY, wxCSSValue*, wxIntegerHash, wxIntegerEqual, wxHashMapCSSValue);
83 
84 typedef wxString wxCSSStyler;
85 
86 class wxCSSStyleDeclaration: public wxHashMapCSSValue
87 {
88   public:
wxCSSStyleDeclaration()89     wxCSSStyleDeclaration() {}
wxCSSStyleDeclaration(const wxCSSStyleDeclaration & src)90     wxCSSStyleDeclaration(const wxCSSStyleDeclaration& src)
91         : wxHashMapCSSValue(src.size())
92         { Add(src); }
93     ~wxCSSStyleDeclaration();
94     wxCSSStyleDeclaration& operator=(const wxCSSStyleDeclaration& src);
95     void Add(const wxCSSStyleDeclaration& style);
96 
97   public:
98     wxString GetCSSText() const;
99     void SetCSSText(const wxString& text);
100 
GetPropertyValue(const wxString & propertyName)101     inline wxString GetPropertyValue(const wxString& propertyName) const
102     { return GetPropertyValue(GetPropertyId(propertyName)); }
103 
GetPropertyCSSValue(const wxString & propertyName)104     inline const wxCSSValue& GetPropertyCSSValue(const wxString& propertyName) const
105     { return GetPropertyCSSValue(GetPropertyId(propertyName)); }
106 
SetProperty(const wxString & propertyName,const wxString & value)107     void SetProperty(const wxString& propertyName, const wxString& value)
108     { SetProperty(GetPropertyId(propertyName), value); }
109 
SetProperty(const wxString & propertyName,const wxSVGAnimatedType & value)110     void SetProperty(const wxString& propertyName, const wxSVGAnimatedType& value)
111     { SetProperty(GetPropertyId(propertyName), value); }
112 
HasProperty(const wxString & propertyName)113     inline bool HasProperty(const wxString& propertyName) const
114     { return HasProperty(GetPropertyId(propertyName)); }
115 
RemoveProperty(const wxString & propertyName)116     inline wxString RemoveProperty(const wxString& propertyName)
117     { return RemoveProperty(GetPropertyId(propertyName)); }
118 
119   public:
GetPropertyValue(wxCSS_PROPERTY propertyId)120     inline wxString GetPropertyValue(wxCSS_PROPERTY propertyId) const
121     { const_iterator it = find(propertyId); if (it != end()) return it->second->GetCSSText(); return wxT(""); }
122 
GetPropertyCSSValue(wxCSS_PROPERTY propertyId)123     inline const wxCSSValue& GetPropertyCSSValue(wxCSS_PROPERTY propertyId) const
124     { const_iterator it = find(propertyId); if (it != end()) return *it->second; return *s_emptyCSSValue; }
125 
126     void SetProperty(wxCSS_PROPERTY propertyId, const wxString& value);
127     void SetProperty(wxCSS_PROPERTY propertyId, const wxSVGAnimatedType& value);
HasProperty(wxCSS_PROPERTY propertyId)128     inline bool HasProperty(wxCSS_PROPERTY propertyId) const { return find(propertyId) != end(); }
RemoveProperty(wxCSS_PROPERTY propertyId)129     inline wxString RemoveProperty(wxCSS_PROPERTY propertyId) { erase(propertyId); return wxT(""); }
130 
131     static wxCSS_PROPERTY GetPropertyId(const wxString& propertyName);
132     static wxString GetPropertyName(wxCSS_PROPERTY propertyId);
133 
134   public:
GetAlignmentBaseline()135     inline wxCSS_VALUE GetAlignmentBaseline() const
136     {
137       const_iterator it = find(wxCSS_PROPERTY_ALIGNMENT_BASELINE);
138       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetIdentValue() : wxCSS_VALUE_AUTO;
139     }
HasAlignmentBaseline()140     inline bool HasAlignmentBaseline() const { return HasProperty(wxCSS_PROPERTY_ALIGNMENT_BASELINE); }
SetAlignmentBaseline(wxCSS_VALUE value)141     inline void SetAlignmentBaseline(wxCSS_VALUE value)
142     {
143       iterator it = find(wxCSS_PROPERTY_ALIGNMENT_BASELINE);
144       if (it != end())
145         ((wxCSSPrimitiveValue*)it->second)->SetIdentValue(value);
146       else
147         (*this)[wxCSS_PROPERTY_ALIGNMENT_BASELINE] = new wxCSSPrimitiveValue(value);
148     }
149 
150 
GetBaselineShift()151     inline const wxCSSPrimitiveValue& GetBaselineShift() const
152     {
153       const_iterator it = find(wxCSS_PROPERTY_BASELINE_SHIFT);
154       return it != end() ? ((wxCSSPrimitiveValue&)*it->second) : *s_emptyCSSValue;
155     }
HasBaselineShift()156     inline bool HasBaselineShift() const { return HasProperty(wxCSS_PROPERTY_BASELINE_SHIFT); }
SetBaselineShift(const wxCSSPrimitiveValue & value)157     inline void SetBaselineShift(const wxCSSPrimitiveValue& value)
158     {
159       iterator it = find(wxCSS_PROPERTY_BASELINE_SHIFT);
160       if (it != end())
161       {
162         delete it->second;
163         it->second = new wxCSSPrimitiveValue(value);
164       }
165       else
166         (*this)[wxCSS_PROPERTY_BASELINE_SHIFT] = new wxCSSPrimitiveValue(value);
167     }
168 
169 
GetClip()170     inline const wxCSSPrimitiveValue& GetClip() const
171     {
172       const_iterator it = find(wxCSS_PROPERTY_CLIP);
173       return it != end() ? ((wxCSSPrimitiveValue&)*it->second) : *s_emptyCSSValue;
174     }
HasClip()175     inline bool HasClip() const { return HasProperty(wxCSS_PROPERTY_CLIP); }
SetClip(const wxCSSPrimitiveValue & value)176     inline void SetClip(const wxCSSPrimitiveValue& value)
177     {
178       iterator it = find(wxCSS_PROPERTY_CLIP);
179       if (it != end())
180       {
181         delete it->second;
182         it->second = new wxCSSPrimitiveValue(value);
183       }
184       else
185         (*this)[wxCSS_PROPERTY_CLIP] = new wxCSSPrimitiveValue(value);
186     }
187 
188 
GetClipPath()189     inline const wxCSSPrimitiveValue& GetClipPath() const
190     {
191       const_iterator it = find(wxCSS_PROPERTY_CLIP_PATH);
192       return it != end() ? ((wxCSSPrimitiveValue&)*it->second) : *s_emptyCSSValue;
193     }
HasClipPath()194     inline bool HasClipPath() const { return HasProperty(wxCSS_PROPERTY_CLIP_PATH); }
SetClipPath(const wxCSSPrimitiveValue & value)195     inline void SetClipPath(const wxCSSPrimitiveValue& value)
196     {
197       iterator it = find(wxCSS_PROPERTY_CLIP_PATH);
198       if (it != end())
199       {
200         delete it->second;
201         it->second = new wxCSSPrimitiveValue(value);
202       }
203       else
204         (*this)[wxCSS_PROPERTY_CLIP_PATH] = new wxCSSPrimitiveValue(value);
205     }
206 
207 
GetClipRule()208     inline wxCSS_VALUE GetClipRule() const
209     {
210       const_iterator it = find(wxCSS_PROPERTY_CLIP_RULE);
211       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetIdentValue() : wxCSS_VALUE_NONZERO;
212     }
HasClipRule()213     inline bool HasClipRule() const { return HasProperty(wxCSS_PROPERTY_CLIP_RULE); }
SetClipRule(wxCSS_VALUE value)214     inline void SetClipRule(wxCSS_VALUE value)
215     {
216       iterator it = find(wxCSS_PROPERTY_CLIP_RULE);
217       if (it != end())
218         ((wxCSSPrimitiveValue*)it->second)->SetIdentValue(value);
219       else
220         (*this)[wxCSS_PROPERTY_CLIP_RULE] = new wxCSSPrimitiveValue(value);
221     }
222 
223 
GetColor()224     inline wxRGBColor GetColor() const
225     {
226       const_iterator it = find(wxCSS_PROPERTY_COLOR);
227       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetRGBColorValue() : wxRGBColor();
228     }
HasColor()229     inline bool HasColor() const { return HasProperty(wxCSS_PROPERTY_COLOR); }
SetColor(const wxRGBColor & value)230     inline void SetColor(const wxRGBColor& value)
231     {
232       iterator it = find(wxCSS_PROPERTY_COLOR);
233       if (it != end())
234         ((wxCSSPrimitiveValue*)it->second)->SetRGBColorValue(value);
235       else
236         (*this)[wxCSS_PROPERTY_COLOR] = new wxCSSPrimitiveValue(value);
237     }
238 
239 
GetColorInterpolation()240     inline wxCSS_VALUE GetColorInterpolation() const
241     {
242       const_iterator it = find(wxCSS_PROPERTY_COLOR_INTERPOLATION);
243       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetIdentValue() : wxCSS_VALUE_SRGB;
244     }
HasColorInterpolation()245     inline bool HasColorInterpolation() const { return HasProperty(wxCSS_PROPERTY_COLOR_INTERPOLATION); }
SetColorInterpolation(wxCSS_VALUE value)246     inline void SetColorInterpolation(wxCSS_VALUE value)
247     {
248       iterator it = find(wxCSS_PROPERTY_COLOR_INTERPOLATION);
249       if (it != end())
250         ((wxCSSPrimitiveValue*)it->second)->SetIdentValue(value);
251       else
252         (*this)[wxCSS_PROPERTY_COLOR_INTERPOLATION] = new wxCSSPrimitiveValue(value);
253     }
254 
255 
GetColorInterpolationFilters()256     inline wxCSS_VALUE GetColorInterpolationFilters() const
257     {
258       const_iterator it = find(wxCSS_PROPERTY_COLOR_INTERPOLATION_FILTERS);
259       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetIdentValue() : wxCSS_VALUE_LINEARRGB;
260     }
HasColorInterpolationFilters()261     inline bool HasColorInterpolationFilters() const { return HasProperty(wxCSS_PROPERTY_COLOR_INTERPOLATION_FILTERS); }
SetColorInterpolationFilters(wxCSS_VALUE value)262     inline void SetColorInterpolationFilters(wxCSS_VALUE value)
263     {
264       iterator it = find(wxCSS_PROPERTY_COLOR_INTERPOLATION_FILTERS);
265       if (it != end())
266         ((wxCSSPrimitiveValue*)it->second)->SetIdentValue(value);
267       else
268         (*this)[wxCSS_PROPERTY_COLOR_INTERPOLATION_FILTERS] = new wxCSSPrimitiveValue(value);
269     }
270 
271 
GetColorProfile()272     inline const wxCSSPrimitiveValue& GetColorProfile() const
273     {
274       const_iterator it = find(wxCSS_PROPERTY_COLOR_PROFILE);
275       return it != end() ? ((wxCSSPrimitiveValue&)*it->second) : *s_emptyCSSValue;
276     }
HasColorProfile()277     inline bool HasColorProfile() const { return HasProperty(wxCSS_PROPERTY_COLOR_PROFILE); }
SetColorProfile(const wxCSSPrimitiveValue & value)278     inline void SetColorProfile(const wxCSSPrimitiveValue& value)
279     {
280       iterator it = find(wxCSS_PROPERTY_COLOR_PROFILE);
281       if (it != end())
282       {
283         delete it->second;
284         it->second = new wxCSSPrimitiveValue(value);
285       }
286       else
287         (*this)[wxCSS_PROPERTY_COLOR_PROFILE] = new wxCSSPrimitiveValue(value);
288     }
289 
290 
GetColorRendering()291     inline wxCSS_VALUE GetColorRendering() const
292     {
293       const_iterator it = find(wxCSS_PROPERTY_COLOR_RENDERING);
294       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetIdentValue() : wxCSS_VALUE_AUTO;
295     }
HasColorRendering()296     inline bool HasColorRendering() const { return HasProperty(wxCSS_PROPERTY_COLOR_RENDERING); }
SetColorRendering(wxCSS_VALUE value)297     inline void SetColorRendering(wxCSS_VALUE value)
298     {
299       iterator it = find(wxCSS_PROPERTY_COLOR_RENDERING);
300       if (it != end())
301         ((wxCSSPrimitiveValue*)it->second)->SetIdentValue(value);
302       else
303         (*this)[wxCSS_PROPERTY_COLOR_RENDERING] = new wxCSSPrimitiveValue(value);
304     }
305 
306 
GetCursor()307     inline const wxCSSPrimitiveValue& GetCursor() const
308     {
309       const_iterator it = find(wxCSS_PROPERTY_CURSOR);
310       return it != end() ? ((wxCSSPrimitiveValue&)*it->second) : *s_emptyCSSValue;
311     }
HasCursor()312     inline bool HasCursor() const { return HasProperty(wxCSS_PROPERTY_CURSOR); }
SetCursor(const wxCSSPrimitiveValue & value)313     inline void SetCursor(const wxCSSPrimitiveValue& value)
314     {
315       iterator it = find(wxCSS_PROPERTY_CURSOR);
316       if (it != end())
317       {
318         delete it->second;
319         it->second = new wxCSSPrimitiveValue(value);
320       }
321       else
322         (*this)[wxCSS_PROPERTY_CURSOR] = new wxCSSPrimitiveValue(value);
323     }
324 
325 
GetDirection()326     inline wxCSS_VALUE GetDirection() const
327     {
328       const_iterator it = find(wxCSS_PROPERTY_DIRECTION);
329       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetIdentValue() : wxCSS_VALUE_LTR;
330     }
HasDirection()331     inline bool HasDirection() const { return HasProperty(wxCSS_PROPERTY_DIRECTION); }
SetDirection(wxCSS_VALUE value)332     inline void SetDirection(wxCSS_VALUE value)
333     {
334       iterator it = find(wxCSS_PROPERTY_DIRECTION);
335       if (it != end())
336         ((wxCSSPrimitiveValue*)it->second)->SetIdentValue(value);
337       else
338         (*this)[wxCSS_PROPERTY_DIRECTION] = new wxCSSPrimitiveValue(value);
339     }
340 
341 
GetDisplay()342     inline wxCSS_VALUE GetDisplay() const
343     {
344       const_iterator it = find(wxCSS_PROPERTY_DISPLAY);
345       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetIdentValue() : wxCSS_VALUE_INLINE;
346     }
HasDisplay()347     inline bool HasDisplay() const { return HasProperty(wxCSS_PROPERTY_DISPLAY); }
SetDisplay(wxCSS_VALUE value)348     inline void SetDisplay(wxCSS_VALUE value)
349     {
350       iterator it = find(wxCSS_PROPERTY_DISPLAY);
351       if (it != end())
352         ((wxCSSPrimitiveValue*)it->second)->SetIdentValue(value);
353       else
354         (*this)[wxCSS_PROPERTY_DISPLAY] = new wxCSSPrimitiveValue(value);
355     }
356 
357 
GetDominantBaseline()358     inline wxCSS_VALUE GetDominantBaseline() const
359     {
360       const_iterator it = find(wxCSS_PROPERTY_DOMINANT_BASELINE);
361       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetIdentValue() : wxCSS_VALUE_AUTO;
362     }
HasDominantBaseline()363     inline bool HasDominantBaseline() const { return HasProperty(wxCSS_PROPERTY_DOMINANT_BASELINE); }
SetDominantBaseline(wxCSS_VALUE value)364     inline void SetDominantBaseline(wxCSS_VALUE value)
365     {
366       iterator it = find(wxCSS_PROPERTY_DOMINANT_BASELINE);
367       if (it != end())
368         ((wxCSSPrimitiveValue*)it->second)->SetIdentValue(value);
369       else
370         (*this)[wxCSS_PROPERTY_DOMINANT_BASELINE] = new wxCSSPrimitiveValue(value);
371     }
372 
373 
GetEnableBackground()374     inline wxCSS_VALUE GetEnableBackground() const
375     {
376       const_iterator it = find(wxCSS_PROPERTY_ENABLE_BACKGROUND);
377       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetIdentValue() : wxCSS_VALUE_ACCUMULATE;
378     }
HasEnableBackground()379     inline bool HasEnableBackground() const { return HasProperty(wxCSS_PROPERTY_ENABLE_BACKGROUND); }
SetEnableBackground(wxCSS_VALUE value)380     inline void SetEnableBackground(wxCSS_VALUE value)
381     {
382       iterator it = find(wxCSS_PROPERTY_ENABLE_BACKGROUND);
383       if (it != end())
384         ((wxCSSPrimitiveValue*)it->second)->SetIdentValue(value);
385       else
386         (*this)[wxCSS_PROPERTY_ENABLE_BACKGROUND] = new wxCSSPrimitiveValue(value);
387     }
388 
389 
GetFill()390     inline const wxSVGPaint& GetFill() const
391     {
392       const_iterator it = find(wxCSS_PROPERTY_FILL);
393       return it != end() ? ((wxSVGPaint&)*it->second) : *s_blackSVGPaint;
394     }
HasFill()395     inline bool HasFill() const { return HasProperty(wxCSS_PROPERTY_FILL); }
SetFill(const wxSVGPaint & value)396     inline void SetFill(const wxSVGPaint& value)
397     {
398       iterator it = find(wxCSS_PROPERTY_FILL);
399       if (it != end())
400       {
401         delete it->second;
402         it->second = new wxSVGPaint(value);
403       }
404       else
405         (*this)[wxCSS_PROPERTY_FILL] = new wxSVGPaint(value);
406     }
407 
408 
GetFillOpacity()409     inline double GetFillOpacity() const
410     {
411       const_iterator it = find(wxCSS_PROPERTY_FILL_OPACITY);
412       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetFloatValue() : 1;
413     }
HasFillOpacity()414     inline bool HasFillOpacity() const { return HasProperty(wxCSS_PROPERTY_FILL_OPACITY); }
SetFillOpacity(double value)415     inline void SetFillOpacity(double value)
416     {
417       iterator it = find(wxCSS_PROPERTY_FILL_OPACITY);
418       if (it != end())
419         ((wxCSSPrimitiveValue*)it->second)->SetFloatValue(wxCSS_NUMBER, value);
420       else
421         (*this)[wxCSS_PROPERTY_FILL_OPACITY] = new wxCSSPrimitiveValue(value);
422     }
423 
424 
GetFillRule()425     inline wxCSS_VALUE GetFillRule() const
426     {
427       const_iterator it = find(wxCSS_PROPERTY_FILL_RULE);
428       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetIdentValue() : wxCSS_VALUE_NONZERO;
429     }
HasFillRule()430     inline bool HasFillRule() const { return HasProperty(wxCSS_PROPERTY_FILL_RULE); }
SetFillRule(wxCSS_VALUE value)431     inline void SetFillRule(wxCSS_VALUE value)
432     {
433       iterator it = find(wxCSS_PROPERTY_FILL_RULE);
434       if (it != end())
435         ((wxCSSPrimitiveValue*)it->second)->SetIdentValue(value);
436       else
437         (*this)[wxCSS_PROPERTY_FILL_RULE] = new wxCSSPrimitiveValue(value);
438     }
439 
440 
GetFilter()441     inline const wxCSSPrimitiveValue& GetFilter() const
442     {
443       const_iterator it = find(wxCSS_PROPERTY_FILTER);
444       return it != end() ? ((wxCSSPrimitiveValue&)*it->second) : *s_emptyCSSValue;
445     }
HasFilter()446     inline bool HasFilter() const { return HasProperty(wxCSS_PROPERTY_FILTER); }
SetFilter(const wxCSSPrimitiveValue & value)447     inline void SetFilter(const wxCSSPrimitiveValue& value)
448     {
449       iterator it = find(wxCSS_PROPERTY_FILTER);
450       if (it != end())
451       {
452         delete it->second;
453         it->second = new wxCSSPrimitiveValue(value);
454       }
455       else
456         (*this)[wxCSS_PROPERTY_FILTER] = new wxCSSPrimitiveValue(value);
457     }
458 
459 
GetFloodColor()460     inline const wxSVGColor& GetFloodColor() const
461     {
462       const_iterator it = find(wxCSS_PROPERTY_FLOOD_COLOR);
463       return it != end() ? ((wxSVGColor&)*it->second) : *s_emptySVGColor;
464     }
HasFloodColor()465     inline bool HasFloodColor() const { return HasProperty(wxCSS_PROPERTY_FLOOD_COLOR); }
SetFloodColor(const wxSVGColor & value)466     inline void SetFloodColor(const wxSVGColor& value)
467     {
468       iterator it = find(wxCSS_PROPERTY_FLOOD_COLOR);
469       if (it != end())
470       {
471         delete it->second;
472         it->second = new wxSVGColor(value);
473       }
474       else
475         (*this)[wxCSS_PROPERTY_FLOOD_COLOR] = new wxSVGColor(value);
476     }
477 
478 
GetFloodOpacity()479     inline double GetFloodOpacity() const
480     {
481       const_iterator it = find(wxCSS_PROPERTY_FLOOD_OPACITY);
482       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetFloatValue() : 1;
483     }
HasFloodOpacity()484     inline bool HasFloodOpacity() const { return HasProperty(wxCSS_PROPERTY_FLOOD_OPACITY); }
SetFloodOpacity(double value)485     inline void SetFloodOpacity(double value)
486     {
487       iterator it = find(wxCSS_PROPERTY_FLOOD_OPACITY);
488       if (it != end())
489         ((wxCSSPrimitiveValue*)it->second)->SetFloatValue(wxCSS_NUMBER, value);
490       else
491         (*this)[wxCSS_PROPERTY_FLOOD_OPACITY] = new wxCSSPrimitiveValue(value);
492     }
493 
494 
GetFontFamily()495     inline wxString GetFontFamily() const
496     {
497       const_iterator it = find(wxCSS_PROPERTY_FONT_FAMILY);
498       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetStringValue() : wxT("");
499     }
HasFontFamily()500     inline bool HasFontFamily() const { return HasProperty(wxCSS_PROPERTY_FONT_FAMILY); }
SetFontFamily(const wxString & value)501     inline void SetFontFamily(const wxString& value)
502     {
503       iterator it = find(wxCSS_PROPERTY_FONT_FAMILY);
504       if (it != end())
505         ((wxCSSPrimitiveValue*)it->second)->SetStringValue(wxCSS_STRING, value);
506       else
507         (*this)[wxCSS_PROPERTY_FONT_FAMILY] = new wxCSSPrimitiveValue(value);
508     }
509 
510 
GetFontSize()511     inline double GetFontSize() const
512     {
513       const_iterator it = find(wxCSS_PROPERTY_FONT_SIZE);
514       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetFloatValue() : 20;
515     }
HasFontSize()516     inline bool HasFontSize() const { return HasProperty(wxCSS_PROPERTY_FONT_SIZE); }
SetFontSize(double value)517     inline void SetFontSize(double value)
518     {
519       iterator it = find(wxCSS_PROPERTY_FONT_SIZE);
520       if (it != end())
521         ((wxCSSPrimitiveValue*)it->second)->SetFloatValue(wxCSS_NUMBER, value);
522       else
523         (*this)[wxCSS_PROPERTY_FONT_SIZE] = new wxCSSPrimitiveValue(value);
524     }
525 
526 
GetFontSizeAdjust()527     inline const wxCSSPrimitiveValue& GetFontSizeAdjust() const
528     {
529       const_iterator it = find(wxCSS_PROPERTY_FONT_SIZE_ADJUST);
530       return it != end() ? ((wxCSSPrimitiveValue&)*it->second) : *s_emptyCSSValue;
531     }
HasFontSizeAdjust()532     inline bool HasFontSizeAdjust() const { return HasProperty(wxCSS_PROPERTY_FONT_SIZE_ADJUST); }
SetFontSizeAdjust(const wxCSSPrimitiveValue & value)533     inline void SetFontSizeAdjust(const wxCSSPrimitiveValue& value)
534     {
535       iterator it = find(wxCSS_PROPERTY_FONT_SIZE_ADJUST);
536       if (it != end())
537       {
538         delete it->second;
539         it->second = new wxCSSPrimitiveValue(value);
540       }
541       else
542         (*this)[wxCSS_PROPERTY_FONT_SIZE_ADJUST] = new wxCSSPrimitiveValue(value);
543     }
544 
545 
GetFontStretch()546     inline wxCSS_VALUE GetFontStretch() const
547     {
548       const_iterator it = find(wxCSS_PROPERTY_FONT_STRETCH);
549       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetIdentValue() : wxCSS_VALUE_NORMAL;
550     }
HasFontStretch()551     inline bool HasFontStretch() const { return HasProperty(wxCSS_PROPERTY_FONT_STRETCH); }
SetFontStretch(wxCSS_VALUE value)552     inline void SetFontStretch(wxCSS_VALUE value)
553     {
554       iterator it = find(wxCSS_PROPERTY_FONT_STRETCH);
555       if (it != end())
556         ((wxCSSPrimitiveValue*)it->second)->SetIdentValue(value);
557       else
558         (*this)[wxCSS_PROPERTY_FONT_STRETCH] = new wxCSSPrimitiveValue(value);
559     }
560 
561 
GetFontStyle()562     inline wxCSS_VALUE GetFontStyle() const
563     {
564       const_iterator it = find(wxCSS_PROPERTY_FONT_STYLE);
565       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetIdentValue() : wxCSS_VALUE_NORMAL;
566     }
HasFontStyle()567     inline bool HasFontStyle() const { return HasProperty(wxCSS_PROPERTY_FONT_STYLE); }
SetFontStyle(wxCSS_VALUE value)568     inline void SetFontStyle(wxCSS_VALUE value)
569     {
570       iterator it = find(wxCSS_PROPERTY_FONT_STYLE);
571       if (it != end())
572         ((wxCSSPrimitiveValue*)it->second)->SetIdentValue(value);
573       else
574         (*this)[wxCSS_PROPERTY_FONT_STYLE] = new wxCSSPrimitiveValue(value);
575     }
576 
577 
GetFontVariant()578     inline wxCSS_VALUE GetFontVariant() const
579     {
580       const_iterator it = find(wxCSS_PROPERTY_FONT_VARIANT);
581       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetIdentValue() : wxCSS_VALUE_NORMAL;
582     }
HasFontVariant()583     inline bool HasFontVariant() const { return HasProperty(wxCSS_PROPERTY_FONT_VARIANT); }
SetFontVariant(wxCSS_VALUE value)584     inline void SetFontVariant(wxCSS_VALUE value)
585     {
586       iterator it = find(wxCSS_PROPERTY_FONT_VARIANT);
587       if (it != end())
588         ((wxCSSPrimitiveValue*)it->second)->SetIdentValue(value);
589       else
590         (*this)[wxCSS_PROPERTY_FONT_VARIANT] = new wxCSSPrimitiveValue(value);
591     }
592 
593 
GetFontWeight()594     inline wxCSS_VALUE GetFontWeight() const
595     {
596       const_iterator it = find(wxCSS_PROPERTY_FONT_WEIGHT);
597       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetIdentValue() : wxCSS_VALUE_NORMAL;
598     }
HasFontWeight()599     inline bool HasFontWeight() const { return HasProperty(wxCSS_PROPERTY_FONT_WEIGHT); }
SetFontWeight(wxCSS_VALUE value)600     inline void SetFontWeight(wxCSS_VALUE value)
601     {
602       iterator it = find(wxCSS_PROPERTY_FONT_WEIGHT);
603       if (it != end())
604         ((wxCSSPrimitiveValue*)it->second)->SetIdentValue(value);
605       else
606         (*this)[wxCSS_PROPERTY_FONT_WEIGHT] = new wxCSSPrimitiveValue(value);
607     }
608 
609 
GetGlyphOrientationHorizontal()610     inline double GetGlyphOrientationHorizontal() const
611     {
612       const_iterator it = find(wxCSS_PROPERTY_GLYPH_ORIENTATION_HORIZONTAL);
613       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetFloatValue() : 0;
614     }
HasGlyphOrientationHorizontal()615     inline bool HasGlyphOrientationHorizontal() const { return HasProperty(wxCSS_PROPERTY_GLYPH_ORIENTATION_HORIZONTAL); }
SetGlyphOrientationHorizontal(double value)616     inline void SetGlyphOrientationHorizontal(double value)
617     {
618       iterator it = find(wxCSS_PROPERTY_GLYPH_ORIENTATION_HORIZONTAL);
619       if (it != end())
620         ((wxCSSPrimitiveValue*)it->second)->SetFloatValue(wxCSS_NUMBER, value);
621       else
622         (*this)[wxCSS_PROPERTY_GLYPH_ORIENTATION_HORIZONTAL] = new wxCSSPrimitiveValue(value);
623     }
624 
625 
GetGlyphOrientationVertical()626     inline const wxCSSPrimitiveValue& GetGlyphOrientationVertical() const
627     {
628       const_iterator it = find(wxCSS_PROPERTY_GLYPH_ORIENTATION_VERTICAL);
629       return it != end() ? ((wxCSSPrimitiveValue&)*it->second) : *s_emptyCSSValue;
630     }
HasGlyphOrientationVertical()631     inline bool HasGlyphOrientationVertical() const { return HasProperty(wxCSS_PROPERTY_GLYPH_ORIENTATION_VERTICAL); }
SetGlyphOrientationVertical(const wxCSSPrimitiveValue & value)632     inline void SetGlyphOrientationVertical(const wxCSSPrimitiveValue& value)
633     {
634       iterator it = find(wxCSS_PROPERTY_GLYPH_ORIENTATION_VERTICAL);
635       if (it != end())
636       {
637         delete it->second;
638         it->second = new wxCSSPrimitiveValue(value);
639       }
640       else
641         (*this)[wxCSS_PROPERTY_GLYPH_ORIENTATION_VERTICAL] = new wxCSSPrimitiveValue(value);
642     }
643 
644 
GetImageRendering()645     inline wxCSS_VALUE GetImageRendering() const
646     {
647       const_iterator it = find(wxCSS_PROPERTY_IMAGE_RENDERING);
648       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetIdentValue() : wxCSS_VALUE_AUTO;
649     }
HasImageRendering()650     inline bool HasImageRendering() const { return HasProperty(wxCSS_PROPERTY_IMAGE_RENDERING); }
SetImageRendering(wxCSS_VALUE value)651     inline void SetImageRendering(wxCSS_VALUE value)
652     {
653       iterator it = find(wxCSS_PROPERTY_IMAGE_RENDERING);
654       if (it != end())
655         ((wxCSSPrimitiveValue*)it->second)->SetIdentValue(value);
656       else
657         (*this)[wxCSS_PROPERTY_IMAGE_RENDERING] = new wxCSSPrimitiveValue(value);
658     }
659 
660 
GetKerning()661     inline const wxCSSPrimitiveValue& GetKerning() const
662     {
663       const_iterator it = find(wxCSS_PROPERTY_KERNING);
664       return it != end() ? ((wxCSSPrimitiveValue&)*it->second) : *s_emptyCSSValue;
665     }
HasKerning()666     inline bool HasKerning() const { return HasProperty(wxCSS_PROPERTY_KERNING); }
SetKerning(const wxCSSPrimitiveValue & value)667     inline void SetKerning(const wxCSSPrimitiveValue& value)
668     {
669       iterator it = find(wxCSS_PROPERTY_KERNING);
670       if (it != end())
671       {
672         delete it->second;
673         it->second = new wxCSSPrimitiveValue(value);
674       }
675       else
676         (*this)[wxCSS_PROPERTY_KERNING] = new wxCSSPrimitiveValue(value);
677     }
678 
679 
GetLetterSpacing()680     inline const wxCSSPrimitiveValue& GetLetterSpacing() const
681     {
682       const_iterator it = find(wxCSS_PROPERTY_LETTER_SPACING);
683       return it != end() ? ((wxCSSPrimitiveValue&)*it->second) : *s_emptyCSSValue;
684     }
HasLetterSpacing()685     inline bool HasLetterSpacing() const { return HasProperty(wxCSS_PROPERTY_LETTER_SPACING); }
SetLetterSpacing(const wxCSSPrimitiveValue & value)686     inline void SetLetterSpacing(const wxCSSPrimitiveValue& value)
687     {
688       iterator it = find(wxCSS_PROPERTY_LETTER_SPACING);
689       if (it != end())
690       {
691         delete it->second;
692         it->second = new wxCSSPrimitiveValue(value);
693       }
694       else
695         (*this)[wxCSS_PROPERTY_LETTER_SPACING] = new wxCSSPrimitiveValue(value);
696     }
697 
698 
GetLightingColor()699     inline const wxSVGColor& GetLightingColor() const
700     {
701       const_iterator it = find(wxCSS_PROPERTY_LIGHTING_COLOR);
702       return it != end() ? ((wxSVGColor&)*it->second) : *s_emptySVGColor;
703     }
HasLightingColor()704     inline bool HasLightingColor() const { return HasProperty(wxCSS_PROPERTY_LIGHTING_COLOR); }
SetLightingColor(const wxSVGColor & value)705     inline void SetLightingColor(const wxSVGColor& value)
706     {
707       iterator it = find(wxCSS_PROPERTY_LIGHTING_COLOR);
708       if (it != end())
709       {
710         delete it->second;
711         it->second = new wxSVGColor(value);
712       }
713       else
714         (*this)[wxCSS_PROPERTY_LIGHTING_COLOR] = new wxSVGColor(value);
715     }
716 
717 
GetMarkerEnd()718     inline const wxCSSPrimitiveValue& GetMarkerEnd() const
719     {
720       const_iterator it = find(wxCSS_PROPERTY_MARKER_END);
721       return it != end() ? ((wxCSSPrimitiveValue&)*it->second) : *s_emptyCSSValue;
722     }
HasMarkerEnd()723     inline bool HasMarkerEnd() const { return HasProperty(wxCSS_PROPERTY_MARKER_END); }
SetMarkerEnd(const wxCSSPrimitiveValue & value)724     inline void SetMarkerEnd(const wxCSSPrimitiveValue& value)
725     {
726       iterator it = find(wxCSS_PROPERTY_MARKER_END);
727       if (it != end())
728       {
729         delete it->second;
730         it->second = new wxCSSPrimitiveValue(value);
731       }
732       else
733         (*this)[wxCSS_PROPERTY_MARKER_END] = new wxCSSPrimitiveValue(value);
734     }
735 
736 
GetMarkerMid()737     inline const wxCSSPrimitiveValue& GetMarkerMid() const
738     {
739       const_iterator it = find(wxCSS_PROPERTY_MARKER_MID);
740       return it != end() ? ((wxCSSPrimitiveValue&)*it->second) : *s_emptyCSSValue;
741     }
HasMarkerMid()742     inline bool HasMarkerMid() const { return HasProperty(wxCSS_PROPERTY_MARKER_MID); }
SetMarkerMid(const wxCSSPrimitiveValue & value)743     inline void SetMarkerMid(const wxCSSPrimitiveValue& value)
744     {
745       iterator it = find(wxCSS_PROPERTY_MARKER_MID);
746       if (it != end())
747       {
748         delete it->second;
749         it->second = new wxCSSPrimitiveValue(value);
750       }
751       else
752         (*this)[wxCSS_PROPERTY_MARKER_MID] = new wxCSSPrimitiveValue(value);
753     }
754 
755 
GetMarkerStart()756     inline const wxCSSPrimitiveValue& GetMarkerStart() const
757     {
758       const_iterator it = find(wxCSS_PROPERTY_MARKER_START);
759       return it != end() ? ((wxCSSPrimitiveValue&)*it->second) : *s_emptyCSSValue;
760     }
HasMarkerStart()761     inline bool HasMarkerStart() const { return HasProperty(wxCSS_PROPERTY_MARKER_START); }
SetMarkerStart(const wxCSSPrimitiveValue & value)762     inline void SetMarkerStart(const wxCSSPrimitiveValue& value)
763     {
764       iterator it = find(wxCSS_PROPERTY_MARKER_START);
765       if (it != end())
766       {
767         delete it->second;
768         it->second = new wxCSSPrimitiveValue(value);
769       }
770       else
771         (*this)[wxCSS_PROPERTY_MARKER_START] = new wxCSSPrimitiveValue(value);
772     }
773 
774 
GetMask()775     inline const wxCSSPrimitiveValue& GetMask() const
776     {
777       const_iterator it = find(wxCSS_PROPERTY_MASK);
778       return it != end() ? ((wxCSSPrimitiveValue&)*it->second) : *s_emptyCSSValue;
779     }
HasMask()780     inline bool HasMask() const { return HasProperty(wxCSS_PROPERTY_MASK); }
SetMask(const wxCSSPrimitiveValue & value)781     inline void SetMask(const wxCSSPrimitiveValue& value)
782     {
783       iterator it = find(wxCSS_PROPERTY_MASK);
784       if (it != end())
785       {
786         delete it->second;
787         it->second = new wxCSSPrimitiveValue(value);
788       }
789       else
790         (*this)[wxCSS_PROPERTY_MASK] = new wxCSSPrimitiveValue(value);
791     }
792 
793 
GetOpacity()794     inline double GetOpacity() const
795     {
796       const_iterator it = find(wxCSS_PROPERTY_OPACITY);
797       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetFloatValue() : 1;
798     }
HasOpacity()799     inline bool HasOpacity() const { return HasProperty(wxCSS_PROPERTY_OPACITY); }
SetOpacity(double value)800     inline void SetOpacity(double value)
801     {
802       iterator it = find(wxCSS_PROPERTY_OPACITY);
803       if (it != end())
804         ((wxCSSPrimitiveValue*)it->second)->SetFloatValue(wxCSS_NUMBER, value);
805       else
806         (*this)[wxCSS_PROPERTY_OPACITY] = new wxCSSPrimitiveValue(value);
807     }
808 
809 
GetOverflow()810     inline wxCSS_VALUE GetOverflow() const
811     {
812       const_iterator it = find(wxCSS_PROPERTY_OVERFLOW);
813       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetIdentValue() : wxCSS_VALUE_AUTO;
814     }
HasOverflow()815     inline bool HasOverflow() const { return HasProperty(wxCSS_PROPERTY_OVERFLOW); }
SetOverflow(wxCSS_VALUE value)816     inline void SetOverflow(wxCSS_VALUE value)
817     {
818       iterator it = find(wxCSS_PROPERTY_OVERFLOW);
819       if (it != end())
820         ((wxCSSPrimitiveValue*)it->second)->SetIdentValue(value);
821       else
822         (*this)[wxCSS_PROPERTY_OVERFLOW] = new wxCSSPrimitiveValue(value);
823     }
824 
825 
GetPointerEvents()826     inline wxCSS_VALUE GetPointerEvents() const
827     {
828       const_iterator it = find(wxCSS_PROPERTY_POINTER_EVENTS);
829       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetIdentValue() : wxCSS_VALUE_VISIBLEPAINTED;
830     }
HasPointerEvents()831     inline bool HasPointerEvents() const { return HasProperty(wxCSS_PROPERTY_POINTER_EVENTS); }
SetPointerEvents(wxCSS_VALUE value)832     inline void SetPointerEvents(wxCSS_VALUE value)
833     {
834       iterator it = find(wxCSS_PROPERTY_POINTER_EVENTS);
835       if (it != end())
836         ((wxCSSPrimitiveValue*)it->second)->SetIdentValue(value);
837       else
838         (*this)[wxCSS_PROPERTY_POINTER_EVENTS] = new wxCSSPrimitiveValue(value);
839     }
840 
841 
GetShapeRendering()842     inline wxCSS_VALUE GetShapeRendering() const
843     {
844       const_iterator it = find(wxCSS_PROPERTY_SHAPE_RENDERING);
845       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetIdentValue() : wxCSS_VALUE_AUTO;
846     }
HasShapeRendering()847     inline bool HasShapeRendering() const { return HasProperty(wxCSS_PROPERTY_SHAPE_RENDERING); }
SetShapeRendering(wxCSS_VALUE value)848     inline void SetShapeRendering(wxCSS_VALUE value)
849     {
850       iterator it = find(wxCSS_PROPERTY_SHAPE_RENDERING);
851       if (it != end())
852         ((wxCSSPrimitiveValue*)it->second)->SetIdentValue(value);
853       else
854         (*this)[wxCSS_PROPERTY_SHAPE_RENDERING] = new wxCSSPrimitiveValue(value);
855     }
856 
857 
GetStopColor()858     inline const wxSVGColor& GetStopColor() const
859     {
860       const_iterator it = find(wxCSS_PROPERTY_STOP_COLOR);
861       return it != end() ? ((wxSVGColor&)*it->second) : *s_emptySVGColor;
862     }
HasStopColor()863     inline bool HasStopColor() const { return HasProperty(wxCSS_PROPERTY_STOP_COLOR); }
SetStopColor(const wxSVGColor & value)864     inline void SetStopColor(const wxSVGColor& value)
865     {
866       iterator it = find(wxCSS_PROPERTY_STOP_COLOR);
867       if (it != end())
868       {
869         delete it->second;
870         it->second = new wxSVGColor(value);
871       }
872       else
873         (*this)[wxCSS_PROPERTY_STOP_COLOR] = new wxSVGColor(value);
874     }
875 
876 
GetStopOpacity()877     inline double GetStopOpacity() const
878     {
879       const_iterator it = find(wxCSS_PROPERTY_STOP_OPACITY);
880       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetFloatValue() : 1;
881     }
HasStopOpacity()882     inline bool HasStopOpacity() const { return HasProperty(wxCSS_PROPERTY_STOP_OPACITY); }
SetStopOpacity(double value)883     inline void SetStopOpacity(double value)
884     {
885       iterator it = find(wxCSS_PROPERTY_STOP_OPACITY);
886       if (it != end())
887         ((wxCSSPrimitiveValue*)it->second)->SetFloatValue(wxCSS_NUMBER, value);
888       else
889         (*this)[wxCSS_PROPERTY_STOP_OPACITY] = new wxCSSPrimitiveValue(value);
890     }
891 
892 
GetStroke()893     inline const wxSVGPaint& GetStroke() const
894     {
895       const_iterator it = find(wxCSS_PROPERTY_STROKE);
896       return it != end() ? ((wxSVGPaint&)*it->second) : *s_emptySVGPaint;
897     }
HasStroke()898     inline bool HasStroke() const { return HasProperty(wxCSS_PROPERTY_STROKE); }
SetStroke(const wxSVGPaint & value)899     inline void SetStroke(const wxSVGPaint& value)
900     {
901       iterator it = find(wxCSS_PROPERTY_STROKE);
902       if (it != end())
903       {
904         delete it->second;
905         it->second = new wxSVGPaint(value);
906       }
907       else
908         (*this)[wxCSS_PROPERTY_STROKE] = new wxSVGPaint(value);
909     }
910 
911 
GetStrokeDasharray()912     inline const wxCSSValueList& GetStrokeDasharray() const
913     {
914       const_iterator it = find(wxCSS_PROPERTY_STROKE_DASHARRAY);
915       return it != end() ? ((wxCSSValueList&)*it->second) : *s_emptyValueList;
916     }
HasStrokeDasharray()917     inline bool HasStrokeDasharray() const { return HasProperty(wxCSS_PROPERTY_STROKE_DASHARRAY); }
SetStrokeDasharray(const wxCSSValueList & value)918     inline void SetStrokeDasharray(const wxCSSValueList& value)
919     {
920       iterator it = find(wxCSS_PROPERTY_STROKE_DASHARRAY);
921       if (it != end())
922       {
923         delete it->second;
924         it->second = new wxCSSValueList(value);
925       }
926       else
927         (*this)[wxCSS_PROPERTY_STROKE_DASHARRAY] = new wxCSSValueList(value);
928     }
929 
930 
GetStrokeDashoffset()931     inline double GetStrokeDashoffset() const
932     {
933       const_iterator it = find(wxCSS_PROPERTY_STROKE_DASHOFFSET);
934       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetFloatValue() : 0;
935     }
HasStrokeDashoffset()936     inline bool HasStrokeDashoffset() const { return HasProperty(wxCSS_PROPERTY_STROKE_DASHOFFSET); }
SetStrokeDashoffset(double value)937     inline void SetStrokeDashoffset(double value)
938     {
939       iterator it = find(wxCSS_PROPERTY_STROKE_DASHOFFSET);
940       if (it != end())
941         ((wxCSSPrimitiveValue*)it->second)->SetFloatValue(wxCSS_NUMBER, value);
942       else
943         (*this)[wxCSS_PROPERTY_STROKE_DASHOFFSET] = new wxCSSPrimitiveValue(value);
944     }
945 
946 
GetStrokeLinecap()947     inline wxCSS_VALUE GetStrokeLinecap() const
948     {
949       const_iterator it = find(wxCSS_PROPERTY_STROKE_LINECAP);
950       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetIdentValue() : wxCSS_VALUE_BUTT;
951     }
HasStrokeLinecap()952     inline bool HasStrokeLinecap() const { return HasProperty(wxCSS_PROPERTY_STROKE_LINECAP); }
SetStrokeLinecap(wxCSS_VALUE value)953     inline void SetStrokeLinecap(wxCSS_VALUE value)
954     {
955       iterator it = find(wxCSS_PROPERTY_STROKE_LINECAP);
956       if (it != end())
957         ((wxCSSPrimitiveValue*)it->second)->SetIdentValue(value);
958       else
959         (*this)[wxCSS_PROPERTY_STROKE_LINECAP] = new wxCSSPrimitiveValue(value);
960     }
961 
962 
GetStrokeLinejoin()963     inline wxCSS_VALUE GetStrokeLinejoin() const
964     {
965       const_iterator it = find(wxCSS_PROPERTY_STROKE_LINEJOIN);
966       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetIdentValue() : wxCSS_VALUE_MITER;
967     }
HasStrokeLinejoin()968     inline bool HasStrokeLinejoin() const { return HasProperty(wxCSS_PROPERTY_STROKE_LINEJOIN); }
SetStrokeLinejoin(wxCSS_VALUE value)969     inline void SetStrokeLinejoin(wxCSS_VALUE value)
970     {
971       iterator it = find(wxCSS_PROPERTY_STROKE_LINEJOIN);
972       if (it != end())
973         ((wxCSSPrimitiveValue*)it->second)->SetIdentValue(value);
974       else
975         (*this)[wxCSS_PROPERTY_STROKE_LINEJOIN] = new wxCSSPrimitiveValue(value);
976     }
977 
978 
GetStrokeMiterlimit()979     inline double GetStrokeMiterlimit() const
980     {
981       const_iterator it = find(wxCSS_PROPERTY_STROKE_MITERLIMIT);
982       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetFloatValue() : 4;
983     }
HasStrokeMiterlimit()984     inline bool HasStrokeMiterlimit() const { return HasProperty(wxCSS_PROPERTY_STROKE_MITERLIMIT); }
SetStrokeMiterlimit(double value)985     inline void SetStrokeMiterlimit(double value)
986     {
987       iterator it = find(wxCSS_PROPERTY_STROKE_MITERLIMIT);
988       if (it != end())
989         ((wxCSSPrimitiveValue*)it->second)->SetFloatValue(wxCSS_NUMBER, value);
990       else
991         (*this)[wxCSS_PROPERTY_STROKE_MITERLIMIT] = new wxCSSPrimitiveValue(value);
992     }
993 
994 
GetStrokeOpacity()995     inline double GetStrokeOpacity() const
996     {
997       const_iterator it = find(wxCSS_PROPERTY_STROKE_OPACITY);
998       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetFloatValue() : 1;
999     }
HasStrokeOpacity()1000     inline bool HasStrokeOpacity() const { return HasProperty(wxCSS_PROPERTY_STROKE_OPACITY); }
SetStrokeOpacity(double value)1001     inline void SetStrokeOpacity(double value)
1002     {
1003       iterator it = find(wxCSS_PROPERTY_STROKE_OPACITY);
1004       if (it != end())
1005         ((wxCSSPrimitiveValue*)it->second)->SetFloatValue(wxCSS_NUMBER, value);
1006       else
1007         (*this)[wxCSS_PROPERTY_STROKE_OPACITY] = new wxCSSPrimitiveValue(value);
1008     }
1009 
1010 
GetStrokeWidth()1011     inline double GetStrokeWidth() const
1012     {
1013       const_iterator it = find(wxCSS_PROPERTY_STROKE_WIDTH);
1014       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetFloatValue() : 1;
1015     }
HasStrokeWidth()1016     inline bool HasStrokeWidth() const { return HasProperty(wxCSS_PROPERTY_STROKE_WIDTH); }
SetStrokeWidth(double value)1017     inline void SetStrokeWidth(double value)
1018     {
1019       iterator it = find(wxCSS_PROPERTY_STROKE_WIDTH);
1020       if (it != end())
1021         ((wxCSSPrimitiveValue*)it->second)->SetFloatValue(wxCSS_NUMBER, value);
1022       else
1023         (*this)[wxCSS_PROPERTY_STROKE_WIDTH] = new wxCSSPrimitiveValue(value);
1024     }
1025 
1026 
GetTextAnchor()1027     inline wxCSS_VALUE GetTextAnchor() const
1028     {
1029       const_iterator it = find(wxCSS_PROPERTY_TEXT_ANCHOR);
1030       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetIdentValue() : wxCSS_VALUE_START;
1031     }
HasTextAnchor()1032     inline bool HasTextAnchor() const { return HasProperty(wxCSS_PROPERTY_TEXT_ANCHOR); }
SetTextAnchor(wxCSS_VALUE value)1033     inline void SetTextAnchor(wxCSS_VALUE value)
1034     {
1035       iterator it = find(wxCSS_PROPERTY_TEXT_ANCHOR);
1036       if (it != end())
1037         ((wxCSSPrimitiveValue*)it->second)->SetIdentValue(value);
1038       else
1039         (*this)[wxCSS_PROPERTY_TEXT_ANCHOR] = new wxCSSPrimitiveValue(value);
1040     }
1041 
1042 
GetTextDecoration()1043     inline wxCSS_VALUE GetTextDecoration() const
1044     {
1045       const_iterator it = find(wxCSS_PROPERTY_TEXT_DECORATION);
1046       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetIdentValue() : wxCSS_VALUE_NONE;
1047     }
HasTextDecoration()1048     inline bool HasTextDecoration() const { return HasProperty(wxCSS_PROPERTY_TEXT_DECORATION); }
SetTextDecoration(wxCSS_VALUE value)1049     inline void SetTextDecoration(wxCSS_VALUE value)
1050     {
1051       iterator it = find(wxCSS_PROPERTY_TEXT_DECORATION);
1052       if (it != end())
1053         ((wxCSSPrimitiveValue*)it->second)->SetIdentValue(value);
1054       else
1055         (*this)[wxCSS_PROPERTY_TEXT_DECORATION] = new wxCSSPrimitiveValue(value);
1056     }
1057 
1058 
GetTextRendering()1059     inline wxCSS_VALUE GetTextRendering() const
1060     {
1061       const_iterator it = find(wxCSS_PROPERTY_TEXT_RENDERING);
1062       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetIdentValue() : wxCSS_VALUE_AUTO;
1063     }
HasTextRendering()1064     inline bool HasTextRendering() const { return HasProperty(wxCSS_PROPERTY_TEXT_RENDERING); }
SetTextRendering(wxCSS_VALUE value)1065     inline void SetTextRendering(wxCSS_VALUE value)
1066     {
1067       iterator it = find(wxCSS_PROPERTY_TEXT_RENDERING);
1068       if (it != end())
1069         ((wxCSSPrimitiveValue*)it->second)->SetIdentValue(value);
1070       else
1071         (*this)[wxCSS_PROPERTY_TEXT_RENDERING] = new wxCSSPrimitiveValue(value);
1072     }
1073 
1074 
GetUnicodeBidi()1075     inline wxCSS_VALUE GetUnicodeBidi() const
1076     {
1077       const_iterator it = find(wxCSS_PROPERTY_UNICODE_BIDI);
1078       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetIdentValue() : wxCSS_VALUE_NORMAL;
1079     }
HasUnicodeBidi()1080     inline bool HasUnicodeBidi() const { return HasProperty(wxCSS_PROPERTY_UNICODE_BIDI); }
SetUnicodeBidi(wxCSS_VALUE value)1081     inline void SetUnicodeBidi(wxCSS_VALUE value)
1082     {
1083       iterator it = find(wxCSS_PROPERTY_UNICODE_BIDI);
1084       if (it != end())
1085         ((wxCSSPrimitiveValue*)it->second)->SetIdentValue(value);
1086       else
1087         (*this)[wxCSS_PROPERTY_UNICODE_BIDI] = new wxCSSPrimitiveValue(value);
1088     }
1089 
1090 
GetVisibility()1091     inline wxCSS_VALUE GetVisibility() const
1092     {
1093       const_iterator it = find(wxCSS_PROPERTY_VISIBILITY);
1094       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetIdentValue() : wxCSS_VALUE_VISIBLE;
1095     }
HasVisibility()1096     inline bool HasVisibility() const { return HasProperty(wxCSS_PROPERTY_VISIBILITY); }
SetVisibility(wxCSS_VALUE value)1097     inline void SetVisibility(wxCSS_VALUE value)
1098     {
1099       iterator it = find(wxCSS_PROPERTY_VISIBILITY);
1100       if (it != end())
1101         ((wxCSSPrimitiveValue*)it->second)->SetIdentValue(value);
1102       else
1103         (*this)[wxCSS_PROPERTY_VISIBILITY] = new wxCSSPrimitiveValue(value);
1104     }
1105 
1106 
GetWordSpacing()1107     inline const wxCSSPrimitiveValue& GetWordSpacing() const
1108     {
1109       const_iterator it = find(wxCSS_PROPERTY_WORD_SPACING);
1110       return it != end() ? ((wxCSSPrimitiveValue&)*it->second) : *s_emptyCSSValue;
1111     }
HasWordSpacing()1112     inline bool HasWordSpacing() const { return HasProperty(wxCSS_PROPERTY_WORD_SPACING); }
SetWordSpacing(const wxCSSPrimitiveValue & value)1113     inline void SetWordSpacing(const wxCSSPrimitiveValue& value)
1114     {
1115       iterator it = find(wxCSS_PROPERTY_WORD_SPACING);
1116       if (it != end())
1117       {
1118         delete it->second;
1119         it->second = new wxCSSPrimitiveValue(value);
1120       }
1121       else
1122         (*this)[wxCSS_PROPERTY_WORD_SPACING] = new wxCSSPrimitiveValue(value);
1123     }
1124 
1125 
GetWritingMode()1126     inline wxCSS_VALUE GetWritingMode() const
1127     {
1128       const_iterator it = find(wxCSS_PROPERTY_WRITING_MODE);
1129       return it != end() ? ((wxCSSPrimitiveValue&)*it->second).GetIdentValue() : wxCSS_VALUE_LR_TB;
1130     }
HasWritingMode()1131     inline bool HasWritingMode() const { return HasProperty(wxCSS_PROPERTY_WRITING_MODE); }
SetWritingMode(wxCSS_VALUE value)1132     inline void SetWritingMode(wxCSS_VALUE value)
1133     {
1134       iterator it = find(wxCSS_PROPERTY_WRITING_MODE);
1135       if (it != end())
1136         ((wxCSSPrimitiveValue*)it->second)->SetIdentValue(value);
1137       else
1138         (*this)[wxCSS_PROPERTY_WRITING_MODE] = new wxCSSPrimitiveValue(value);
1139     }
1140 
1141 
1142   protected:
1143     static wxCSSPrimitiveValue* s_emptyCSSValue;
1144     static wxSVGColor* s_emptySVGColor;
1145     static wxSVGPaint* s_emptySVGPaint;
1146     static wxSVGPaint* s_blackSVGPaint;
1147     static wxCSSValueList* s_emptyValueList;
1148 
1149   public:
1150     static double ParseNumber(const wxString& value);
1151     static wxRGBColor ParseColor(const wxString& value);
1152     static void ParseSVGPaint(wxSVGPaint& paint, const wxString& value);
1153 };
1154 
1155 /* this class copy only references of css values */
1156 class wxCSSStyleRef: public wxCSSStyleDeclaration
1157 {
1158   public:
wxCSSStyleRef()1159     wxCSSStyleRef() {}
wxCSSStyleRef(const wxCSSStyleDeclaration & src)1160     wxCSSStyleRef(const wxCSSStyleDeclaration& src) { Add(src); }
1161     ~wxCSSStyleRef();
1162     void Add(const wxCSSStyleDeclaration& style);
1163 };
1164 
1165 
1166 #endif // WX_CSS_STYLE_DECLARATION_H
1167