Remove excessive include directives from WebCore/css
[WebKit-https.git] / Source / WebCore / css / CSSComputedStyleDeclaration.h
1 /*
2  * Copyright (C) 2004 Zack Rusin <zack@kde.org>
3  * Copyright (C) 2004, 2005, 2006, 2008, 2012, 2013 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 Lesser 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  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18  * 02110-1301  USA
19  */
20
21 #pragma once
22
23 #include "CSSStyleDeclaration.h"
24 #include "RenderStyleConstants.h"
25 #include "SVGRenderStyleDefs.h"
26 #include "TextFlags.h"
27 #include <wtf/RefPtr.h>
28 #include <wtf/text/WTFString.h>
29
30 namespace WebCore {
31
32 class CSSFontStyleValue;
33 class CSSPrimitiveValue;
34 class CSSValueList;
35 class Color;
36 class Element;
37 class FilterOperations;
38 class FontSelectionValue;
39 class MutableStyleProperties;
40 class Node;
41 class RenderObject;
42 class RenderStyle;
43 class SVGPaint;
44 class ShadowData;
45 class StyleProperties;
46 class StylePropertyShorthand;
47
48 enum EUpdateLayout { DoNotUpdateLayout = false, UpdateLayout = true };
49
50 enum AdjustPixelValuesForComputedStyle { AdjustPixelValues, DoNotAdjustPixelValues };
51
52 class ComputedStyleExtractor {
53 public:
54     ComputedStyleExtractor(Node*, bool allowVisitedStyle = false, PseudoId = NOPSEUDO);
55     ComputedStyleExtractor(Element*, bool allowVisitedStyle = false, PseudoId = NOPSEUDO);
56
57     RefPtr<CSSValue> propertyValue(CSSPropertyID, EUpdateLayout = UpdateLayout);
58     String customPropertyText(const String& propertyName);
59     RefPtr<CSSValue> customPropertyValue(const String& propertyName);
60
61     // Helper methods for HTML editing.
62     Ref<MutableStyleProperties> copyPropertiesInSet(const CSSPropertyID* set, unsigned length);
63     Ref<MutableStyleProperties> copyProperties();
64     RefPtr<CSSPrimitiveValue> getFontSizeCSSValuePreferringKeyword();
65     bool useFixedFontDefaultSize();
66     bool propertyMatches(CSSPropertyID, const CSSValue*);
67
68     static Ref<CSSValue> valueForFilter(const RenderStyle&, const FilterOperations&, AdjustPixelValuesForComputedStyle = AdjustPixelValues);
69
70     static Ref<CSSPrimitiveValue> fontNonKeywordWeightFromStyleValue(FontSelectionValue);
71     static Ref<CSSPrimitiveValue> fontWeightFromStyleValue(FontSelectionValue);
72     static Ref<CSSPrimitiveValue> fontNonKeywordStretchFromStyleValue(FontSelectionValue);
73     static Ref<CSSPrimitiveValue> fontStretchFromStyleValue(FontSelectionValue);
74     static Ref<CSSFontStyleValue> fontNonKeywordStyleFromStyleValue(FontSelectionValue);
75     static Ref<CSSFontStyleValue> fontStyleFromStyleValue(FontSelectionValue, FontStyleAxis);
76
77 private:
78     // The styled element is either the element passed into computedPropertyValue, or the
79     // PseudoElement for :before and :after if they exist.
80     Element* styledElement();
81
82     RefPtr<CSSValue> svgPropertyValue(CSSPropertyID, EUpdateLayout);
83     RefPtr<CSSValue> adjustSVGPaintForCurrentColor(SVGPaintType, const String& url, const Color&, const Color& currentColor) const;
84     static Ref<CSSValue> valueForShadow(const ShadowData*, CSSPropertyID, const RenderStyle&, AdjustPixelValuesForComputedStyle = AdjustPixelValues);
85     RefPtr<CSSPrimitiveValue> currentColorOrValidColor(const RenderStyle*, const Color&) const;
86
87     RefPtr<CSSValueList> getCSSPropertyValuesForShorthandProperties(const StylePropertyShorthand&);
88     RefPtr<CSSValueList> getCSSPropertyValuesForSidesShorthand(const StylePropertyShorthand&);
89     Ref<CSSValueList> getBackgroundShorthandValue();
90     RefPtr<CSSValueList> getCSSPropertyValuesForGridShorthand(const StylePropertyShorthand&);
91
92     RefPtr<Element> m_element;
93     PseudoId m_pseudoElementSpecifier;
94     bool m_allowVisitedStyle;
95 };
96
97 class CSSComputedStyleDeclaration final : public CSSStyleDeclaration {
98 public:
99     static Ref<CSSComputedStyleDeclaration> create(Element& element, bool allowVisitedStyle = false, const String& pseudoElementName = String())
100     {
101         return adoptRef(*new CSSComputedStyleDeclaration(element, allowVisitedStyle, pseudoElementName));
102     }
103     virtual ~CSSComputedStyleDeclaration();
104
105     WEBCORE_EXPORT void ref() final;
106     WEBCORE_EXPORT void deref() final;
107
108     String getPropertyValue(CSSPropertyID) const;
109
110 private:
111     WEBCORE_EXPORT CSSComputedStyleDeclaration(Element&, bool allowVisitedStyle, const String&);
112
113     // CSSOM functions. Don't make these public.
114     CSSRule* parentRule() const final;
115     unsigned length() const final;
116     String item(unsigned index) const final;
117     RefPtr<DeprecatedCSSOMValue> getPropertyCSSValue(const String& propertyName) final;
118     String getPropertyValue(const String& propertyName) final;
119     String getPropertyPriority(const String& propertyName) final;
120     String getPropertyShorthand(const String& propertyName) final;
121     bool isPropertyImplicit(const String& propertyName) final;
122     ExceptionOr<void> setProperty(const String& propertyName, const String& value, const String& priority) final;
123     ExceptionOr<String> removeProperty(const String& propertyName) final;
124     String cssText() const final;
125     ExceptionOr<void> setCssText(const String&) final;
126     RefPtr<CSSValue> getPropertyCSSValueInternal(CSSPropertyID) final;
127     String getPropertyValueInternal(CSSPropertyID) final;
128     ExceptionOr<bool> setPropertyInternal(CSSPropertyID, const String& value, bool important) final;
129     Ref<MutableStyleProperties> copyProperties() const final;
130
131     RefPtr<CSSValue> getPropertyCSSValue(CSSPropertyID, EUpdateLayout = UpdateLayout) const;
132
133     mutable Ref<Element> m_element;
134     PseudoId m_pseudoElementSpecifier;
135     bool m_allowVisitedStyle;
136     unsigned m_refCount;
137 };
138
139 } // namespace WebCore