26530d11b9b14e008d4de73ca83a1385dda4eeec
[WebKit-https.git] / Source / WebCore / css / CSSValue.h
1 /*
2  * (C) 1999-2003 Lars Knoll (knoll@kde.org)
3  * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Library General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Library General Public License for more details.
14  *
15  * You should have received a copy of the GNU Library General Public License
16  * along with this library; see the file COPYING.LIB.  If not, write to
17  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  * Boston, MA 02110-1301, USA.
19  */
20
21 #ifndef CSSValue_h
22 #define CSSValue_h
23
24 #include "KURLHash.h"
25 #include <wtf/ListHashSet.h>
26 #include <wtf/RefCounted.h>
27 #include <wtf/RefPtr.h>
28
29 namespace WebCore {
30
31 class CSSStyleSheet;
32
33 typedef int ExceptionCode;
34
35 class CSSValue : public RefCounted<CSSValue> {
36 public:
37     enum Type {
38         CSS_INHERIT = 0,
39         CSS_PRIMITIVE_VALUE = 1,
40         CSS_VALUE_LIST = 2,
41         CSS_CUSTOM = 3,
42         CSS_INITIAL = 4
43     };
44
45     virtual ~CSSValue() { }
46
47     Type cssValueType() const;
48
49     String cssText() const;
50     void setCssText(const String&, ExceptionCode&) { } // FIXME: Not implemented.
51
52     bool isMutableValue() const { return m_isMutable; }
53     bool isPrimitiveValue() const { return m_isPrimitive; }
54     bool isValueList() const { return m_isList; }
55     bool isInitialValue() const { return m_isInitial; }
56     bool isInheritedValue() const { return m_isInherited; }
57
58     bool isBorderImageValue() const { return m_classType == BorderImageClass; }
59     bool isBorderImageSliceValue() const { return m_classType == BorderImageSliceClass; }
60     bool isCursorImageValue() const { return m_classType == CursorImageClass; }
61     bool isFontFamilyValue() const { return m_classType == FontFamilyClass; }
62     bool isFontFeatureValue() const { return m_classType == FontFeatureClass; }
63     bool isFontValue() const { return m_classType == FontClass; }
64     bool isImageGeneratorValue() const { return m_classType == CanvasClass || m_classType == CrossfadeClass || m_classType == LinearGradientClass || m_classType == RadialGradientClass; }
65     bool isImageValue() const { return m_classType == ImageClass || m_classType == CursorImageClass; }
66     bool isImplicitInitialValue() const { return m_classType == ImplicitInitialClass; }
67     bool isReflectValue() const { return m_classType == ReflectClass; }
68     bool isShadowValue() const { return m_classType == ShadowClass; }
69     bool isTimingFunctionValue() const { return m_classType == CubicBezierTimingFunctionClass || m_classType == LinearTimingFunctionClass || m_classType == StepsTimingFunctionClass; }
70     bool isWebKitCSSTransformValue() const { return m_classType == WebKitCSSTransformClass; }
71     bool isCSSLineBoxContainValue() const { return m_classType == LineBoxContainClass; }
72 #if ENABLE(CSS3_FLEXBOX)
73     bool isFlexValue() const { return m_classType == FlexClass; }
74 #endif
75 #if ENABLE(CSS_FILTERS)
76     bool isWebKitCSSFilterValue() const { return m_classType == WebKitCSSFilterClass; }
77 #endif
78 #if ENABLE(SVG)
79     bool isSVGColor() const { return m_classType == SVGColorClass || m_classType == SVGPaintClass; }
80     bool isSVGPaint() const { return m_classType == SVGPaintClass; }
81 #endif
82
83     void addSubresourceStyleURLs(ListHashSet<KURL>&, const CSSStyleSheet*);
84
85 protected:
86
87     enum ClassType {
88         AspectRatioClass,
89         BorderImageClass,
90         BorderImageSliceClass,
91         CanvasClass,
92         CursorImageClass,
93         FontFamilyClass,
94         FontFeatureClass,
95         FontClass,
96         FontFaceSrcClass,
97         FunctionClass,
98         LinearGradientClass,
99         RadialGradientClass,
100         CrossfadeClass,
101         ImageClass,
102         InheritedClass,
103         InitialClass,
104         ImplicitInitialClass,
105         PrimitiveClass,
106         ReflectClass,
107         ShadowClass,
108         LinearTimingFunctionClass,
109         CubicBezierTimingFunctionClass,
110         StepsTimingFunctionClass,
111         UnicodeRangeClass,
112         ValueListClass,
113         WebKitCSSTransformClass,
114         LineBoxContainClass,
115 #if ENABLE(CSS3_FLEXBOX)
116         FlexClass,
117 #endif
118 #if ENABLE(CSS_FILTERS)
119         WebKitCSSFilterClass,
120 #endif
121 #if ENABLE(SVG)
122         SVGColorClass,
123         SVGPaintClass,
124 #endif
125     };
126
127     ClassType classType() const { return static_cast<ClassType>(m_classType); }
128
129     CSSValue(ClassType classType)
130         : m_classType(classType)
131         , m_isPrimitive(isPrimitiveType(classType))
132         , m_isMutable(isMutableType(classType))
133         , m_isList(isListType(classType))
134         , m_isInitial(isInitialType(classType))
135         , m_isInherited(isInheritedType(classType))
136     {
137     }
138
139 private:
140     static bool isPrimitiveType(ClassType type)
141     {
142         return type == PrimitiveClass
143             || type == ImageClass
144             || type == CursorImageClass
145             || type == FontFamilyClass;
146     }
147
148     static bool isListType(ClassType type)
149     {
150         return type == ValueListClass
151 #if ENABLE(CSS_FILTERS)
152             || type == WebKitCSSFilterClass
153 #endif
154             || type == WebKitCSSTransformClass;
155     }
156
157     static bool isMutableType(ClassType type)
158     {
159 #if ENABLE(SVG)
160         return type == SVGColorClass
161             || type == SVGPaintClass;
162 #else
163         UNUSED_PARAM(type);
164         return false;
165 #endif
166     }
167
168     static bool isInheritedType(ClassType type)
169     {
170         return type == InheritedClass;
171     }
172
173     static bool isInitialType(ClassType type)
174     {
175         return type == InitialClass || type == ImplicitInitialClass;
176     }
177
178     // FIXME: This class is currently a little bloated, but that will change.
179     //        See <http://webkit.org/b/71666> for more information.
180     unsigned m_classType : 5; // ClassType
181     bool m_isPrimitive : 1;
182     bool m_isMutable : 1;
183     bool m_isList : 1;
184     bool m_isInitial : 1;
185     bool m_isInherited : 1;
186 };
187
188 } // namespace WebCore
189
190 #endif // CSSValue_h