1 /*
2 * Copyright (C) 1999 Antti Koivisto (koivisto@kde.org)
3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 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
22 #include "config.h"
23 #include "StyleRareInheritedData.h"
24
25 #include "CursorList.h"
26 #include "QuotesData.h"
27 #include "RenderStyle.h"
28 #include "RenderStyleConstants.h"
29 #include "ShadowData.h"
30
31 namespace WebCore {
32
StyleRareInheritedData()33 StyleRareInheritedData::StyleRareInheritedData()
34 : textStrokeWidth(RenderStyle::initialTextStrokeWidth())
35 #ifdef ANDROID_CSS_RING
36 , ringFillColor(RenderStyle::initialRingFillColor())
37 , ringInnerWidth(RenderStyle::initialRingInnerWidth())
38 , ringOuterWidth(RenderStyle::initialRingOuterWidth())
39 , ringOutset(RenderStyle::initialRingOutset())
40 , ringPressedInnerColor(RenderStyle::initialRingPressedInnerColor())
41 , ringPressedOuterColor(RenderStyle::initialRingPressedOuterColor())
42 , ringRadius(RenderStyle::initialRingRadius())
43 , ringSelectedInnerColor(RenderStyle::initialRingSelectedInnerColor())
44 , ringSelectedOuterColor(RenderStyle::initialRingSelectedOuterColor())
45 #endif
46 #ifdef ANDROID_CSS_TAP_HIGHLIGHT_COLOR
47 , tapHighlightColor(RenderStyle::initialTapHighlightColor())
48 #endif
49 , textShadow(0)
50 , indent(RenderStyle::initialTextIndent())
51 , m_effectiveZoom(RenderStyle::initialZoom())
52 , widows(RenderStyle::initialWidows())
53 , orphans(RenderStyle::initialOrphans())
54 , textSecurity(RenderStyle::initialTextSecurity())
55 , userModify(READ_ONLY)
56 , wordBreak(RenderStyle::initialWordBreak())
57 , wordWrap(RenderStyle::initialWordWrap())
58 , nbspMode(NBNORMAL)
59 , khtmlLineBreak(LBNORMAL)
60 , textSizeAdjust(RenderStyle::initialTextSizeAdjust())
61 , resize(RenderStyle::initialResize())
62 , userSelect(RenderStyle::initialUserSelect())
63 , colorSpace(ColorSpaceDeviceRGB)
64 , speak(SpeakNormal)
65 , hyphens(HyphensManual)
66 , textEmphasisFill(TextEmphasisFillFilled)
67 , textEmphasisMark(TextEmphasisMarkNone)
68 , textEmphasisPosition(TextEmphasisPositionOver)
69 , m_lineBoxContain(RenderStyle::initialLineBoxContain())
70 , hyphenationLimitBefore(-1)
71 , hyphenationLimitAfter(-1)
72 {
73 }
74
StyleRareInheritedData(const StyleRareInheritedData & o)75 StyleRareInheritedData::StyleRareInheritedData(const StyleRareInheritedData& o)
76 : RefCounted<StyleRareInheritedData>()
77 , textStrokeColor(o.textStrokeColor)
78 , textStrokeWidth(o.textStrokeWidth)
79 , textFillColor(o.textFillColor)
80 , textEmphasisColor(o.textEmphasisColor)
81 #ifdef ANDROID_CSS_RING
82 , ringFillColor(o.ringFillColor)
83 , ringInnerWidth(o.ringInnerWidth)
84 , ringOuterWidth(o.ringOuterWidth)
85 , ringOutset(o.ringOutset)
86 , ringPressedInnerColor(o.ringPressedInnerColor)
87 , ringPressedOuterColor(o.ringPressedOuterColor)
88 , ringRadius(o.ringRadius)
89 , ringSelectedInnerColor(o.ringSelectedInnerColor)
90 , ringSelectedOuterColor(o.ringSelectedOuterColor)
91 #endif
92 #ifdef ANDROID_CSS_TAP_HIGHLIGHT_COLOR
93 , tapHighlightColor(o.tapHighlightColor)
94 #endif
95 , textShadow(o.textShadow ? new ShadowData(*o.textShadow) : 0)
96 , highlight(o.highlight)
97 , cursorData(o.cursorData)
98 , indent(o.indent)
99 , m_effectiveZoom(o.m_effectiveZoom)
100 , widows(o.widows)
101 , orphans(o.orphans)
102 , textSecurity(o.textSecurity)
103 , userModify(o.userModify)
104 , wordBreak(o.wordBreak)
105 , wordWrap(o.wordWrap)
106 , nbspMode(o.nbspMode)
107 , khtmlLineBreak(o.khtmlLineBreak)
108 , textSizeAdjust(o.textSizeAdjust)
109 , resize(o.resize)
110 , userSelect(o.userSelect)
111 , colorSpace(o.colorSpace)
112 , speak(o.speak)
113 , hyphens(o.hyphens)
114 , textEmphasisFill(o.textEmphasisFill)
115 , textEmphasisMark(o.textEmphasisMark)
116 , textEmphasisPosition(o.textEmphasisPosition)
117 , m_lineBoxContain(o.m_lineBoxContain)
118 , hyphenationString(o.hyphenationString)
119 , hyphenationLimitBefore(o.hyphenationLimitBefore)
120 , hyphenationLimitAfter(o.hyphenationLimitAfter)
121 , locale(o.locale)
122 , textEmphasisCustomMark(o.textEmphasisCustomMark)
123 {
124 }
125
~StyleRareInheritedData()126 StyleRareInheritedData::~StyleRareInheritedData()
127 {
128 delete textShadow;
129 }
130
cursorDataEquivalent(const CursorList * c1,const CursorList * c2)131 static bool cursorDataEquivalent(const CursorList* c1, const CursorList* c2)
132 {
133 if (c1 == c2)
134 return true;
135 if ((!c1 && c2) || (c1 && !c2))
136 return false;
137 return (*c1 == *c2);
138 }
139
operator ==(const StyleRareInheritedData & o) const140 bool StyleRareInheritedData::operator==(const StyleRareInheritedData& o) const
141 {
142 return textStrokeColor == o.textStrokeColor
143 && textStrokeWidth == o.textStrokeWidth
144 && textFillColor == o.textFillColor
145 && textEmphasisColor == o.textEmphasisColor
146 && shadowDataEquivalent(o)
147 && highlight == o.highlight
148 && cursorDataEquivalent(cursorData.get(), o.cursorData.get())
149 && indent == o.indent
150 && m_effectiveZoom == o.m_effectiveZoom
151 && widows == o.widows
152 && orphans == o.orphans
153 && textSecurity == o.textSecurity
154 && userModify == o.userModify
155 && wordBreak == o.wordBreak
156 && wordWrap == o.wordWrap
157 && nbspMode == o.nbspMode
158 && khtmlLineBreak == o.khtmlLineBreak
159 && textSizeAdjust == o.textSizeAdjust
160 #ifdef ANDROID_CSS_RING
161 && ringFillColor == o.ringFillColor
162 && ringInnerWidth == o.ringInnerWidth
163 && ringOuterWidth == o.ringOuterWidth
164 && ringOutset == o.ringOutset
165 && ringPressedInnerColor == o.ringPressedInnerColor
166 && ringPressedOuterColor == o.ringPressedOuterColor
167 && ringRadius == o.ringRadius
168 && ringSelectedInnerColor == o.ringSelectedInnerColor
169 && ringSelectedOuterColor == o.ringSelectedOuterColor
170 #endif
171 #ifdef ANDROID_CSS_TAP_HIGHLIGHT_COLOR
172 && tapHighlightColor == o.tapHighlightColor
173 #endif
174 && resize == o.resize
175 && userSelect == o.userSelect
176 && colorSpace == o.colorSpace
177 && speak == o.speak
178 && hyphens == o.hyphens
179 && hyphenationLimitBefore == o.hyphenationLimitBefore
180 && hyphenationLimitAfter == o.hyphenationLimitAfter
181 && textEmphasisFill == o.textEmphasisFill
182 && textEmphasisMark == o.textEmphasisMark
183 && textEmphasisPosition == o.textEmphasisPosition
184 && m_lineBoxContain == o.m_lineBoxContain
185 && hyphenationString == o.hyphenationString
186 && locale == o.locale
187 && textEmphasisCustomMark == o.textEmphasisCustomMark
188 && *quotes == *o.quotes;
189 }
190
shadowDataEquivalent(const StyleRareInheritedData & o) const191 bool StyleRareInheritedData::shadowDataEquivalent(const StyleRareInheritedData& o) const
192 {
193 if ((!textShadow && o.textShadow) || (textShadow && !o.textShadow))
194 return false;
195 if (textShadow && o.textShadow && (*textShadow != *o.textShadow))
196 return false;
197 return true;
198 }
199
200 } // namespace WebCore
201