Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(32)

Side by Side Diff: Source/core/layout/style/ComputedStyle.h

Issue 1033943002: Rename LayoutStyle to papayawhip (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: ensureComputedStyle Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/layout/style/CachedUAStyle.h ('k') | Source/core/layout/style/ComputedStyle.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
3 * (C) 2000 Antti Koivisto (koivisto@kde.org) 3 * (C) 2000 Antti Koivisto (koivisto@kde.org)
4 * (C) 2000 Dirk Mueller (mueller@kde.org) 4 * (C) 2000 Dirk Mueller (mueller@kde.org)
5 * Copyright (C) 2003, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r ights reserved. 5 * Copyright (C) 2003, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r ights reserved.
6 * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com) 6 * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com)
7 * 7 *
8 * This library is free software; you can redistribute it and/or 8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public 9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version. 11 * version 2 of the License, or (at your option) any later version.
12 * 12 *
13 * This library is distributed in the hope that it will be useful, 13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Library General Public License for more details. 16 * Library General Public License for more details.
17 * 17 *
18 * You should have received a copy of the GNU Library General Public License 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 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, 20 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 * Boston, MA 02110-1301, USA. 21 * Boston, MA 02110-1301, USA.
22 * 22 *
23 */ 23 */
24 24
25 #ifndef LayoutStyle_h 25 #ifndef ComputedStyle_h
26 #define LayoutStyle_h 26 #define ComputedStyle_h
27 27
28 #include "core/CSSPropertyNames.h" 28 #include "core/CSSPropertyNames.h"
29 #include "core/CoreExport.h" 29 #include "core/CoreExport.h"
30 #include "core/animation/css/CSSAnimationData.h" 30 #include "core/animation/css/CSSAnimationData.h"
31 #include "core/animation/css/CSSTransitionData.h" 31 #include "core/animation/css/CSSTransitionData.h"
32 #include "core/css/CSSLineBoxContainValue.h" 32 #include "core/css/CSSLineBoxContainValue.h"
33 #include "core/css/CSSPrimitiveValue.h" 33 #include "core/css/CSSPrimitiveValue.h"
34 #include "core/layout/style/BorderValue.h" 34 #include "core/layout/style/BorderValue.h"
35 #include "core/layout/style/CounterDirectives.h" 35 #include "core/layout/style/CounterDirectives.h"
36 #include "core/layout/style/DataRef.h" 36 #include "core/layout/style/DataRef.h"
37 #include "core/layout/style/LayoutStyleConstants.h" 37 #include "core/layout/style/ComputedStyleConstants.h"
38 #include "core/layout/style/LineClampValue.h" 38 #include "core/layout/style/LineClampValue.h"
39 #include "core/layout/style/NinePieceImage.h" 39 #include "core/layout/style/NinePieceImage.h"
40 #include "core/layout/style/OutlineValue.h" 40 #include "core/layout/style/OutlineValue.h"
41 #include "core/layout/style/SVGLayoutStyle.h" 41 #include "core/layout/style/SVGComputedStyle.h"
42 #include "core/layout/style/ShapeValue.h" 42 #include "core/layout/style/ShapeValue.h"
43 #include "core/layout/style/StyleBackgroundData.h" 43 #include "core/layout/style/StyleBackgroundData.h"
44 #include "core/layout/style/StyleBoxData.h" 44 #include "core/layout/style/StyleBoxData.h"
45 #include "core/layout/style/StyleDeprecatedFlexibleBoxData.h" 45 #include "core/layout/style/StyleDeprecatedFlexibleBoxData.h"
46 #include "core/layout/style/StyleDifference.h" 46 #include "core/layout/style/StyleDifference.h"
47 #include "core/layout/style/StyleFilterData.h" 47 #include "core/layout/style/StyleFilterData.h"
48 #include "core/layout/style/StyleFlexibleBoxData.h" 48 #include "core/layout/style/StyleFlexibleBoxData.h"
49 #include "core/layout/style/StyleGridData.h" 49 #include "core/layout/style/StyleGridData.h"
50 #include "core/layout/style/StyleGridItemData.h" 50 #include "core/layout/style/StyleGridItemData.h"
51 #include "core/layout/style/StyleInheritedData.h" 51 #include "core/layout/style/StyleInheritedData.h"
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 class Font; 108 class Font;
109 class FontMetrics; 109 class FontMetrics;
110 class ShadowList; 110 class ShadowList;
111 class StyleImage; 111 class StyleImage;
112 class StyleInheritedData; 112 class StyleInheritedData;
113 class StyleResolver; 113 class StyleResolver;
114 class TransformationMatrix; 114 class TransformationMatrix;
115 115
116 class ContentData; 116 class ContentData;
117 117
118 typedef Vector<RefPtr<LayoutStyle>, 4> PseudoStyleCache; 118 typedef Vector<RefPtr<ComputedStyle>, 4> PseudoStyleCache;
119 119
120 class CORE_EXPORT LayoutStyle: public RefCounted<LayoutStyle> { 120 class CORE_EXPORT ComputedStyle: public RefCounted<ComputedStyle> {
121 friend class AnimatedStyleBuilder; // Used by Web Animations CSS. Sets the c olor styles 121 friend class AnimatedStyleBuilder; // Used by Web Animations CSS. Sets the c olor styles
122 friend class CSSAnimatableValueFactory; // Used by Web Animations CSS. Gets visited and unvisited colors separately. 122 friend class CSSAnimatableValueFactory; // Used by Web Animations CSS. Gets visited and unvisited colors separately.
123 friend class CSSPropertyEquality; // Used by CSS animations. We can't allow them to animate based off visited colors. 123 friend class CSSPropertyEquality; // Used by CSS animations. We can't allow them to animate based off visited colors.
124 friend class ApplyStyleCommand; // Editing has to only reveal unvisited info . 124 friend class ApplyStyleCommand; // Editing has to only reveal unvisited info .
125 friend class EditingStyle; // Editing has to only reveal unvisited info. 125 friend class EditingStyle; // Editing has to only reveal unvisited info.
126 friend class LayoutStyleCSSValueMapping; // Needs to be able to see visited and unvisited colors for devtools. 126 friend class ComputedStyleCSSValueMapping; // Needs to be able to see visite d and unvisited colors for devtools.
127 friend class StyleBuilderFunctions; // Sets color styles 127 friend class StyleBuilderFunctions; // Sets color styles
128 friend class CachedUAStyle; // Saves Border/Background information for later comparison. 128 friend class CachedUAStyle; // Saves Border/Background information for later comparison.
129 129
130 // FIXME: When we stop resolving currentColor at style time, these can be re moved. 130 // FIXME: When we stop resolving currentColor at style time, these can be re moved.
131 friend class CSSToStyleMap; 131 friend class CSSToStyleMap;
132 friend class FilterOperationResolver; 132 friend class FilterOperationResolver;
133 friend class StyleBuilderConverter; 133 friend class StyleBuilderConverter;
134 friend class StyleResolverState; 134 friend class StyleResolverState;
135 friend class StyleResolver; 135 friend class StyleResolver;
136 protected: 136 protected:
137 137
138 // non-inherited attributes 138 // non-inherited attributes
139 DataRef<StyleBoxData> m_box; 139 DataRef<StyleBoxData> m_box;
140 DataRef<StyleVisualData> visual; 140 DataRef<StyleVisualData> visual;
141 DataRef<StyleBackgroundData> m_background; 141 DataRef<StyleBackgroundData> m_background;
142 DataRef<StyleSurroundData> surround; 142 DataRef<StyleSurroundData> surround;
143 DataRef<StyleRareNonInheritedData> rareNonInheritedData; 143 DataRef<StyleRareNonInheritedData> rareNonInheritedData;
144 144
145 // inherited attributes 145 // inherited attributes
146 DataRef<StyleRareInheritedData> rareInheritedData; 146 DataRef<StyleRareInheritedData> rareInheritedData;
147 DataRef<StyleInheritedData> inherited; 147 DataRef<StyleInheritedData> inherited;
148 148
149 // list of associated pseudo styles 149 // list of associated pseudo styles
150 OwnPtr<PseudoStyleCache> m_cachedPseudoStyles; 150 OwnPtr<PseudoStyleCache> m_cachedPseudoStyles;
151 151
152 DataRef<SVGLayoutStyle> m_svgStyle; 152 DataRef<SVGComputedStyle> m_svgStyle;
153 153
154 // !START SYNC!: Keep this in sync with the copy constructor in LayoutStyle.cpp and implicitlyInherited() in StyleResolver.cpp 154 // !START SYNC!: Keep this in sync with the copy constructor in ComputedStyle.cp p and implicitlyInherited() in StyleResolver.cpp
155 155
156 // inherit 156 // inherit
157 struct InheritedFlags { 157 struct InheritedFlags {
158 bool operator==(const InheritedFlags& other) const 158 bool operator==(const InheritedFlags& other) const
159 { 159 {
160 return (_empty_cells == other._empty_cells) 160 return (_empty_cells == other._empty_cells)
161 && (_caption_side == other._caption_side) 161 && (_caption_side == other._caption_side)
162 && (_list_style_type == other._list_style_type) 162 && (_list_style_type == other._list_style_type)
163 && (_list_style_position == other._list_style_position) 163 && (_list_style_position == other._list_style_position)
164 && (_visibility == other._visibility) 164 && (_visibility == other._visibility)
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 unsigned overflowX : 3; // EOverflow 243 unsigned overflowX : 3; // EOverflow
244 unsigned overflowY : 3; // EOverflow 244 unsigned overflowY : 3; // EOverflow
245 unsigned verticalAlign : 4; // EVerticalAlign 245 unsigned verticalAlign : 4; // EVerticalAlign
246 unsigned clear : 2; // EClear 246 unsigned clear : 2; // EClear
247 unsigned position : 3; // EPosition 247 unsigned position : 3; // EPosition
248 unsigned floating : 2; // EFloat 248 unsigned floating : 2; // EFloat
249 unsigned tableLayout : 1; // ETableLayout 249 unsigned tableLayout : 1; // ETableLayout
250 unsigned unicodeBidi : 3; // EUnicodeBidi 250 unsigned unicodeBidi : 3; // EUnicodeBidi
251 251
252 // This is set if we used viewport units when resolving a length. 252 // This is set if we used viewport units when resolving a length.
253 // It is mutable so we can pass around const LayoutStyles to resolve len gths. 253 // It is mutable so we can pass around const ComputedStyles to resolve l engths.
254 mutable unsigned hasViewportUnits : 1; 254 mutable unsigned hasViewportUnits : 1;
255 255
256 // 32 bits 256 // 32 bits
257 257
258 unsigned pageBreakBefore : 2; // EPageBreak 258 unsigned pageBreakBefore : 2; // EPageBreak
259 unsigned pageBreakAfter : 2; // EPageBreak 259 unsigned pageBreakAfter : 2; // EPageBreak
260 unsigned pageBreakInside : 2; // EPageBreak 260 unsigned pageBreakInside : 2; // EPageBreak
261 261
262 unsigned styleType : 6; // PseudoId 262 unsigned styleType : 6; // PseudoId
263 unsigned pseudoBits : 8; 263 unsigned pseudoBits : 8;
264 unsigned explicitInheritance : 1; // Explicitly inherits a non-inherited property 264 unsigned explicitInheritance : 1; // Explicitly inherits a non-inherited property
265 unsigned unique : 1; // Style can not be shared. 265 unsigned unique : 1; // Style can not be shared.
266 266
267 unsigned emptyState : 1; 267 unsigned emptyState : 1;
268 268
269 unsigned affectedByFocus : 1; 269 unsigned affectedByFocus : 1;
270 unsigned affectedByHover : 1; 270 unsigned affectedByHover : 1;
271 unsigned affectedByActive : 1; 271 unsigned affectedByActive : 1;
272 unsigned affectedByDrag : 1; 272 unsigned affectedByDrag : 1;
273 273
274 unsigned isLink : 1; 274 unsigned isLink : 1;
275 // If you add more style bits here, you will also need to update LayoutS tyle::copyNonInheritedFromCached() 275 // If you add more style bits here, you will also need to update Compute dStyle::copyNonInheritedFromCached()
276 // 62 bits 276 // 62 bits
277 } noninherited_flags; 277 } noninherited_flags;
278 278
279 // !END SYNC! 279 // !END SYNC!
280 280
281 protected: 281 protected:
282 void setBitDefaults() 282 void setBitDefaults()
283 { 283 {
284 inherited_flags._empty_cells = initialEmptyCells(); 284 inherited_flags._empty_cells = initialEmptyCells();
285 inherited_flags._caption_side = initialCaptionSide(); 285 inherited_flags._caption_side = initialCaptionSide();
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 noninherited_flags.emptyState = false; 319 noninherited_flags.emptyState = false;
320 noninherited_flags.hasViewportUnits = false; 320 noninherited_flags.hasViewportUnits = false;
321 noninherited_flags.affectedByFocus = false; 321 noninherited_flags.affectedByFocus = false;
322 noninherited_flags.affectedByHover = false; 322 noninherited_flags.affectedByHover = false;
323 noninherited_flags.affectedByActive = false; 323 noninherited_flags.affectedByActive = false;
324 noninherited_flags.affectedByDrag = false; 324 noninherited_flags.affectedByDrag = false;
325 noninherited_flags.isLink = false; 325 noninherited_flags.isLink = false;
326 } 326 }
327 327
328 private: 328 private:
329 ALWAYS_INLINE LayoutStyle(); 329 ALWAYS_INLINE ComputedStyle();
330 330
331 enum InitialStyleTag { 331 enum InitialStyleTag {
332 InitialStyle 332 InitialStyle
333 }; 333 };
334 ALWAYS_INLINE explicit LayoutStyle(InitialStyleTag); 334 ALWAYS_INLINE explicit ComputedStyle(InitialStyleTag);
335 ALWAYS_INLINE LayoutStyle(const LayoutStyle&); 335 ALWAYS_INLINE ComputedStyle(const ComputedStyle&);
336 336
337 static PassRefPtr<LayoutStyle> createInitialStyle(); 337 static PassRefPtr<ComputedStyle> createInitialStyle();
338 static inline LayoutStyle* initialStyle() 338 static inline ComputedStyle* initialStyle()
339 { 339 {
340 DEFINE_STATIC_REF(LayoutStyle, s_initialStyle, (LayoutStyle::createIniti alStyle())); 340 DEFINE_STATIC_REF(ComputedStyle, s_initialStyle, (ComputedStyle::createI nitialStyle()));
341 return s_initialStyle; 341 return s_initialStyle;
342 } 342 }
343 343
344 public: 344 public:
345 static PassRefPtr<LayoutStyle> create(); 345 static PassRefPtr<ComputedStyle> create();
346 static PassRefPtr<LayoutStyle> createAnonymousStyleWithDisplay(const LayoutS tyle& parentStyle, EDisplay); 346 static PassRefPtr<ComputedStyle> createAnonymousStyleWithDisplay(const Compu tedStyle& parentStyle, EDisplay);
347 static PassRefPtr<LayoutStyle> clone(const LayoutStyle&); 347 static PassRefPtr<ComputedStyle> clone(const ComputedStyle&);
348 348
349 // Computes how the style change should be propagated down the tree. 349 // Computes how the style change should be propagated down the tree.
350 static StyleRecalcChange stylePropagationDiff(const LayoutStyle* oldStyle, c onst LayoutStyle* newStyle); 350 static StyleRecalcChange stylePropagationDiff(const ComputedStyle* oldStyle, const ComputedStyle* newStyle);
351 351
352 static ItemPosition resolveAlignment(const LayoutStyle& parentStyle, const L ayoutStyle& childStyle, ItemPosition resolvedAutoPositionForLayoutObject); 352 static ItemPosition resolveAlignment(const ComputedStyle& parentStyle, const ComputedStyle& childStyle, ItemPosition resolvedAutoPositionForLayoutObject);
353 static ItemPosition resolveJustification(const LayoutStyle& parentStyle, con st LayoutStyle& childStyle, ItemPosition resolvedAutoPositionForLayoutObject); 353 static ItemPosition resolveJustification(const ComputedStyle& parentStyle, c onst ComputedStyle& childStyle, ItemPosition resolvedAutoPositionForLayoutObject );
354 354
355 StyleDifference visualInvalidationDiff(const LayoutStyle&) const; 355 StyleDifference visualInvalidationDiff(const ComputedStyle&) const;
356 356
357 enum IsAtShadowBoundary { 357 enum IsAtShadowBoundary {
358 AtShadowBoundary, 358 AtShadowBoundary,
359 NotAtShadowBoundary, 359 NotAtShadowBoundary,
360 }; 360 };
361 361
362 void inheritFrom(const LayoutStyle& inheritParent, IsAtShadowBoundary = NotA tShadowBoundary); 362 void inheritFrom(const ComputedStyle& inheritParent, IsAtShadowBoundary = No tAtShadowBoundary);
363 void copyNonInheritedFromCached(const LayoutStyle&); 363 void copyNonInheritedFromCached(const ComputedStyle&);
364 364
365 PseudoId styleType() const { return static_cast<PseudoId>(noninherited_flags .styleType); } 365 PseudoId styleType() const { return static_cast<PseudoId>(noninherited_flags .styleType); }
366 void setStyleType(PseudoId styleType) { noninherited_flags.styleType = style Type; } 366 void setStyleType(PseudoId styleType) { noninherited_flags.styleType = style Type; }
367 367
368 LayoutStyle* getCachedPseudoStyle(PseudoId) const; 368 ComputedStyle* getCachedPseudoStyle(PseudoId) const;
369 LayoutStyle* addCachedPseudoStyle(PassRefPtr<LayoutStyle>); 369 ComputedStyle* addCachedPseudoStyle(PassRefPtr<ComputedStyle>);
370 void removeCachedPseudoStyle(PseudoId); 370 void removeCachedPseudoStyle(PseudoId);
371 371
372 const PseudoStyleCache* cachedPseudoStyles() const { return m_cachedPseudoSt yles.get(); } 372 const PseudoStyleCache* cachedPseudoStyles() const { return m_cachedPseudoSt yles.get(); }
373 373
374 void setHasViewportUnits(bool hasViewportUnits = true) const { noninherited_ flags.hasViewportUnits = hasViewportUnits; } 374 void setHasViewportUnits(bool hasViewportUnits = true) const { noninherited_ flags.hasViewportUnits = hasViewportUnits; }
375 bool hasViewportUnits() const { return noninherited_flags.hasViewportUnits; } 375 bool hasViewportUnits() const { return noninherited_flags.hasViewportUnits; }
376 376
377 bool affectedByFocus() const { return noninherited_flags.affectedByFocus; } 377 bool affectedByFocus() const { return noninherited_flags.affectedByFocus; }
378 bool affectedByHover() const { return noninherited_flags.affectedByHover; } 378 bool affectedByHover() const { return noninherited_flags.affectedByHover; }
379 bool affectedByActive() const { return noninherited_flags.affectedByActive; } 379 bool affectedByActive() const { return noninherited_flags.affectedByActive; }
380 bool affectedByDrag() const { return noninherited_flags.affectedByDrag; } 380 bool affectedByDrag() const { return noninherited_flags.affectedByDrag; }
381 381
382 void setAffectedByFocus() { noninherited_flags.affectedByFocus = true; } 382 void setAffectedByFocus() { noninherited_flags.affectedByFocus = true; }
383 void setAffectedByHover() { noninherited_flags.affectedByHover = true; } 383 void setAffectedByHover() { noninherited_flags.affectedByHover = true; }
384 void setAffectedByActive() { noninherited_flags.affectedByActive = true; } 384 void setAffectedByActive() { noninherited_flags.affectedByActive = true; }
385 void setAffectedByDrag() { noninherited_flags.affectedByDrag = true; } 385 void setAffectedByDrag() { noninherited_flags.affectedByDrag = true; }
386 386
387 bool operator==(const LayoutStyle& other) const; 387 bool operator==(const ComputedStyle& other) const;
388 bool operator!=(const LayoutStyle& other) const { return !(*this == other); } 388 bool operator!=(const ComputedStyle& other) const { return !(*this == other) ; }
389 bool isFloating() const { return noninherited_flags.floating != NoFloat; } 389 bool isFloating() const { return noninherited_flags.floating != NoFloat; }
390 bool hasMargin() const { return surround->margin.nonZero(); } 390 bool hasMargin() const { return surround->margin.nonZero(); }
391 bool hasBorder() const { return surround->border.hasBorder(); } 391 bool hasBorder() const { return surround->border.hasBorder(); }
392 bool hasPadding() const { return surround->padding.nonZero(); } 392 bool hasPadding() const { return surround->padding.nonZero(); }
393 bool hasMarginBeforeQuirk() const { return marginBefore().quirk(); } 393 bool hasMarginBeforeQuirk() const { return marginBefore().quirk(); }
394 bool hasMarginAfterQuirk() const { return marginAfter().quirk(); } 394 bool hasMarginAfterQuirk() const { return marginAfter().quirk(); }
395 395
396 bool hasBackgroundImage() const { return m_background->background().hasImage (); } 396 bool hasBackgroundImage() const { return m_background->background().hasImage (); }
397 bool hasFixedBackgroundImage() const { return m_background->background().has FixedImage(); } 397 bool hasFixedBackgroundImage() const { return m_background->background().has FixedImage(); }
398 398
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
672 EListStylePosition listStylePosition() const { return static_cast<EListStyle Position>(inherited_flags._list_style_position); } 672 EListStylePosition listStylePosition() const { return static_cast<EListStyle Position>(inherited_flags._list_style_position); }
673 673
674 const Length& marginTop() const { return surround->margin.top(); } 674 const Length& marginTop() const { return surround->margin.top(); }
675 const Length& marginBottom() const { return surround->margin.bottom(); } 675 const Length& marginBottom() const { return surround->margin.bottom(); }
676 const Length& marginLeft() const { return surround->margin.left(); } 676 const Length& marginLeft() const { return surround->margin.left(); }
677 const Length& marginRight() const { return surround->margin.right(); } 677 const Length& marginRight() const { return surround->margin.right(); }
678 const Length& marginBefore() const { return surround->margin.before(writingM ode()); } 678 const Length& marginBefore() const { return surround->margin.before(writingM ode()); }
679 const Length& marginAfter() const { return surround->margin.after(writingMod e()); } 679 const Length& marginAfter() const { return surround->margin.after(writingMod e()); }
680 const Length& marginStart() const { return surround->margin.start(writingMod e(), direction()); } 680 const Length& marginStart() const { return surround->margin.start(writingMod e(), direction()); }
681 const Length& marginEnd() const { return surround->margin.end(writingMode(), direction()); } 681 const Length& marginEnd() const { return surround->margin.end(writingMode(), direction()); }
682 const Length& marginStartUsing(const LayoutStyle* otherStyle) const { return surround->margin.start(otherStyle->writingMode(), otherStyle->direction()); } 682 const Length& marginStartUsing(const ComputedStyle* otherStyle) const { retu rn surround->margin.start(otherStyle->writingMode(), otherStyle->direction()); }
683 const Length& marginEndUsing(const LayoutStyle* otherStyle) const { return s urround->margin.end(otherStyle->writingMode(), otherStyle->direction()); } 683 const Length& marginEndUsing(const ComputedStyle* otherStyle) const { return surround->margin.end(otherStyle->writingMode(), otherStyle->direction()); }
684 const Length& marginBeforeUsing(const LayoutStyle* otherStyle) const { retur n surround->margin.before(otherStyle->writingMode()); } 684 const Length& marginBeforeUsing(const ComputedStyle* otherStyle) const { ret urn surround->margin.before(otherStyle->writingMode()); }
685 const Length& marginAfterUsing(const LayoutStyle* otherStyle) const { return surround->margin.after(otherStyle->writingMode()); } 685 const Length& marginAfterUsing(const ComputedStyle* otherStyle) const { retu rn surround->margin.after(otherStyle->writingMode()); }
686 686
687 const LengthBox& paddingBox() const { return surround->padding; } 687 const LengthBox& paddingBox() const { return surround->padding; }
688 const Length& paddingTop() const { return surround->padding.top(); } 688 const Length& paddingTop() const { return surround->padding.top(); }
689 const Length& paddingBottom() const { return surround->padding.bottom(); } 689 const Length& paddingBottom() const { return surround->padding.bottom(); }
690 const Length& paddingLeft() const { return surround->padding.left(); } 690 const Length& paddingLeft() const { return surround->padding.left(); }
691 const Length& paddingRight() const { return surround->padding.right(); } 691 const Length& paddingRight() const { return surround->padding.right(); }
692 const Length& paddingBefore() const { return surround->padding.before(writin gMode()); } 692 const Length& paddingBefore() const { return surround->padding.before(writin gMode()); }
693 const Length& paddingAfter() const { return surround->padding.after(writingM ode()); } 693 const Length& paddingAfter() const { return surround->padding.after(writingM ode()); }
694 const Length& paddingStart() const { return surround->padding.start(writingM ode(), direction()); } 694 const Length& paddingStart() const { return surround->padding.start(writingM ode(), direction()); }
695 const Length& paddingEnd() const { return surround->padding.end(writingMode( ), direction()); } 695 const Length& paddingEnd() const { return surround->padding.end(writingMode( ), direction()); }
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
776 776
777 const GridPosition& gridColumnStart() const { return rareNonInheritedData->m _gridItem->m_gridColumnStart; } 777 const GridPosition& gridColumnStart() const { return rareNonInheritedData->m _gridItem->m_gridColumnStart; }
778 const GridPosition& gridColumnEnd() const { return rareNonInheritedData->m_g ridItem->m_gridColumnEnd; } 778 const GridPosition& gridColumnEnd() const { return rareNonInheritedData->m_g ridItem->m_gridColumnEnd; }
779 const GridPosition& gridRowStart() const { return rareNonInheritedData->m_gr idItem->m_gridRowStart; } 779 const GridPosition& gridRowStart() const { return rareNonInheritedData->m_gr idItem->m_gridRowStart; }
780 const GridPosition& gridRowEnd() const { return rareNonInheritedData->m_grid Item->m_gridRowEnd; } 780 const GridPosition& gridRowEnd() const { return rareNonInheritedData->m_grid Item->m_gridRowEnd; }
781 781
782 ShadowList* boxShadow() const { return rareNonInheritedData->m_boxShadow.get (); } 782 ShadowList* boxShadow() const { return rareNonInheritedData->m_boxShadow.get (); }
783 783
784 EBoxDecorationBreak boxDecorationBreak() const { return m_box->boxDecoration Break(); } 784 EBoxDecorationBreak boxDecorationBreak() const { return m_box->boxDecoration Break(); }
785 StyleReflection* boxReflect() const { return rareNonInheritedData->m_boxRefl ect.get(); } 785 StyleReflection* boxReflect() const { return rareNonInheritedData->m_boxRefl ect.get(); }
786 bool reflectionDataEquivalent(const LayoutStyle* otherStyle) const { return rareNonInheritedData->reflectionDataEquivalent(*otherStyle->rareNonInheritedData ); } 786 bool reflectionDataEquivalent(const ComputedStyle* otherStyle) const { retur n rareNonInheritedData->reflectionDataEquivalent(*otherStyle->rareNonInheritedDa ta); }
787 787
788 // FIXME: reflections should belong to this helper function but they are cur rently handled 788 // FIXME: reflections should belong to this helper function but they are cur rently handled
789 // through their self-painting layers. So the layout code doesn't account fo r them. 789 // through their self-painting layers. So the layout code doesn't account fo r them.
790 bool hasVisualOverflowingEffect() const { return boxShadow() || hasBorderIma geOutsets() || hasOutline(); } 790 bool hasVisualOverflowingEffect() const { return boxShadow() || hasBorderIma geOutsets() || hasOutline(); }
791 791
792 EBoxSizing boxSizing() const { return m_box->boxSizing(); } 792 EBoxSizing boxSizing() const { return m_box->boxSizing(); }
793 EUserModify userModify() const { return static_cast<EUserModify>(rareInherit edData->userModify); } 793 EUserModify userModify() const { return static_cast<EUserModify>(rareInherit edData->userModify); }
794 EUserDrag userDrag() const { return static_cast<EUserDrag>(rareNonInheritedD ata->userDrag); } 794 EUserDrag userDrag() const { return static_cast<EUserDrag>(rareNonInheritedD ata->userDrag); }
795 EUserSelect userSelect() const { return static_cast<EUserSelect>(rareInherit edData->userSelect); } 795 EUserSelect userSelect() const { return static_cast<EUserSelect>(rareInherit edData->userSelect); }
796 TextOverflow textOverflow() const { return static_cast<TextOverflow>(rareNon InheritedData->textOverflow); } 796 TextOverflow textOverflow() const { return static_cast<TextOverflow>(rareNon InheritedData->textOverflow); }
(...skipping 19 matching lines...) Expand all
816 bool hasAutoColumnWidth() const { return rareNonInheritedData->m_multiCol->m _autoWidth; } 816 bool hasAutoColumnWidth() const { return rareNonInheritedData->m_multiCol->m _autoWidth; }
817 unsigned short columnCount() const { return rareNonInheritedData->m_multiCol ->m_count; } 817 unsigned short columnCount() const { return rareNonInheritedData->m_multiCol ->m_count; }
818 bool hasAutoColumnCount() const { return rareNonInheritedData->m_multiCol->m _autoCount; } 818 bool hasAutoColumnCount() const { return rareNonInheritedData->m_multiCol->m _autoCount; }
819 bool specifiesColumns() const { return !hasAutoColumnCount() || !hasAutoColu mnWidth(); } 819 bool specifiesColumns() const { return !hasAutoColumnCount() || !hasAutoColu mnWidth(); }
820 ColumnFill columnFill() const { return static_cast<ColumnFill>(rareNonInheri tedData->m_multiCol->m_fill); } 820 ColumnFill columnFill() const { return static_cast<ColumnFill>(rareNonInheri tedData->m_multiCol->m_fill); }
821 float columnGap() const { return rareNonInheritedData->m_multiCol->m_gap; } 821 float columnGap() const { return rareNonInheritedData->m_multiCol->m_gap; }
822 bool hasNormalColumnGap() const { return rareNonInheritedData->m_multiCol->m _normalGap; } 822 bool hasNormalColumnGap() const { return rareNonInheritedData->m_multiCol->m _normalGap; }
823 EBorderStyle columnRuleStyle() const { return rareNonInheritedData->m_multiC ol->m_rule.style(); } 823 EBorderStyle columnRuleStyle() const { return rareNonInheritedData->m_multiC ol->m_rule.style(); }
824 unsigned short columnRuleWidth() const { return rareNonInheritedData->m_mult iCol->ruleWidth(); } 824 unsigned short columnRuleWidth() const { return rareNonInheritedData->m_mult iCol->ruleWidth(); }
825 bool columnRuleIsTransparent() const { return rareNonInheritedData->m_multiC ol->m_rule.isTransparent(); } 825 bool columnRuleIsTransparent() const { return rareNonInheritedData->m_multiC ol->m_rule.isTransparent(); }
826 bool columnRuleEquivalent(const LayoutStyle* otherStyle) const; 826 bool columnRuleEquivalent(const ComputedStyle* otherStyle) const;
827 ColumnSpan columnSpan() const { return static_cast<ColumnSpan>(rareNonInheri tedData->m_multiCol->m_columnSpan); } 827 ColumnSpan columnSpan() const { return static_cast<ColumnSpan>(rareNonInheri tedData->m_multiCol->m_columnSpan); }
828 EPageBreak columnBreakBefore() const { return static_cast<EPageBreak>(rareNo nInheritedData->m_multiCol->m_breakBefore); } 828 EPageBreak columnBreakBefore() const { return static_cast<EPageBreak>(rareNo nInheritedData->m_multiCol->m_breakBefore); }
829 EPageBreak columnBreakInside() const { return static_cast<EPageBreak>(rareNo nInheritedData->m_multiCol->m_breakInside); } 829 EPageBreak columnBreakInside() const { return static_cast<EPageBreak>(rareNo nInheritedData->m_multiCol->m_breakInside); }
830 EPageBreak columnBreakAfter() const { return static_cast<EPageBreak>(rareNon InheritedData->m_multiCol->m_breakAfter); } 830 EPageBreak columnBreakAfter() const { return static_cast<EPageBreak>(rareNon InheritedData->m_multiCol->m_breakAfter); }
831 bool hasInlineTransform() const { return rareNonInheritedData->m_hasInlineTr ansform; } 831 bool hasInlineTransform() const { return rareNonInheritedData->m_hasInlineTr ansform; }
832 const TransformOperations& transform() const { return rareNonInheritedData-> m_transform->m_operations; } 832 const TransformOperations& transform() const { return rareNonInheritedData-> m_transform->m_operations; }
833 const TransformOrigin& transformOrigin() const { return rareNonInheritedData ->m_transform->m_origin; } 833 const TransformOrigin& transformOrigin() const { return rareNonInheritedData ->m_transform->m_origin; }
834 const Length& transformOriginX() const { return transformOrigin().x(); } 834 const Length& transformOriginX() const { return transformOrigin().x(); }
835 const Length& transformOriginY() const { return transformOrigin().y(); } 835 const Length& transformOriginY() const { return transformOrigin().y(); }
836 float transformOriginZ() const { return transformOrigin().z(); } 836 float transformOriginZ() const { return transformOrigin().z(); }
837 bool hasTransform() const { return hasTransformOperations() || hasMotionPath () || hasCurrentTransformAnimation(); } 837 bool hasTransform() const { return hasTransformOperations() || hasMotionPath () || hasCurrentTransformAnimation(); }
838 bool transformDataEquivalent(const LayoutStyle& otherStyle) const { return r areNonInheritedData->m_transform == otherStyle.rareNonInheritedData->m_transform ; } 838 bool transformDataEquivalent(const ComputedStyle& otherStyle) const { return rareNonInheritedData->m_transform == otherStyle.rareNonInheritedData->m_transfo rm; }
839 839
840 StyleMotionPath* motionPath() const { return rareNonInheritedData->m_transfo rm->m_motion.m_path.get(); } 840 StyleMotionPath* motionPath() const { return rareNonInheritedData->m_transfo rm->m_motion.m_path.get(); }
841 bool hasMotionPath() const { return rareNonInheritedData->m_transform->m_mot ion.m_path; } 841 bool hasMotionPath() const { return rareNonInheritedData->m_transform->m_mot ion.m_path; }
842 const Length& motionOffset() const { return rareNonInheritedData->m_transfor m->m_motion.m_offset; } 842 const Length& motionOffset() const { return rareNonInheritedData->m_transfor m->m_motion.m_offset; }
843 float motionRotation() const { return rareNonInheritedData->m_transform->m_m otion.m_rotation; } 843 float motionRotation() const { return rareNonInheritedData->m_transform->m_m otion.m_rotation; }
844 MotionRotationType motionRotationType() const { return rareNonInheritedData- >m_transform->m_motion.m_rotationType; } 844 MotionRotationType motionRotationType() const { return rareNonInheritedData- >m_transform->m_motion.m_rotationType; }
845 845
846 TextEmphasisFill textEmphasisFill() const { return static_cast<TextEmphasisF ill>(rareInheritedData->textEmphasisFill); } 846 TextEmphasisFill textEmphasisFill() const { return static_cast<TextEmphasisF ill>(rareInheritedData->textEmphasisFill); }
847 TextEmphasisMark textEmphasisMark() const; 847 TextEmphasisMark textEmphasisMark() const;
848 const AtomicString& textEmphasisCustomMark() const { return rareInheritedDat a->textEmphasisCustomMark; } 848 const AtomicString& textEmphasisCustomMark() const { return rareInheritedDat a->textEmphasisCustomMark; }
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
1049 void setBorderTopStyle(EBorderStyle v) { SET_VAR(surround, border.m_top.m_st yle, v); } 1049 void setBorderTopStyle(EBorderStyle v) { SET_VAR(surround, border.m_top.m_st yle, v); }
1050 void setBorderTopColor(const StyleColor& v) { SET_BORDERVALUE_COLOR(surround , border.m_top, v); } 1050 void setBorderTopColor(const StyleColor& v) { SET_BORDERVALUE_COLOR(surround , border.m_top, v); }
1051 void setBorderBottomWidth(unsigned v) { SET_VAR(surround, border.m_bottom.m_ width, v); } 1051 void setBorderBottomWidth(unsigned v) { SET_VAR(surround, border.m_bottom.m_ width, v); }
1052 void setBorderBottomStyle(EBorderStyle v) { SET_VAR(surround, border.m_botto m.m_style, v); } 1052 void setBorderBottomStyle(EBorderStyle v) { SET_VAR(surround, border.m_botto m.m_style, v); }
1053 void setBorderBottomColor(const StyleColor& v) { SET_BORDERVALUE_COLOR(surro und, border.m_bottom, v); } 1053 void setBorderBottomColor(const StyleColor& v) { SET_BORDERVALUE_COLOR(surro und, border.m_bottom, v); }
1054 1054
1055 void setOutlineWidth(unsigned short v) { SET_VAR(m_background, m_outline.m_w idth, v); } 1055 void setOutlineWidth(unsigned short v) { SET_VAR(m_background, m_outline.m_w idth, v); }
1056 void setOutlineStyleIsAuto(OutlineIsAuto isAuto) { SET_VAR(m_background, m_o utline.m_isAuto, isAuto); } 1056 void setOutlineStyleIsAuto(OutlineIsAuto isAuto) { SET_VAR(m_background, m_o utline.m_isAuto, isAuto); }
1057 void setOutlineStyle(EBorderStyle v) { SET_VAR(m_background, m_outline.m_sty le, v); } 1057 void setOutlineStyle(EBorderStyle v) { SET_VAR(m_background, m_outline.m_sty le, v); }
1058 void setOutlineColor(const StyleColor& v) { SET_BORDERVALUE_COLOR(m_backgrou nd, m_outline, v); } 1058 void setOutlineColor(const StyleColor& v) { SET_BORDERVALUE_COLOR(m_backgrou nd, m_outline, v); }
1059 bool isOutlineEquivalent(const LayoutStyle* otherStyle) const 1059 bool isOutlineEquivalent(const ComputedStyle* otherStyle) const
1060 { 1060 {
1061 // No other style, so we don't have an outline then we consider them to be the same. 1061 // No other style, so we don't have an outline then we consider them to be the same.
1062 if (!otherStyle) 1062 if (!otherStyle)
1063 return !hasOutline(); 1063 return !hasOutline();
1064 return m_background->outline().visuallyEqual(otherStyle->m_background->o utline()); 1064 return m_background->outline().visuallyEqual(otherStyle->m_background->o utline());
1065 } 1065 }
1066 void setOutlineFromStyle(const LayoutStyle& o) 1066 void setOutlineFromStyle(const ComputedStyle& o)
1067 { 1067 {
1068 ASSERT(!isOutlineEquivalent(&o)); 1068 ASSERT(!isOutlineEquivalent(&o));
1069 m_background.access()->m_outline = o.m_background->m_outline; 1069 m_background.access()->m_outline = o.m_background->m_outline;
1070 } 1070 }
1071 1071
1072 void setOverflowX(EOverflow v) { noninherited_flags.overflowX = v; } 1072 void setOverflowX(EOverflow v) { noninherited_flags.overflowX = v; }
1073 void setOverflowY(EOverflow v) { noninherited_flags.overflowY = v; } 1073 void setOverflowY(EOverflow v) { noninherited_flags.overflowY = v; }
1074 void setVisibility(EVisibility v) { inherited_flags._visibility = v; } 1074 void setVisibility(EVisibility v) { inherited_flags._visibility = v; }
1075 void setVerticalAlign(EVerticalAlign v) { noninherited_flags.verticalAlign = v; } 1075 void setVerticalAlign(EVerticalAlign v) { noninherited_flags.verticalAlign = v; }
1076 void setVerticalAlignLength(const Length& length) { setVerticalAlign(LENGTH) ; SET_VAR(m_box, m_verticalAlign, length); } 1076 void setVerticalAlignLength(const Length& length) { setVerticalAlign(LENGTH) ; SET_VAR(m_box, m_verticalAlign, length); }
1077 1077
1078 void setHasAutoClip() { SET_VAR(visual, hasAutoClip, true); SET_VAR(visual, clip, LayoutStyle::initialClip()); } 1078 void setHasAutoClip() { SET_VAR(visual, hasAutoClip, true); SET_VAR(visual, clip, ComputedStyle::initialClip()); }
1079 void setClip(const LengthBox& box) { SET_VAR(visual, hasAutoClip, false); SE T_VAR(visual, clip, box); } 1079 void setClip(const LengthBox& box) { SET_VAR(visual, hasAutoClip, false); SE T_VAR(visual, clip, box); }
1080 1080
1081 void setUnicodeBidi(EUnicodeBidi b) { noninherited_flags.unicodeBidi = b; } 1081 void setUnicodeBidi(EUnicodeBidi b) { noninherited_flags.unicodeBidi = b; }
1082 1082
1083 void setClear(EClear v) { noninherited_flags.clear = v; } 1083 void setClear(EClear v) { noninherited_flags.clear = v; }
1084 void setTableLayout(ETableLayout v) { noninherited_flags.tableLayout = v; } 1084 void setTableLayout(ETableLayout v) { noninherited_flags.tableLayout = v; }
1085 1085
1086 bool setFontDescription(const FontDescription&); 1086 bool setFontDescription(const FontDescription&);
1087 1087
1088 void setTextAutosizingMultiplier(float); 1088 void setTextAutosizingMultiplier(float);
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
1284 void setColumnGap(float f) { SET_VAR(rareNonInheritedData.access()->m_multiC ol, m_normalGap, false); SET_VAR(rareNonInheritedData.access()->m_multiCol, m_ga p, f); } 1284 void setColumnGap(float f) { SET_VAR(rareNonInheritedData.access()->m_multiC ol, m_normalGap, false); SET_VAR(rareNonInheritedData.access()->m_multiCol, m_ga p, f); }
1285 void setHasNormalColumnGap() { SET_VAR(rareNonInheritedData.access()->m_mult iCol, m_normalGap, true); SET_VAR(rareNonInheritedData.access()->m_multiCol, m_g ap, 0); } 1285 void setHasNormalColumnGap() { SET_VAR(rareNonInheritedData.access()->m_mult iCol, m_normalGap, true); SET_VAR(rareNonInheritedData.access()->m_multiCol, m_g ap, 0); }
1286 void setColumnRuleColor(const StyleColor& c) { SET_BORDERVALUE_COLOR(rareNon InheritedData.access()->m_multiCol, m_rule, c); } 1286 void setColumnRuleColor(const StyleColor& c) { SET_BORDERVALUE_COLOR(rareNon InheritedData.access()->m_multiCol, m_rule, c); }
1287 void setColumnRuleStyle(EBorderStyle b) { SET_VAR(rareNonInheritedData.acces s()->m_multiCol, m_rule.m_style, b); } 1287 void setColumnRuleStyle(EBorderStyle b) { SET_VAR(rareNonInheritedData.acces s()->m_multiCol, m_rule.m_style, b); }
1288 void setColumnRuleWidth(unsigned short w) { SET_VAR(rareNonInheritedData.acc ess()->m_multiCol, m_rule.m_width, w); } 1288 void setColumnRuleWidth(unsigned short w) { SET_VAR(rareNonInheritedData.acc ess()->m_multiCol, m_rule.m_width, w); }
1289 void setColumnSpan(ColumnSpan columnSpan) { SET_VAR(rareNonInheritedData.acc ess()->m_multiCol, m_columnSpan, columnSpan); } 1289 void setColumnSpan(ColumnSpan columnSpan) { SET_VAR(rareNonInheritedData.acc ess()->m_multiCol, m_columnSpan, columnSpan); }
1290 void setColumnBreakBefore(EPageBreak p) { SET_VAR(rareNonInheritedData.acces s()->m_multiCol, m_breakBefore, p); } 1290 void setColumnBreakBefore(EPageBreak p) { SET_VAR(rareNonInheritedData.acces s()->m_multiCol, m_breakBefore, p); }
1291 // For valid values of column-break-inside see http://www.w3.org/TR/css3-mul ticol/#break-before-break-after-break-inside 1291 // For valid values of column-break-inside see http://www.w3.org/TR/css3-mul ticol/#break-before-break-after-break-inside
1292 void setColumnBreakInside(EPageBreak p) { ASSERT(p == PBAUTO || p == PBAVOID ); SET_VAR(rareNonInheritedData.access()->m_multiCol, m_breakInside, p); } 1292 void setColumnBreakInside(EPageBreak p) { ASSERT(p == PBAUTO || p == PBAVOID ); SET_VAR(rareNonInheritedData.access()->m_multiCol, m_breakInside, p); }
1293 void setColumnBreakAfter(EPageBreak p) { SET_VAR(rareNonInheritedData.access ()->m_multiCol, m_breakAfter, p); } 1293 void setColumnBreakAfter(EPageBreak p) { SET_VAR(rareNonInheritedData.access ()->m_multiCol, m_breakAfter, p); }
1294 void inheritColumnPropertiesFrom(const LayoutStyle& parent) { rareNonInherit edData.access()->m_multiCol = parent.rareNonInheritedData->m_multiCol; } 1294 void inheritColumnPropertiesFrom(const ComputedStyle& parent) { rareNonInher itedData.access()->m_multiCol = parent.rareNonInheritedData->m_multiCol; }
1295 void setHasInlineTransform(bool b) { SET_VAR(rareNonInheritedData, m_hasInli neTransform, b); } 1295 void setHasInlineTransform(bool b) { SET_VAR(rareNonInheritedData, m_hasInli neTransform, b); }
1296 void setTransform(const TransformOperations& ops) { SET_VAR(rareNonInherited Data.access()->m_transform, m_operations, ops); } 1296 void setTransform(const TransformOperations& ops) { SET_VAR(rareNonInherited Data.access()->m_transform, m_operations, ops); }
1297 void setTransformOriginX(const Length& v) { setTransformOrigin(TransformOrig in(v, transformOriginY(), transformOriginZ())); } 1297 void setTransformOriginX(const Length& v) { setTransformOrigin(TransformOrig in(v, transformOriginY(), transformOriginZ())); }
1298 void setTransformOriginY(const Length& v) { setTransformOrigin(TransformOrig in(transformOriginX(), v, transformOriginZ())); } 1298 void setTransformOriginY(const Length& v) { setTransformOrigin(TransformOrig in(transformOriginX(), v, transformOriginZ())); }
1299 void setTransformOriginZ(float f) { setTransformOrigin(TransformOrigin(trans formOriginX(), transformOriginY(), f)); } 1299 void setTransformOriginZ(float f) { setTransformOrigin(TransformOrigin(trans formOriginX(), transformOriginY(), f)); }
1300 void setTransformOrigin(const TransformOrigin& o) { SET_VAR(rareNonInherited Data.access()->m_transform, m_origin, o); } 1300 void setTransformOrigin(const TransformOrigin& o) { SET_VAR(rareNonInherited Data.access()->m_transform, m_origin, o); }
1301 void setSpeak(ESpeak s) { SET_VAR(rareInheritedData, speak, s); } 1301 void setSpeak(ESpeak s) { SET_VAR(rareInheritedData, speak, s); }
1302 void setTextCombine(TextCombine v) { SET_VAR(rareNonInheritedData, m_textCom bine, v); } 1302 void setTextCombine(TextCombine v) { SET_VAR(rareNonInheritedData, m_textCom bine, v); }
1303 void setTextDecorationColor(const StyleColor& c) { SET_VAR(rareNonInheritedD ata, m_textDecorationColor, c); } 1303 void setTextDecorationColor(const StyleColor& c) { SET_VAR(rareNonInheritedD ata, m_textDecorationColor, c); }
1304 void setTextEmphasisColor(const StyleColor& c) { SET_VAR_WITH_SETTER(rareInh eritedData, textEmphasisColor, setTextEmphasisColor, c); } 1304 void setTextEmphasisColor(const StyleColor& c) { SET_VAR_WITH_SETTER(rareInh eritedData, textEmphasisColor, setTextEmphasisColor, c); }
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1359 void setScrollBlocksOn(WebScrollBlocksOn b) { SET_VAR(rareNonInheritedData, m_scrollBlocksOn, b); } 1359 void setScrollBlocksOn(WebScrollBlocksOn b) { SET_VAR(rareNonInheritedData, m_scrollBlocksOn, b); }
1360 1360
1361 void setWillChangeProperties(const Vector<CSSPropertyID>& properties) { SET_ VAR(rareNonInheritedData.access()->m_willChange, m_properties, properties); } 1361 void setWillChangeProperties(const Vector<CSSPropertyID>& properties) { SET_ VAR(rareNonInheritedData.access()->m_willChange, m_properties, properties); }
1362 void setWillChangeContents(bool b) { SET_VAR(rareNonInheritedData.access()-> m_willChange, m_contents, b); } 1362 void setWillChangeContents(bool b) { SET_VAR(rareNonInheritedData.access()-> m_willChange, m_contents, b); }
1363 void setWillChangeScrollPosition(bool b) { SET_VAR(rareNonInheritedData.acce ss()->m_willChange, m_scrollPosition, b); } 1363 void setWillChangeScrollPosition(bool b) { SET_VAR(rareNonInheritedData.acce ss()->m_willChange, m_scrollPosition, b); }
1364 void setSubtreeWillChangeContents(bool b) { SET_VAR(rareInheritedData, m_sub treeWillChangeContents, b); } 1364 void setSubtreeWillChangeContents(bool b) { SET_VAR(rareInheritedData, m_sub treeWillChangeContents, b); }
1365 1365
1366 bool requiresAcceleratedCompositingForExternalReasons(bool b) { return rareN onInheritedData->m_requiresAcceleratedCompositingForExternalReasons; } 1366 bool requiresAcceleratedCompositingForExternalReasons(bool b) { return rareN onInheritedData->m_requiresAcceleratedCompositingForExternalReasons; }
1367 void setRequiresAcceleratedCompositingForExternalReasons(bool b) { SET_VAR(r areNonInheritedData, m_requiresAcceleratedCompositingForExternalReasons, b); } 1367 void setRequiresAcceleratedCompositingForExternalReasons(bool b) { SET_VAR(r areNonInheritedData, m_requiresAcceleratedCompositingForExternalReasons, b); }
1368 1368
1369 const SVGLayoutStyle& svgStyle() const { return *m_svgStyle.get(); } 1369 const SVGComputedStyle& svgStyle() const { return *m_svgStyle.get(); }
1370 SVGLayoutStyle& accessSVGStyle() { return *m_svgStyle.access(); } 1370 SVGComputedStyle& accessSVGStyle() { return *m_svgStyle.access(); }
1371 1371
1372 const SVGPaintType& fillPaintType() const { return svgStyle().fillPaintType( ); } 1372 const SVGPaintType& fillPaintType() const { return svgStyle().fillPaintType( ); }
1373 Color fillPaintColor() const { return svgStyle().fillPaintColor(); } 1373 Color fillPaintColor() const { return svgStyle().fillPaintColor(); }
1374 float fillOpacity() const { return svgStyle().fillOpacity(); } 1374 float fillOpacity() const { return svgStyle().fillOpacity(); }
1375 void setFillOpacity(float f) { accessSVGStyle().setFillOpacity(f); } 1375 void setFillOpacity(float f) { accessSVGStyle().setFillOpacity(f); }
1376 1376
1377 const SVGPaintType& strokePaintType() const { return svgStyle().strokePaintT ype(); } 1377 const SVGPaintType& strokePaintType() const { return svgStyle().strokePaintT ype(); }
1378 Color strokePaintColor() const { return svgStyle().strokePaintColor(); } 1378 Color strokePaintColor() const { return svgStyle().strokePaintColor(); }
1379 float strokeOpacity() const { return svgStyle().strokeOpacity(); } 1379 float strokeOpacity() const { return svgStyle().strokeOpacity(); }
1380 void setStrokeOpacity(float f) { accessSVGStyle().setStrokeOpacity(f); } 1380 void setStrokeOpacity(float f) { accessSVGStyle().setStrokeOpacity(f); }
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1434 float shapeImageThreshold() const { return rareNonInheritedData->m_shapeImag eThreshold; } 1434 float shapeImageThreshold() const { return rareNonInheritedData->m_shapeImag eThreshold; }
1435 void setShapeImageThreshold(float shapeImageThreshold) 1435 void setShapeImageThreshold(float shapeImageThreshold)
1436 { 1436 {
1437 float clampedShapeImageThreshold = clampTo<float>(shapeImageThreshold, 0 , 1); 1437 float clampedShapeImageThreshold = clampTo<float>(shapeImageThreshold, 0 , 1);
1438 SET_VAR(rareNonInheritedData, m_shapeImageThreshold, clampedShapeImageTh reshold); 1438 SET_VAR(rareNonInheritedData, m_shapeImageThreshold, clampedShapeImageTh reshold);
1439 } 1439 }
1440 static float initialShapeImageThreshold() { return 0; } 1440 static float initialShapeImageThreshold() { return 0; }
1441 1441
1442 bool hasContent() const { return contentData(); } 1442 bool hasContent() const { return contentData(); }
1443 const ContentData* contentData() const { return rareNonInheritedData->m_cont ent.get(); } 1443 const ContentData* contentData() const { return rareNonInheritedData->m_cont ent.get(); }
1444 bool contentDataEquivalent(const LayoutStyle* otherStyle) const { return con st_cast<LayoutStyle*>(this)->rareNonInheritedData->contentDataEquivalent(*const_ cast<LayoutStyle*>(otherStyle)->rareNonInheritedData); } 1444 bool contentDataEquivalent(const ComputedStyle* otherStyle) const { return c onst_cast<ComputedStyle*>(this)->rareNonInheritedData->contentDataEquivalent(*co nst_cast<ComputedStyle*>(otherStyle)->rareNonInheritedData); }
1445 void clearContent(); 1445 void clearContent();
1446 void setContent(const String&, bool add = false); 1446 void setContent(const String&, bool add = false);
1447 void setContent(PassRefPtr<StyleImage>, bool add = false); 1447 void setContent(PassRefPtr<StyleImage>, bool add = false);
1448 void setContent(PassOwnPtr<CounterContent>, bool add = false); 1448 void setContent(PassOwnPtr<CounterContent>, bool add = false);
1449 void setContent(QuoteType, bool add = false); 1449 void setContent(QuoteType, bool add = false);
1450 1450
1451 const CounterDirectiveMap* counterDirectives() const; 1451 const CounterDirectiveMap* counterDirectives() const;
1452 CounterDirectiveMap& accessCounterDirectives(); 1452 CounterDirectiveMap& accessCounterDirectives();
1453 const CounterDirectives getCounterDirectives(const AtomicString& identifier) const; 1453 const CounterDirectives getCounterDirectives(const AtomicString& identifier) const;
1454 void clearIncrementDirectives(); 1454 void clearIncrementDirectives();
1455 void clearResetDirectives(); 1455 void clearResetDirectives();
1456 1456
1457 QuotesData* quotes() const { return rareInheritedData->quotes.get(); } 1457 QuotesData* quotes() const { return rareInheritedData->quotes.get(); }
1458 void setQuotes(PassRefPtr<QuotesData>); 1458 void setQuotes(PassRefPtr<QuotesData>);
1459 1459
1460 const AtomicString& hyphenString() const; 1460 const AtomicString& hyphenString() const;
1461 1461
1462 bool inheritedNotEqual(const LayoutStyle&) const; 1462 bool inheritedNotEqual(const ComputedStyle&) const;
1463 bool inheritedDataShared(const LayoutStyle&) const; 1463 bool inheritedDataShared(const ComputedStyle&) const;
1464 1464
1465 bool isDisplayReplacedType() const { return isDisplayReplacedType(display()) ; } 1465 bool isDisplayReplacedType() const { return isDisplayReplacedType(display()) ; }
1466 bool isDisplayInlineType() const { return isDisplayInlineType(display()); } 1466 bool isDisplayInlineType() const { return isDisplayInlineType(display()); }
1467 bool isOriginalDisplayInlineType() const { return isDisplayInlineType(origin alDisplay()); } 1467 bool isOriginalDisplayInlineType() const { return isDisplayInlineType(origin alDisplay()); }
1468 bool isDisplayFlexibleOrGridBox() const { return isDisplayFlexibleBox(displa y()) || isDisplayGridBox(display()); } 1468 bool isDisplayFlexibleOrGridBox() const { return isDisplayFlexibleBox(displa y()) || isDisplayGridBox(display()); }
1469 bool isDisplayFlexibleBox() const { return isDisplayFlexibleBox(display()); } 1469 bool isDisplayFlexibleBox() const { return isDisplayFlexibleBox(display()); }
1470 1470
1471 1471
1472 bool setWritingMode(WritingMode v) 1472 bool setWritingMode(WritingMode v)
1473 { 1473 {
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
1696 void setVisitedLinkBorderRightColor(const StyleColor& v) { SET_VAR(rareNonIn heritedData, m_visitedLinkBorderRightColor, v); } 1696 void setVisitedLinkBorderRightColor(const StyleColor& v) { SET_VAR(rareNonIn heritedData, m_visitedLinkBorderRightColor, v); }
1697 void setVisitedLinkBorderBottomColor(const StyleColor& v) { SET_VAR(rareNonI nheritedData, m_visitedLinkBorderBottomColor, v); } 1697 void setVisitedLinkBorderBottomColor(const StyleColor& v) { SET_VAR(rareNonI nheritedData, m_visitedLinkBorderBottomColor, v); }
1698 void setVisitedLinkBorderTopColor(const StyleColor& v) { SET_VAR(rareNonInhe ritedData, m_visitedLinkBorderTopColor, v); } 1698 void setVisitedLinkBorderTopColor(const StyleColor& v) { SET_VAR(rareNonInhe ritedData, m_visitedLinkBorderTopColor, v); }
1699 void setVisitedLinkOutlineColor(const StyleColor& v) { SET_VAR(rareNonInheri tedData, m_visitedLinkOutlineColor, v); } 1699 void setVisitedLinkOutlineColor(const StyleColor& v) { SET_VAR(rareNonInheri tedData, m_visitedLinkOutlineColor, v); }
1700 void setVisitedLinkColumnRuleColor(const StyleColor& v) { SET_VAR(rareNonInh eritedData.access()->m_multiCol, m_visitedLinkColumnRuleColor, v); } 1700 void setVisitedLinkColumnRuleColor(const StyleColor& v) { SET_VAR(rareNonInh eritedData.access()->m_multiCol, m_visitedLinkColumnRuleColor, v); }
1701 void setVisitedLinkTextDecorationColor(const StyleColor& v) { SET_VAR(rareNo nInheritedData, m_visitedLinkTextDecorationColor, v); } 1701 void setVisitedLinkTextDecorationColor(const StyleColor& v) { SET_VAR(rareNo nInheritedData, m_visitedLinkTextDecorationColor, v); }
1702 void setVisitedLinkTextEmphasisColor(const StyleColor& v) { SET_VAR_WITH_SET TER(rareInheritedData, visitedLinkTextEmphasisColor, setVisitedLinkTextEmphasisC olor, v); } 1702 void setVisitedLinkTextEmphasisColor(const StyleColor& v) { SET_VAR_WITH_SET TER(rareInheritedData, visitedLinkTextEmphasisColor, setVisitedLinkTextEmphasisC olor, v); }
1703 void setVisitedLinkTextFillColor(const StyleColor& v) { SET_VAR_WITH_SETTER( rareInheritedData, visitedLinkTextFillColor, setVisitedLinkTextFillColor, v); } 1703 void setVisitedLinkTextFillColor(const StyleColor& v) { SET_VAR_WITH_SETTER( rareInheritedData, visitedLinkTextFillColor, setVisitedLinkTextFillColor, v); }
1704 void setVisitedLinkTextStrokeColor(const StyleColor& v) { SET_VAR_WITH_SETTE R(rareInheritedData, visitedLinkTextStrokeColor, setVisitedLinkTextStrokeColor, v); } 1704 void setVisitedLinkTextStrokeColor(const StyleColor& v) { SET_VAR_WITH_SETTE R(rareInheritedData, visitedLinkTextStrokeColor, setVisitedLinkTextStrokeColor, v); }
1705 1705
1706 void inheritUnicodeBidiFrom(const LayoutStyle& parent) { noninherited_flags. unicodeBidi = parent.noninherited_flags.unicodeBidi; } 1706 void inheritUnicodeBidiFrom(const ComputedStyle& parent) { noninherited_flag s.unicodeBidi = parent.noninherited_flags.unicodeBidi; }
1707 1707
1708 bool isDisplayFlexibleBox(EDisplay display) const 1708 bool isDisplayFlexibleBox(EDisplay display) const
1709 { 1709 {
1710 return display == FLEX || display == INLINE_FLEX; 1710 return display == FLEX || display == INLINE_FLEX;
1711 } 1711 }
1712 1712
1713 bool isDisplayGridBox(EDisplay display) const 1713 bool isDisplayGridBox(EDisplay display) const
1714 { 1714 {
1715 return display == GRID || display == INLINE_GRID; 1715 return display == GRID || display == INLINE_GRID;
1716 } 1716 }
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1757 1757
1758 Color stopColor() const { return svgStyle().stopColor(); } 1758 Color stopColor() const { return svgStyle().stopColor(); }
1759 Color floodColor() const { return svgStyle().floodColor(); } 1759 Color floodColor() const { return svgStyle().floodColor(); }
1760 Color lightingColor() const { return svgStyle().lightingColor(); } 1760 Color lightingColor() const { return svgStyle().lightingColor(); }
1761 1761
1762 void appendContent(PassOwnPtr<ContentData>); 1762 void appendContent(PassOwnPtr<ContentData>);
1763 void addAppliedTextDecoration(const AppliedTextDecoration&); 1763 void addAppliedTextDecoration(const AppliedTextDecoration&);
1764 bool hasTransformOperations() const { return !rareNonInheritedData->m_transf orm->m_operations.operations().isEmpty(); } 1764 bool hasTransformOperations() const { return !rareNonInheritedData->m_transf orm->m_operations.operations().isEmpty(); }
1765 void applyMotionPathTransform(TransformationMatrix&) const; 1765 void applyMotionPathTransform(TransformationMatrix&) const;
1766 1766
1767 bool diffNeedsFullLayoutAndPaintInvalidation(const LayoutStyle& other) const ; 1767 bool diffNeedsFullLayoutAndPaintInvalidation(const ComputedStyle& other) con st;
1768 bool diffNeedsFullLayout(const LayoutStyle& other) const; 1768 bool diffNeedsFullLayout(const ComputedStyle& other) const;
1769 bool diffNeedsPaintInvalidationLayer(const LayoutStyle& other) const; 1769 bool diffNeedsPaintInvalidationLayer(const ComputedStyle& other) const;
1770 bool diffNeedsPaintInvalidationObject(const LayoutStyle& other) const; 1770 bool diffNeedsPaintInvalidationObject(const ComputedStyle& other) const;
1771 void updatePropertySpecificDifferences(const LayoutStyle& other, StyleDiffer ence&) const; 1771 void updatePropertySpecificDifferences(const ComputedStyle& other, StyleDiff erence&) const;
1772 }; 1772 };
1773 1773
1774 // FIXME: Reduce/remove the dependency on zoom adjusted int values. 1774 // FIXME: Reduce/remove the dependency on zoom adjusted int values.
1775 // The float or LayoutUnit versions of layout values should be used. 1775 // The float or LayoutUnit versions of layout values should be used.
1776 inline int adjustForAbsoluteZoom(int value, float zoomFactor) 1776 inline int adjustForAbsoluteZoom(int value, float zoomFactor)
1777 { 1777 {
1778 if (zoomFactor == 1) 1778 if (zoomFactor == 1)
1779 return value; 1779 return value;
1780 // Needed because computeLengthInt truncates (rather than rounds) when scali ng up. 1780 // Needed because computeLengthInt truncates (rather than rounds) when scali ng up.
1781 float fvalue = value; 1781 float fvalue = value;
1782 if (zoomFactor > 1) { 1782 if (zoomFactor > 1) {
1783 if (value < 0) 1783 if (value < 0)
1784 fvalue -= 0.5f; 1784 fvalue -= 0.5f;
1785 else 1785 else
1786 fvalue += 0.5f; 1786 fvalue += 0.5f;
1787 } 1787 }
1788 1788
1789 return roundForImpreciseConversion<int>(fvalue / zoomFactor); 1789 return roundForImpreciseConversion<int>(fvalue / zoomFactor);
1790 } 1790 }
1791 1791
1792 inline int adjustForAbsoluteZoom(int value, const LayoutStyle* style) 1792 inline int adjustForAbsoluteZoom(int value, const ComputedStyle* style)
1793 { 1793 {
1794 return adjustForAbsoluteZoom(value, style->effectiveZoom()); 1794 return adjustForAbsoluteZoom(value, style->effectiveZoom());
1795 } 1795 }
1796 1796
1797 inline float adjustFloatForAbsoluteZoom(float value, const LayoutStyle& style) 1797 inline float adjustFloatForAbsoluteZoom(float value, const ComputedStyle& style)
1798 { 1798 {
1799 return value / style.effectiveZoom(); 1799 return value / style.effectiveZoom();
1800 } 1800 }
1801 1801
1802 inline double adjustDoubleForAbsoluteZoom(double value, const LayoutStyle& style ) 1802 inline double adjustDoubleForAbsoluteZoom(double value, const ComputedStyle& sty le)
1803 { 1803 {
1804 return value / style.effectiveZoom(); 1804 return value / style.effectiveZoom();
1805 } 1805 }
1806 1806
1807 inline LayoutUnit adjustLayoutUnitForAbsoluteZoom(LayoutUnit value, const Layout Style& style) 1807 inline LayoutUnit adjustLayoutUnitForAbsoluteZoom(LayoutUnit value, const Comput edStyle& style)
1808 { 1808 {
1809 return value / style.effectiveZoom(); 1809 return value / style.effectiveZoom();
1810 } 1810 }
1811 1811
1812 inline double adjustScrollForAbsoluteZoom(double scrollOffset, float zoomFactor) 1812 inline double adjustScrollForAbsoluteZoom(double scrollOffset, float zoomFactor)
1813 { 1813 {
1814 return scrollOffset / zoomFactor; 1814 return scrollOffset / zoomFactor;
1815 } 1815 }
1816 1816
1817 inline double adjustScrollForAbsoluteZoom(double scrollOffset, const LayoutStyle & style) 1817 inline double adjustScrollForAbsoluteZoom(double scrollOffset, const ComputedSty le& style)
1818 { 1818 {
1819 return adjustScrollForAbsoluteZoom(scrollOffset, style.effectiveZoom()); 1819 return adjustScrollForAbsoluteZoom(scrollOffset, style.effectiveZoom());
1820 } 1820 }
1821 1821
1822 inline bool LayoutStyle::setZoom(float f) 1822 inline bool ComputedStyle::setZoom(float f)
1823 { 1823 {
1824 if (compareEqual(visual->m_zoom, f)) 1824 if (compareEqual(visual->m_zoom, f))
1825 return false; 1825 return false;
1826 visual.access()->m_zoom = f; 1826 visual.access()->m_zoom = f;
1827 setEffectiveZoom(effectiveZoom() * zoom()); 1827 setEffectiveZoom(effectiveZoom() * zoom());
1828 return true; 1828 return true;
1829 } 1829 }
1830 1830
1831 inline bool LayoutStyle::setEffectiveZoom(float f) 1831 inline bool ComputedStyle::setEffectiveZoom(float f)
1832 { 1832 {
1833 if (compareEqual(rareInheritedData->m_effectiveZoom, f)) 1833 if (compareEqual(rareInheritedData->m_effectiveZoom, f))
1834 return false; 1834 return false;
1835 rareInheritedData.access()->m_effectiveZoom = f; 1835 rareInheritedData.access()->m_effectiveZoom = f;
1836 return true; 1836 return true;
1837 } 1837 }
1838 1838
1839 inline bool LayoutStyle::isSharable() const 1839 inline bool ComputedStyle::isSharable() const
1840 { 1840 {
1841 if (unique()) 1841 if (unique())
1842 return false; 1842 return false;
1843 if (hasUniquePseudoStyle()) 1843 if (hasUniquePseudoStyle())
1844 return false; 1844 return false;
1845 return true; 1845 return true;
1846 } 1846 }
1847 1847
1848 inline bool LayoutStyle::setTextOrientation(TextOrientation textOrientation) 1848 inline bool ComputedStyle::setTextOrientation(TextOrientation textOrientation)
1849 { 1849 {
1850 if (compareEqual(rareInheritedData->m_textOrientation, textOrientation)) 1850 if (compareEqual(rareInheritedData->m_textOrientation, textOrientation))
1851 return false; 1851 return false;
1852 1852
1853 rareInheritedData.access()->m_textOrientation = textOrientation; 1853 rareInheritedData.access()->m_textOrientation = textOrientation;
1854 return true; 1854 return true;
1855 } 1855 }
1856 1856
1857 inline bool LayoutStyle::hasAnyPublicPseudoStyles() const 1857 inline bool ComputedStyle::hasAnyPublicPseudoStyles() const
1858 { 1858 {
1859 return PUBLIC_PSEUDOID_MASK & noninherited_flags.pseudoBits; 1859 return PUBLIC_PSEUDOID_MASK & noninherited_flags.pseudoBits;
1860 } 1860 }
1861 1861
1862 inline bool LayoutStyle::hasPseudoStyle(PseudoId pseudo) const 1862 inline bool ComputedStyle::hasPseudoStyle(PseudoId pseudo) const
1863 { 1863 {
1864 ASSERT(pseudo > NOPSEUDO); 1864 ASSERT(pseudo > NOPSEUDO);
1865 ASSERT(pseudo < FIRST_INTERNAL_PSEUDOID); 1865 ASSERT(pseudo < FIRST_INTERNAL_PSEUDOID);
1866 return (1 << (pseudo - 1)) & noninherited_flags.pseudoBits; 1866 return (1 << (pseudo - 1)) & noninherited_flags.pseudoBits;
1867 } 1867 }
1868 1868
1869 inline void LayoutStyle::setHasPseudoStyle(PseudoId pseudo) 1869 inline void ComputedStyle::setHasPseudoStyle(PseudoId pseudo)
1870 { 1870 {
1871 ASSERT(pseudo > NOPSEUDO); 1871 ASSERT(pseudo > NOPSEUDO);
1872 ASSERT(pseudo < FIRST_INTERNAL_PSEUDOID); 1872 ASSERT(pseudo < FIRST_INTERNAL_PSEUDOID);
1873 noninherited_flags.pseudoBits |= 1 << (pseudo - 1); 1873 noninherited_flags.pseudoBits |= 1 << (pseudo - 1);
1874 } 1874 }
1875 1875
1876 inline bool LayoutStyle::hasPseudoElementStyle() const 1876 inline bool ComputedStyle::hasPseudoElementStyle() const
1877 { 1877 {
1878 return noninherited_flags.pseudoBits & PSEUDO_ELEMENT_MASK; 1878 return noninherited_flags.pseudoBits & PSEUDO_ELEMENT_MASK;
1879 } 1879 }
1880 1880
1881 } // namespace blink 1881 } // namespace blink
1882 1882
1883 #endif // LayoutStyle_h 1883 #endif // ComputedStyle_h
OLDNEW
« no previous file with comments | « Source/core/layout/style/CachedUAStyle.h ('k') | Source/core/layout/style/ComputedStyle.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698