• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
3  *           (C) 2000 Antti Koivisto (koivisto@kde.org)
4  *           (C) 2000 Dirk Mueller (mueller@kde.org)
5  * Copyright (C) 2003, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
6  * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com)
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Library General Public
10  * License as published by the Free Software Foundation; either
11  * version 2 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Library General Public License for more details.
17  *
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
20  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21  * Boston, MA 02110-1301, USA.
22  *
23  */
24 
25 #ifndef StyleRareNonInheritedData_h
26 #define StyleRareNonInheritedData_h
27 
28 #include "core/css/StyleColor.h"
29 #include "core/rendering/ClipPathOperation.h"
30 #include "core/rendering/style/BasicShapes.h"
31 #include "core/rendering/style/CounterDirectives.h"
32 #include "core/rendering/style/CursorData.h"
33 #include "core/rendering/style/DataRef.h"
34 #include "core/rendering/style/FillLayer.h"
35 #include "core/rendering/style/LineClampValue.h"
36 #include "core/rendering/style/NinePieceImage.h"
37 #include "core/rendering/style/RenderStyleConstants.h"
38 #include "core/rendering/style/ShapeValue.h"
39 #include "platform/LengthPoint.h"
40 #include "wtf/OwnPtr.h"
41 #include "wtf/PassRefPtr.h"
42 #include "wtf/Vector.h"
43 
44 namespace blink {
45 
46 class ContentData;
47 class CSSAnimationData;
48 class CSSTransitionData;
49 class LengthSize;
50 class ShadowList;
51 class StyleDeprecatedFlexibleBoxData;
52 class StyleFilterData;
53 class StyleFlexibleBoxData;
54 class StyleGridData;
55 class StyleGridItemData;
56 class StyleMarqueeData;
57 class StyleMultiColData;
58 class StyleReflection;
59 class StyleTransformData;
60 class StyleWillChangeData;
61 
62 // Page size type.
63 // StyleRareNonInheritedData::m_pageSize is meaningful only when
64 // StyleRareNonInheritedData::m_pageSizeType is PAGE_SIZE_RESOLVED.
65 enum PageSizeType {
66     PAGE_SIZE_AUTO, // size: auto
67     PAGE_SIZE_AUTO_LANDSCAPE, // size: landscape
68     PAGE_SIZE_AUTO_PORTRAIT, // size: portrait
69     PAGE_SIZE_RESOLVED // Size is fully resolved.
70 };
71 
72 // This struct is for rarely used non-inherited CSS3, CSS2, and WebKit-specific properties.
73 // By grouping them together, we save space, and only allocate this object when someone
74 // actually uses one of these properties.
75 class StyleRareNonInheritedData : public RefCounted<StyleRareNonInheritedData> {
76 public:
create()77     static PassRefPtr<StyleRareNonInheritedData> create() { return adoptRef(new StyleRareNonInheritedData); }
copy()78     PassRefPtr<StyleRareNonInheritedData> copy() const { return adoptRef(new StyleRareNonInheritedData(*this)); }
79     ~StyleRareNonInheritedData();
80 
81     bool operator==(const StyleRareNonInheritedData&) const;
82     bool operator!=(const StyleRareNonInheritedData& o) const { return !(*this == o); }
83 
84     bool contentDataEquivalent(const StyleRareNonInheritedData&) const;
85     bool counterDataEquivalent(const StyleRareNonInheritedData&) const;
86     bool shadowDataEquivalent(const StyleRareNonInheritedData&) const;
87     bool reflectionDataEquivalent(const StyleRareNonInheritedData&) const;
88     bool animationDataEquivalent(const StyleRareNonInheritedData&) const;
89     bool transitionDataEquivalent(const StyleRareNonInheritedData&) const;
90     bool hasFilters() const;
hasOpacity()91     bool hasOpacity() const { return opacity < 1; }
92 
93     float opacity; // Whether or not we're transparent.
94 
95     float m_aspectRatioDenominator;
96     float m_aspectRatioNumerator;
97 
98     float m_perspective;
99     Length m_perspectiveOriginX;
100     Length m_perspectiveOriginY;
101 
102     LineClampValue lineClamp; // An Apple extension.
103     DraggableRegionMode m_draggableRegionMode;
104 
105     DataRef<StyleDeprecatedFlexibleBoxData> m_deprecatedFlexibleBox; // Flexible box properties
106     DataRef<StyleFlexibleBoxData> m_flexibleBox;
107     DataRef<StyleMarqueeData> m_marquee; // Marquee properties
108     DataRef<StyleMultiColData> m_multiCol; //  CSS3 multicol properties
109     DataRef<StyleTransformData> m_transform; // Transform properties (rotate, scale, skew, etc.)
110     DataRef<StyleWillChangeData> m_willChange; // CSS Will Change
111 
112     DataRef<StyleFilterData> m_filter; // Filter operations (url, sepia, blur, etc.)
113 
114     DataRef<StyleGridData> m_grid;
115     DataRef<StyleGridItemData> m_gridItem;
116 
117     OwnPtr<ContentData> m_content;
118     OwnPtr<CounterDirectiveMap> m_counterDirectives;
119 
120     RefPtr<ShadowList> m_boxShadow;
121 
122     RefPtr<StyleReflection> m_boxReflect;
123 
124     OwnPtrWillBePersistent<CSSAnimationData> m_animations;
125     OwnPtrWillBePersistent<CSSTransitionData> m_transitions;
126 
127     FillLayer m_mask;
128     NinePieceImage m_maskBoxImage;
129 
130     LengthSize m_pageSize;
131 
132     RefPtr<ShapeValue> m_shapeOutside;
133     Length m_shapeMargin;
134     float m_shapeImageThreshold;
135 
136     RefPtr<ClipPathOperation> m_clipPath;
137 
138     StyleColor m_textDecorationColor;
139     StyleColor m_visitedLinkTextDecorationColor;
140     StyleColor m_visitedLinkBackgroundColor;
141     StyleColor m_visitedLinkOutlineColor;
142     StyleColor m_visitedLinkBorderLeftColor;
143     StyleColor m_visitedLinkBorderRightColor;
144     StyleColor m_visitedLinkBorderTopColor;
145     StyleColor m_visitedLinkBorderBottomColor;
146 
147     int m_order;
148 
149     LengthPoint m_objectPosition;
150 
151     Vector<String> m_callbackSelectors;
152 
153     unsigned m_pageSizeType : 2; // PageSizeType
154     unsigned m_transformStyle3D : 1; // ETransformStyle3D
155     unsigned m_backfaceVisibility : 1; // EBackfaceVisibility
156 
157     unsigned m_alignContent : 3; // EAlignContent
158     unsigned m_alignItems : 4; // ItemPosition
159     unsigned m_alignItemsOverflowAlignment : 2; // OverflowAlignment
160     unsigned m_alignSelf : 4; // ItemPosition
161     unsigned m_alignSelfOverflowAlignment : 2; // OverflowAlignment
162     unsigned m_justifyContent : 3; // EJustifyContent
163 
164     unsigned userDrag : 2; // EUserDrag
165     unsigned textOverflow : 1; // Whether or not lines that spill out should be truncated with "..."
166     unsigned marginBeforeCollapse : 2; // EMarginCollapse
167     unsigned marginAfterCollapse : 2; // EMarginCollapse
168     unsigned m_appearance : 6; // EAppearance
169     unsigned m_borderFit : 1; // EBorderFit
170     unsigned m_textCombine : 1; // CSS3 text-combine properties
171 
172     unsigned m_textDecorationStyle : 3; // TextDecorationStyle
173     unsigned m_wrapFlow: 3; // WrapFlow
174     unsigned m_wrapThrough: 1; // WrapThrough
175 
176     unsigned m_hasCurrentOpacityAnimation : 1;
177     unsigned m_hasCurrentTransformAnimation : 1;
178     unsigned m_hasCurrentFilterAnimation : 1;
179     unsigned m_runningOpacityAnimationOnCompositor : 1;
180     unsigned m_runningTransformAnimationOnCompositor : 1;
181     unsigned m_runningFilterAnimationOnCompositor : 1;
182 
183     unsigned m_hasAspectRatio : 1; // Whether or not an aspect ratio has been specified.
184 
185     unsigned m_effectiveBlendMode: 5; // EBlendMode
186 
187     unsigned m_touchAction : TouchActionBits; // TouchAction
188 
189     unsigned m_objectFit : 3; // ObjectFit
190 
191     unsigned m_isolation : 1; // Isolation
192 
193     unsigned m_justifyItems : 4; // ItemPosition
194     unsigned m_justifyItemsOverflowAlignment : 2; // OverflowAlignment
195     unsigned m_justifyItemsPositionType: 1; // Whether or not alignment uses the 'legacy' keyword.
196 
197     unsigned m_justifySelf : 4; // ItemPosition
198     unsigned m_justifySelfOverflowAlignment : 2; // OverflowAlignment
199 
200     // ScrollBehavior. 'scroll-behavior' has 2 accepted values, but ScrollBehavior has a third
201     // value (that can only be specified using CSSOM scroll APIs) so 2 bits are needed.
202     unsigned m_scrollBehavior: 2;
203 
204     // Plugins require accelerated compositing for reasons external to blink.
205     // In which case, we need to update the RenderStyle on the RenderEmbeddedObject,
206     // so store this bit so that the style actually changes when the plugin
207     // becomes composited.
208     unsigned m_requiresAcceleratedCompositingForExternalReasons: 1;
209 
210     // Whether the transform (if it exists) is stored in the element's inline style.
211     unsigned m_hasInlineTransform : 1;
212 
213 private:
214     StyleRareNonInheritedData();
215     StyleRareNonInheritedData(const StyleRareNonInheritedData&);
216 };
217 
218 } // namespace blink
219 
220 #endif // StyleRareNonInheritedData_h
221