2010-06-25 Yuzo Fujishima <yuzo@google.com>
[WebKit-https.git] / 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 "StyleImage.h"
30
31 namespace WebCore {
32
33 StyleRareNonInheritedData::StyleRareNonInheritedData()
34     : lineClamp(RenderStyle::initialLineClamp())
35     , opacity(RenderStyle::initialOpacity())
36     , m_content(0)
37     , m_counterDirectives(0)
38     , userDrag(RenderStyle::initialUserDrag())
39     , textOverflow(RenderStyle::initialTextOverflow())
40     , marginTopCollapse(MCOLLAPSE)
41     , marginBottomCollapse(MCOLLAPSE)
42     , matchNearestMailBlockquoteColor(RenderStyle::initialMatchNearestMailBlockquoteColor())
43     , m_appearance(RenderStyle::initialAppearance())
44     , m_borderFit(RenderStyle::initialBorderFit())
45     , m_counterIncrement(0)
46     , m_counterReset(0)
47 #if USE(ACCELERATED_COMPOSITING)
48     , m_runningAcceleratedAnimation(false)
49 #endif
50     , m_boxShadow(0)
51     , m_animations(0)
52     , m_transitions(0)
53     , m_mask(FillLayer(MaskFillLayer))
54     , m_transformStyle3D(RenderStyle::initialTransformStyle3D())
55     , m_backfaceVisibility(RenderStyle::initialBackfaceVisibility())
56     , m_perspective(RenderStyle::initialPerspective())
57     , m_perspectiveOriginX(RenderStyle::initialPerspectiveOriginX())
58     , m_perspectiveOriginY(RenderStyle::initialPerspectiveOriginY())
59 #if ENABLE(XBL)
60     , bindingURI(0)
61 #endif
62     , m_pageSize()
63     , m_pageSizeType(PAGE_SIZE_AUTO)
64 {
65 }
66
67 StyleRareNonInheritedData::StyleRareNonInheritedData(const StyleRareNonInheritedData& o)
68     : RefCounted<StyleRareNonInheritedData>()
69     , lineClamp(o.lineClamp)
70     , opacity(o.opacity)
71     , flexibleBox(o.flexibleBox)
72     , marquee(o.marquee)
73     , m_multiCol(o.m_multiCol)
74     , m_transform(o.m_transform)
75     , m_content(0)
76     , m_counterDirectives(0)
77     , userDrag(o.userDrag)
78     , textOverflow(o.textOverflow)
79     , marginTopCollapse(o.marginTopCollapse)
80     , marginBottomCollapse(o.marginBottomCollapse)
81     , matchNearestMailBlockquoteColor(o.matchNearestMailBlockquoteColor)
82     , m_appearance(o.m_appearance)
83     , m_borderFit(o.m_borderFit)
84     , m_counterIncrement(o.m_counterIncrement)
85     , m_counterReset(o.m_counterReset)
86 #if USE(ACCELERATED_COMPOSITING)
87     , m_runningAcceleratedAnimation(o.m_runningAcceleratedAnimation)
88 #endif
89     , m_boxShadow(o.m_boxShadow ? new ShadowData(*o.m_boxShadow) : 0)
90     , m_boxReflect(o.m_boxReflect)
91     , m_animations(o.m_animations ? new AnimationList(*o.m_animations) : 0)
92     , m_transitions(o.m_transitions ? new AnimationList(*o.m_transitions) : 0)
93     , m_mask(o.m_mask)
94     , m_maskBoxImage(o.m_maskBoxImage)
95     , m_transformStyle3D(o.m_transformStyle3D)
96     , m_backfaceVisibility(o.m_backfaceVisibility)
97     , m_perspective(o.m_perspective)
98     , m_perspectiveOriginX(o.m_perspectiveOriginX)
99     , m_perspectiveOriginY(o.m_perspectiveOriginY)
100 #if ENABLE(XBL)
101     , bindingURI(o.bindingURI ? o.bindingURI->copy() : 0)
102 #endif
103     , m_pageSize(o.m_pageSize)
104     , m_pageSizeType(o.m_pageSizeType)
105 {
106 }
107
108 StyleRareNonInheritedData::~StyleRareNonInheritedData()
109 {
110 }
111
112 #if ENABLE(XBL)
113 bool StyleRareNonInheritedData::bindingsEquivalent(const StyleRareNonInheritedData& o) const
114 {
115     if (this == &o) return true;
116     if (!bindingURI && o.bindingURI || bindingURI && !o.bindingURI)
117         return false;
118     if (bindingURI && o.bindingURI && (*bindingURI != *o.bindingURI))
119         return false;
120     return true;
121 }
122 #endif
123
124 bool StyleRareNonInheritedData::operator==(const StyleRareNonInheritedData& o) const
125 {
126     return lineClamp == o.lineClamp
127 #if ENABLE(DASHBOARD_SUPPORT)
128         && m_dashboardRegions == o.m_dashboardRegions
129 #endif
130         && opacity == o.opacity
131         && flexibleBox == o.flexibleBox
132         && marquee == o.marquee
133         && m_multiCol == o.m_multiCol
134         && m_transform == o.m_transform
135         && contentDataEquivalent(o)
136         && m_counterDirectives == o.m_counterDirectives
137         && userDrag == o.userDrag
138         && textOverflow == o.textOverflow
139         && marginTopCollapse == o.marginTopCollapse
140         && marginBottomCollapse == o.marginBottomCollapse
141         && matchNearestMailBlockquoteColor == o.matchNearestMailBlockquoteColor
142         && m_appearance == o.m_appearance
143         && m_borderFit == o.m_borderFit
144         && m_counterIncrement == o.m_counterIncrement
145         && m_counterReset == o.m_counterReset
146 #if USE(ACCELERATED_COMPOSITING)
147         && !m_runningAcceleratedAnimation && !o.m_runningAcceleratedAnimation
148 #endif
149         && shadowDataEquivalent(o)
150         && reflectionDataEquivalent(o)
151         && animationDataEquivalent(o)
152         && transitionDataEquivalent(o)
153         && m_mask == o.m_mask
154         && m_maskBoxImage == o.m_maskBoxImage
155 #if ENABLE(XBL)
156         && bindingsEquivalent(o)
157 #endif
158         && (m_transformStyle3D == o.m_transformStyle3D)
159         && (m_backfaceVisibility == o.m_backfaceVisibility)
160         && (m_perspective == o.m_perspective)
161         && (m_perspectiveOriginX == o.m_perspectiveOriginX)
162         && (m_perspectiveOriginY == o.m_perspectiveOriginY)
163         && (m_pageSize == o.m_pageSize)
164         && (m_pageSizeType == o.m_pageSizeType)
165         ;
166 }
167
168 bool StyleRareNonInheritedData::contentDataEquivalent(const StyleRareNonInheritedData& o) const
169 {
170     ContentData* c1 = m_content.get();
171     ContentData* c2 = o.m_content.get();
172
173     while (c1 && c2) {
174         if (!c1->dataEquivalent(*c2))
175             return false;
176         c1 = c1->next();
177         c2 = c2->next();
178     }
179
180     return !c1 && !c2;
181 }
182
183 bool StyleRareNonInheritedData::shadowDataEquivalent(const StyleRareNonInheritedData& o) const
184 {
185     if ((!m_boxShadow && o.m_boxShadow) || (m_boxShadow && !o.m_boxShadow))
186         return false;
187     if (m_boxShadow && o.m_boxShadow && (*m_boxShadow != *o.m_boxShadow))
188         return false;
189     return true;
190 }
191
192 bool StyleRareNonInheritedData::reflectionDataEquivalent(const StyleRareNonInheritedData& o) const
193 {
194     if (m_boxReflect != o.m_boxReflect) {
195         if (!m_boxReflect || !o.m_boxReflect)
196             return false;
197         return *m_boxReflect == *o.m_boxReflect;
198     }
199     return true;
200
201 }
202
203 bool StyleRareNonInheritedData::animationDataEquivalent(const StyleRareNonInheritedData& o) const
204 {
205     if ((!m_animations && o.m_animations) || (m_animations && !o.m_animations))
206         return false;
207     if (m_animations && o.m_animations && (*m_animations != *o.m_animations))
208         return false;
209     return true;
210 }
211
212 bool StyleRareNonInheritedData::transitionDataEquivalent(const StyleRareNonInheritedData& o) const
213 {
214     if ((!m_transitions && o.m_transitions) || (m_transitions && !o.m_transitions))
215         return false;
216     if (m_transitions && o.m_transitions && (*m_transitions != *o.m_transitions))
217         return false;
218     return true;
219 }
220
221 } // namespace WebCore