fc139d1e278ecf7164354169684cfce2b47cd27c
[WebKit-https.git] / Source / WebCore / rendering / style / StyleRareNonInheritedData.cpp
1 /*
2  * Copyright (C) 1999 Antti Koivisto (koivisto@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
22 #include "config.h"
23 #include "StyleRareNonInheritedData.h"
24
25 #include "CSSStyleSelector.h"
26 #include "ContentData.h"
27 #include "RenderCounter.h"
28 #include "RenderStyle.h"
29 #include "ShadowData.h"
30 #include "StyleFilterData.h"
31 #include "StyleTransformData.h"
32 #include "StyleImage.h"
33
34 namespace WebCore {
35
36 StyleRareNonInheritedData::StyleRareNonInheritedData()
37     : opacity(RenderStyle::initialOpacity())
38     , m_counterIncrement(0)
39     , m_counterReset(0)
40     , m_perspective(RenderStyle::initialPerspective())
41     , m_perspectiveOriginX(RenderStyle::initialPerspectiveOriginX())
42     , m_perspectiveOriginY(RenderStyle::initialPerspectiveOriginY())
43     , lineClamp(RenderStyle::initialLineClamp())
44     , m_mask(FillLayer(MaskFillLayer))
45     , m_pageSize()
46     , m_wrapShape(RenderStyle::initialWrapShape())
47     , m_wrapMargin(RenderStyle::initialWrapMargin())
48     , m_wrapPadding(RenderStyle::initialWrapPadding())
49     , m_visitedLinkBackgroundColor(RenderStyle::initialBackgroundColor())
50     , m_flowThread(RenderStyle::initialFlowThread())
51     , m_regionThread(RenderStyle::initialRegionThread())
52     , m_regionOverflow(RenderStyle::initialRegionOverflow())
53     , m_regionBreakAfter(RenderStyle::initialPageBreak())
54     , m_regionBreakBefore(RenderStyle::initialPageBreak())
55     , m_regionBreakInside(RenderStyle::initialPageBreak())
56     , m_pageSizeType(PAGE_SIZE_AUTO)
57     , m_transformStyle3D(RenderStyle::initialTransformStyle3D())
58     , m_backfaceVisibility(RenderStyle::initialBackfaceVisibility())
59     , userDrag(RenderStyle::initialUserDrag())
60     , textOverflow(RenderStyle::initialTextOverflow())
61     , marginBeforeCollapse(MCOLLAPSE)
62     , marginAfterCollapse(MCOLLAPSE)
63     , matchNearestMailBlockquoteColor(RenderStyle::initialMatchNearestMailBlockquoteColor())
64     , m_appearance(RenderStyle::initialAppearance())
65     , m_borderFit(RenderStyle::initialBorderFit())
66     , m_textCombine(RenderStyle::initialTextCombine())
67     , m_wrapFlow(RenderStyle::initialWrapFlow())
68     , m_wrapThrough(RenderStyle::initialWrapThrough())
69 #if USE(ACCELERATED_COMPOSITING)
70     , m_runningAcceleratedAnimation(false)
71 #endif
72 {
73     m_maskBoxImage.setMaskDefaults();
74 }
75
76 StyleRareNonInheritedData::StyleRareNonInheritedData(const StyleRareNonInheritedData& o)
77     : RefCounted<StyleRareNonInheritedData>()
78     , opacity(o.opacity)
79     , m_counterIncrement(o.m_counterIncrement)
80     , m_counterReset(o.m_counterReset)
81     , m_perspective(o.m_perspective)
82     , m_perspectiveOriginX(o.m_perspectiveOriginX)
83     , m_perspectiveOriginY(o.m_perspectiveOriginY)
84     , lineClamp(o.lineClamp)
85     , m_deprecatedFlexibleBox(o.m_deprecatedFlexibleBox)
86     , m_flexibleBox(o.m_flexibleBox)
87     , m_marquee(o.m_marquee)
88     , m_multiCol(o.m_multiCol)
89     , m_transform(o.m_transform)
90 #if ENABLE(CSS_FILTERS)
91     , m_filter(o.m_filter)
92 #endif
93     , m_content(o.m_content ? o.m_content->clone() : nullptr)
94     , m_counterDirectives(o.m_counterDirectives ? clone(*o.m_counterDirectives) : nullptr)
95     , m_boxShadow(o.m_boxShadow ? adoptPtr(new ShadowData(*o.m_boxShadow)) : nullptr)
96     , m_boxReflect(o.m_boxReflect)
97     , m_animations(o.m_animations ? adoptPtr(new AnimationList(*o.m_animations)) : nullptr)
98     , m_transitions(o.m_transitions ? adoptPtr(new AnimationList(*o.m_transitions)) : nullptr)
99     , m_mask(o.m_mask)
100     , m_maskBoxImage(o.m_maskBoxImage)
101     , m_pageSize(o.m_pageSize)
102     , m_wrapShape(o.m_wrapShape)
103     , m_wrapMargin(o.m_wrapMargin)
104     , m_wrapPadding(o.m_wrapPadding)
105     , m_visitedLinkBackgroundColor(o.m_visitedLinkBackgroundColor)
106     , m_visitedLinkOutlineColor(o.m_visitedLinkBackgroundColor)
107     , m_visitedLinkBorderLeftColor(o.m_visitedLinkBorderLeftColor)
108     , m_visitedLinkBorderRightColor(o.m_visitedLinkBorderRightColor)
109     , m_visitedLinkBorderTopColor(o.m_visitedLinkBorderTopColor)
110     , m_visitedLinkBorderBottomColor(o.m_visitedLinkBorderBottomColor)
111     , m_flowThread(o.m_flowThread)
112     , m_regionThread(o.m_regionThread)
113     , m_regionOverflow(o.m_regionOverflow)
114     , m_regionBreakAfter(o.m_regionBreakAfter)
115     , m_regionBreakBefore(o.m_regionBreakBefore)
116     , m_regionBreakInside(o.m_regionBreakInside)
117     , m_pageSizeType(o.m_pageSizeType)
118     , m_transformStyle3D(o.m_transformStyle3D)
119     , m_backfaceVisibility(o.m_backfaceVisibility)
120     , userDrag(o.userDrag)
121     , textOverflow(o.textOverflow)
122     , marginBeforeCollapse(o.marginBeforeCollapse)
123     , marginAfterCollapse(o.marginAfterCollapse)
124     , matchNearestMailBlockquoteColor(o.matchNearestMailBlockquoteColor)
125     , m_appearance(o.m_appearance)
126     , m_borderFit(o.m_borderFit)
127     , m_textCombine(o.m_textCombine)
128     , m_wrapFlow(o.m_wrapFlow)
129     , m_wrapThrough(o.m_wrapThrough)
130 #if USE(ACCELERATED_COMPOSITING)
131     , m_runningAcceleratedAnimation(o.m_runningAcceleratedAnimation)
132 #endif
133 {
134 }
135
136 StyleRareNonInheritedData::~StyleRareNonInheritedData()
137 {
138 }
139
140 bool StyleRareNonInheritedData::operator==(const StyleRareNonInheritedData& o) const
141 {
142     return lineClamp == o.lineClamp
143 #if ENABLE(DASHBOARD_SUPPORT)
144         && m_dashboardRegions == o.m_dashboardRegions
145 #endif
146         && opacity == o.opacity
147         && m_deprecatedFlexibleBox == o.m_deprecatedFlexibleBox
148         && m_flexibleBox == o.m_flexibleBox
149         && m_marquee == o.m_marquee
150         && m_multiCol == o.m_multiCol
151         && m_transform == o.m_transform
152 #if ENABLE(CSS_FILTERS)
153         && m_filter == o.m_filter
154 #endif
155         && contentDataEquivalent(o)
156         && counterDataEquivalent(o)
157         && userDrag == o.userDrag
158         && textOverflow == o.textOverflow
159         && marginBeforeCollapse == o.marginBeforeCollapse
160         && marginAfterCollapse == o.marginAfterCollapse
161         && matchNearestMailBlockquoteColor == o.matchNearestMailBlockquoteColor
162         && m_appearance == o.m_appearance
163         && m_borderFit == o.m_borderFit
164         && m_textCombine == o.m_textCombine
165         && m_counterIncrement == o.m_counterIncrement
166         && m_counterReset == o.m_counterReset
167 #if USE(ACCELERATED_COMPOSITING)
168         && !m_runningAcceleratedAnimation && !o.m_runningAcceleratedAnimation
169 #endif
170         && shadowDataEquivalent(o)
171         && reflectionDataEquivalent(o)
172         && animationDataEquivalent(o)
173         && transitionDataEquivalent(o)
174         && m_mask == o.m_mask
175         && m_maskBoxImage == o.m_maskBoxImage
176         && (m_transformStyle3D == o.m_transformStyle3D)
177         && (m_backfaceVisibility == o.m_backfaceVisibility)
178         && (m_perspective == o.m_perspective)
179         && (m_perspectiveOriginX == o.m_perspectiveOriginX)
180         && (m_perspectiveOriginY == o.m_perspectiveOriginY)
181         && (m_pageSize == o.m_pageSize)
182         && (m_pageSizeType == o.m_pageSizeType)
183         && (m_flowThread == o.m_flowThread)
184         && (m_regionThread == o.m_regionThread)
185         && (m_regionOverflow == o.m_regionOverflow)
186         && (m_wrapShape == o.m_wrapShape)
187         && (m_wrapFlow == o.m_wrapFlow)
188         && (m_wrapThrough == o.m_wrapThrough)
189         && (m_wrapMargin == o.m_wrapMargin)
190         && (m_wrapPadding == o.m_wrapPadding)
191         && m_visitedLinkBackgroundColor == o.m_visitedLinkBackgroundColor
192         && m_visitedLinkOutlineColor == o.m_visitedLinkOutlineColor
193         && m_visitedLinkBorderLeftColor == o.m_visitedLinkBorderLeftColor
194         && m_visitedLinkBorderRightColor == o.m_visitedLinkBorderRightColor
195         && m_visitedLinkBorderTopColor == o.m_visitedLinkBorderTopColor
196         && m_visitedLinkBorderBottomColor == o.m_visitedLinkBorderBottomColor
197         && (m_regionBreakAfter == o.m_regionBreakAfter)
198         && (m_regionBreakBefore == o.m_regionBreakBefore)
199         && (m_regionBreakInside == o.m_regionBreakInside);
200 }
201
202 bool StyleRareNonInheritedData::contentDataEquivalent(const StyleRareNonInheritedData& o) const
203 {
204     if (m_content.get() == o.m_content.get())
205         return true;
206         
207     if (m_content && o.m_content && *m_content == *o.m_content)
208         return true;
209
210     return false;
211 }
212
213 bool StyleRareNonInheritedData::counterDataEquivalent(const StyleRareNonInheritedData& o) const
214 {
215     if (m_counterDirectives.get() == o.m_counterDirectives.get())
216         return true;
217         
218     if (m_counterDirectives && o.m_counterDirectives && *m_counterDirectives == *o.m_counterDirectives)
219         return true;
220
221     return false;
222 }
223
224 bool StyleRareNonInheritedData::shadowDataEquivalent(const StyleRareNonInheritedData& o) const
225 {
226     if ((!m_boxShadow && o.m_boxShadow) || (m_boxShadow && !o.m_boxShadow))
227         return false;
228     if (m_boxShadow && o.m_boxShadow && (*m_boxShadow != *o.m_boxShadow))
229         return false;
230     return true;
231 }
232
233 bool StyleRareNonInheritedData::reflectionDataEquivalent(const StyleRareNonInheritedData& o) const
234 {
235     if (m_boxReflect != o.m_boxReflect) {
236         if (!m_boxReflect || !o.m_boxReflect)
237             return false;
238         return *m_boxReflect == *o.m_boxReflect;
239     }
240     return true;
241 }
242
243 bool StyleRareNonInheritedData::animationDataEquivalent(const StyleRareNonInheritedData& o) const
244 {
245     if ((!m_animations && o.m_animations) || (m_animations && !o.m_animations))
246         return false;
247     if (m_animations && o.m_animations && (*m_animations != *o.m_animations))
248         return false;
249     return true;
250 }
251
252 bool StyleRareNonInheritedData::transitionDataEquivalent(const StyleRareNonInheritedData& o) const
253 {
254     if ((!m_transitions && o.m_transitions) || (m_transitions && !o.m_transitions))
255         return false;
256     if (m_transitions && o.m_transitions && (*m_transitions != *o.m_transitions))
257         return false;
258     return true;
259 }
260
261 } // namespace WebCore