• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
StyleRareNonInheritedData()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 #if USE(ACCELERATED_COMPOSITING)
46     , m_runningAcceleratedAnimation(false)
47 #endif
48     , m_boxShadow(0)
49     , m_animations(0)
50     , m_transitions(0)
51     , m_mask(FillLayer(MaskFillLayer))
52     , m_transformStyle3D(RenderStyle::initialTransformStyle3D())
53     , m_backfaceVisibility(RenderStyle::initialBackfaceVisibility())
54     , m_perspective(RenderStyle::initialPerspective())
55     , m_perspectiveOriginX(RenderStyle::initialPerspectiveOriginX())
56     , m_perspectiveOriginY(RenderStyle::initialPerspectiveOriginY())
57 #if ENABLE(XBL)
58     , bindingURI(0)
59 #endif
60 {
61 }
62 
StyleRareNonInheritedData(const StyleRareNonInheritedData & o)63 StyleRareNonInheritedData::StyleRareNonInheritedData(const StyleRareNonInheritedData& o)
64     : RefCounted<StyleRareNonInheritedData>()
65     , lineClamp(o.lineClamp)
66     , opacity(o.opacity)
67     , flexibleBox(o.flexibleBox)
68     , marquee(o.marquee)
69     , m_multiCol(o.m_multiCol)
70     , m_transform(o.m_transform)
71     , m_content(0)
72     , m_counterDirectives(0)
73     , userDrag(o.userDrag)
74     , textOverflow(o.textOverflow)
75     , marginTopCollapse(o.marginTopCollapse)
76     , marginBottomCollapse(o.marginBottomCollapse)
77     , matchNearestMailBlockquoteColor(o.matchNearestMailBlockquoteColor)
78     , m_appearance(o.m_appearance)
79     , m_borderFit(o.m_borderFit)
80 #if USE(ACCELERATED_COMPOSITING)
81     , m_runningAcceleratedAnimation(o.m_runningAcceleratedAnimation)
82 #endif
83     , m_boxShadow(o.m_boxShadow ? new ShadowData(*o.m_boxShadow) : 0)
84     , m_boxReflect(o.m_boxReflect)
85     , m_animations(o.m_animations ? new AnimationList(*o.m_animations) : 0)
86     , m_transitions(o.m_transitions ? new AnimationList(*o.m_transitions) : 0)
87     , m_mask(o.m_mask)
88     , m_maskBoxImage(o.m_maskBoxImage)
89     , m_transformStyle3D(o.m_transformStyle3D)
90     , m_backfaceVisibility(o.m_backfaceVisibility)
91     , m_perspective(o.m_perspective)
92     , m_perspectiveOriginX(o.m_perspectiveOriginX)
93     , m_perspectiveOriginY(o.m_perspectiveOriginY)
94 #if ENABLE(XBL)
95     , bindingURI(o.bindingURI ? o.bindingURI->copy() : 0)
96 #endif
97 {
98 }
99 
~StyleRareNonInheritedData()100 StyleRareNonInheritedData::~StyleRareNonInheritedData()
101 {
102 }
103 
104 #if ENABLE(XBL)
bindingsEquivalent(const StyleRareNonInheritedData & o) const105 bool StyleRareNonInheritedData::bindingsEquivalent(const StyleRareNonInheritedData& o) const
106 {
107     if (this == &o) return true;
108     if (!bindingURI && o.bindingURI || bindingURI && !o.bindingURI)
109         return false;
110     if (bindingURI && o.bindingURI && (*bindingURI != *o.bindingURI))
111         return false;
112     return true;
113 }
114 #endif
115 
operator ==(const StyleRareNonInheritedData & o) const116 bool StyleRareNonInheritedData::operator==(const StyleRareNonInheritedData& o) const
117 {
118     return lineClamp == o.lineClamp
119 #if ENABLE(DASHBOARD_SUPPORT)
120         && m_dashboardRegions == o.m_dashboardRegions
121 #endif
122         && opacity == o.opacity
123         && flexibleBox == o.flexibleBox
124         && marquee == o.marquee
125         && m_multiCol == o.m_multiCol
126         && m_transform == o.m_transform
127         && contentDataEquivalent(o)
128         && m_counterDirectives == o.m_counterDirectives
129         && userDrag == o.userDrag
130         && textOverflow == o.textOverflow
131         && marginTopCollapse == o.marginTopCollapse
132         && marginBottomCollapse == o.marginBottomCollapse
133         && matchNearestMailBlockquoteColor == o.matchNearestMailBlockquoteColor
134         && m_appearance == o.m_appearance
135         && m_borderFit == o.m_borderFit
136 #if USE(ACCELERATED_COMPOSITING)
137         && !m_runningAcceleratedAnimation && !o.m_runningAcceleratedAnimation
138 #endif
139         && shadowDataEquivalent(o)
140         && reflectionDataEquivalent(o)
141         && animationDataEquivalent(o)
142         && transitionDataEquivalent(o)
143         && m_mask == o.m_mask
144         && m_maskBoxImage == o.m_maskBoxImage
145 #if ENABLE(XBL)
146         && bindingsEquivalent(o)
147 #endif
148         && (m_transformStyle3D == o.m_transformStyle3D)
149         && (m_backfaceVisibility == o.m_backfaceVisibility)
150         && (m_perspective == o.m_perspective)
151         && (m_perspectiveOriginX == o.m_perspectiveOriginX)
152         && (m_perspectiveOriginY == o.m_perspectiveOriginY)
153         ;
154 }
155 
contentDataEquivalent(const StyleRareNonInheritedData & o) const156 bool StyleRareNonInheritedData::contentDataEquivalent(const StyleRareNonInheritedData& o) const
157 {
158     ContentData* c1 = m_content.get();
159     ContentData* c2 = o.m_content.get();
160 
161     while (c1 && c2) {
162         if (!c1->dataEquivalent(*c2))
163             return false;
164         c1 = c1->next();
165         c2 = c2->next();
166     }
167 
168     return !c1 && !c2;
169 }
170 
shadowDataEquivalent(const StyleRareNonInheritedData & o) const171 bool StyleRareNonInheritedData::shadowDataEquivalent(const StyleRareNonInheritedData& o) const
172 {
173     if ((!m_boxShadow && o.m_boxShadow) || (m_boxShadow && !o.m_boxShadow))
174         return false;
175     if (m_boxShadow && o.m_boxShadow && (*m_boxShadow != *o.m_boxShadow))
176         return false;
177     return true;
178 }
179 
reflectionDataEquivalent(const StyleRareNonInheritedData & o) const180 bool StyleRareNonInheritedData::reflectionDataEquivalent(const StyleRareNonInheritedData& o) const
181 {
182     if (m_boxReflect != o.m_boxReflect) {
183         if (!m_boxReflect || !o.m_boxReflect)
184             return false;
185         return *m_boxReflect == *o.m_boxReflect;
186     }
187     return true;
188 
189 }
190 
animationDataEquivalent(const StyleRareNonInheritedData & o) const191 bool StyleRareNonInheritedData::animationDataEquivalent(const StyleRareNonInheritedData& o) const
192 {
193     if ((!m_animations && o.m_animations) || (m_animations && !o.m_animations))
194         return false;
195     if (m_animations && o.m_animations && (*m_animations != *o.m_animations))
196         return false;
197     return true;
198 }
199 
transitionDataEquivalent(const StyleRareNonInheritedData & o) const200 bool StyleRareNonInheritedData::transitionDataEquivalent(const StyleRareNonInheritedData& o) const
201 {
202     if ((!m_transitions && o.m_transitions) || (m_transitions && !o.m_transitions))
203         return false;
204     if (m_transitions && o.m_transitions && (*m_transitions != *o.m_transitions))
205         return false;
206     return true;
207 }
208 
209 } // namespace WebCore
210