5f7c236365887ed3d8dded89b723120b24bd1913
[WebKit-https.git] / Source / WebCore / rendering / style / StyleRareInheritedData.h
1 /*
2  * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
3  *           (C) 2000 Antti Koivisto (koivisto@kde.org)
4  *           (C) 2000 Dirk Mueller (mueller@kde.org)
5  * Copyright (C) 2003, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
6  * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com)
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Library General Public
10  * License as published by the Free Software Foundation; either
11  * version 2 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Library General Public License for more details.
17  *
18  * You should have received a copy of the GNU Library General Public License
19  * along with this library; see the file COPYING.LIB.  If not, write to
20  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21  * Boston, MA 02110-1301, USA.
22  *
23  */
24
25 #ifndef StyleRareInheritedData_h
26 #define StyleRareInheritedData_h
27
28 #include "Color.h"
29 #include "DataRef.h"
30 #include "Length.h"
31 #include "StyleCustomPropertyData.h"
32 #include <wtf/RefCounted.h>
33 #include <wtf/PassRefPtr.h>
34 #include <wtf/text/AtomicString.h>
35
36 #if ENABLE(IOS_TEXT_AUTOSIZING)
37 #include "TextSizeAdjustment.h"
38 #endif
39
40 namespace WebCore {
41
42 class CursorList;
43 class QuotesData;
44 class ShadowData;
45 class StyleImage;
46
47 // This struct is for rarely used inherited CSS3, CSS2, and WebKit-specific properties.
48 // By grouping them together, we save space, and only allocate this object when someone
49 // actually uses one of these properties.
50 class StyleRareInheritedData : public RefCounted<StyleRareInheritedData> {
51 public:
52     static Ref<StyleRareInheritedData> create() { return adoptRef(*new StyleRareInheritedData); }
53     Ref<StyleRareInheritedData> copy() const;
54     ~StyleRareInheritedData();
55
56     bool operator==(const StyleRareInheritedData& o) const;
57     bool operator!=(const StyleRareInheritedData& o) const
58     {
59         return !(*this == o);
60     }
61
62     RefPtr<StyleImage> listStyleImage;
63
64     Color textStrokeColor;
65     float textStrokeWidth;
66     Color textFillColor;
67     Color textEmphasisColor;
68     
69     Color visitedLinkTextStrokeColor;
70     Color visitedLinkTextFillColor;
71     Color visitedLinkTextEmphasisColor;    
72
73     std::unique_ptr<ShadowData> textShadow; // Our text shadow information for shadowed text drawing.
74     
75     RefPtr<CursorList> cursorData;
76     Length indent;
77     float m_effectiveZoom;
78     
79     Length wordSpacing;
80
81     DataRef<StyleCustomPropertyData> m_customProperties;
82
83     // Paged media properties.
84     short widows;
85     short orphans;
86     unsigned m_hasAutoWidows : 1;
87     unsigned m_hasAutoOrphans : 1;
88     
89     unsigned textSecurity : 2; // ETextSecurity
90     unsigned userModify : 2; // EUserModify (editing)
91     unsigned wordBreak : 2; // EWordBreak
92     unsigned overflowWrap : 1; // EOverflowWrap
93     unsigned nbspMode : 1; // ENBSPMode
94     unsigned lineBreak : 3; // LineBreak
95     unsigned userSelect : 2; // EUserSelect
96     unsigned colorSpace : 1; // ColorSpace
97     unsigned speak : 3; // ESpeak
98     unsigned hyphens : 2; // Hyphens
99     unsigned textEmphasisFill : 1; // TextEmphasisFill
100     unsigned textEmphasisMark : 3; // TextEmphasisMark
101     unsigned textEmphasisPosition : 4; // TextEmphasisPosition
102     unsigned m_textOrientation : 2; // TextOrientation
103 #if ENABLE(CSS3_TEXT)
104     unsigned m_textIndentLine : 1; // TextIndentLine
105     unsigned m_textIndentType : 1; // TextIndentType
106 #endif
107     unsigned m_lineBoxContain: 7; // LineBoxContain
108     // CSS Image Values Level 3
109 #if ENABLE(CSS_IMAGE_ORIENTATION)
110     unsigned m_imageOrientation : 4; // ImageOrientationEnum
111 #endif
112     unsigned m_imageRendering : 3; // EImageRendering
113     unsigned m_lineSnap : 2; // LineSnap
114     unsigned m_lineAlign : 1; // LineAlign
115 #if ENABLE(ACCELERATED_OVERFLOW_SCROLLING)
116     unsigned useTouchOverflowScrolling: 1;
117 #endif
118 #if ENABLE(CSS_IMAGE_RESOLUTION)
119     unsigned m_imageResolutionSource : 1; // ImageResolutionSource
120     unsigned m_imageResolutionSnap : 1; // ImageResolutionSnap
121 #endif
122 #if ENABLE(CSS3_TEXT)
123     unsigned m_textAlignLast : 3; // TextAlignLast
124     unsigned m_textJustify : 2; // TextJustify
125 #endif // CSS3_TEXT
126     unsigned m_textDecorationSkip : 5; // TextDecorationSkip
127     unsigned m_textUnderlinePosition : 3; // TextUnderlinePosition
128     unsigned m_rubyPosition : 2; // RubyPosition
129     unsigned m_textZoom: 1; // TextZoom
130
131 #if PLATFORM(IOS)
132     unsigned touchCalloutEnabled : 1;
133 #endif
134
135 #if ENABLE(CSS_TRAILING_WORD)
136     unsigned trailingWord : 1;
137 #endif
138
139     unsigned m_hangingPunctuation : 4;
140
141     AtomicString hyphenationString;
142     short hyphenationLimitBefore;
143     short hyphenationLimitAfter;
144     short hyphenationLimitLines;
145
146     AtomicString textEmphasisCustomMark;
147     RefPtr<QuotesData> quotes;
148
149     AtomicString m_lineGrid;
150     unsigned m_tabSize;
151
152 #if ENABLE(IOS_TEXT_AUTOSIZING)
153     TextSizeAdjustment textSizeAdjust;
154 #endif
155
156 #if ENABLE(CSS_IMAGE_RESOLUTION)
157     float m_imageResolution;
158 #endif
159
160 #if ENABLE(TOUCH_EVENTS)
161     Color tapHighlightColor;
162 #endif
163
164 private:
165     StyleRareInheritedData();
166     StyleRareInheritedData(const StyleRareInheritedData&);
167 };
168
169 } // namespace WebCore
170
171 #endif // StyleRareInheritedData_h