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

Side by Side Diff: third_party/WebKit/Source/core/css/CSSPrimitiveValue.h

Issue 1306823004: Split out String, URI and CustomIdent from CSSPrimitiveValue (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@split_out_attr_values
Patch Set: Rebase Created 5 years, 2 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
OLDNEW
1 /* 1 /*
2 * (C) 1999-2003 Lars Knoll (knoll@kde.org) 2 * (C) 1999-2003 Lars Knoll (knoll@kde.org)
3 * Copyright (C) 2004, 2005, 2006, 2008 Apple Inc. All rights reserved. 3 * Copyright (C) 2004, 2005, 2006, 2008 Apple Inc. All rights reserved.
4 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> 4 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org>
5 * 5 *
6 * This library is free software; you can redistribute it and/or 6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public 7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either 8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version. 9 * version 2 of the License, or (at your option) any later version.
10 * 10 *
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 Points, 79 Points,
80 Picas, 80 Picas,
81 Degrees, 81 Degrees,
82 Radians, 82 Radians,
83 Gradians, 83 Gradians,
84 Turns, 84 Turns,
85 Milliseconds, 85 Milliseconds,
86 Seconds, 86 Seconds,
87 Hertz, 87 Hertz,
88 Kilohertz, 88 Kilohertz,
89 CustomIdentifier,
90 URI,
91 RGBColor, 89 RGBColor,
92 ViewportWidth, 90 ViewportWidth,
93 ViewportHeight, 91 ViewportHeight,
94 ViewportMin, 92 ViewportMin,
95 ViewportMax, 93 ViewportMax,
96 DotsPerPixel, 94 DotsPerPixel,
97 DotsPerInch, 95 DotsPerInch,
98 DotsPerCentimeter, 96 DotsPerCentimeter,
99 Fraction, 97 Fraction,
100 Integer, 98 Integer,
101 Rems, 99 Rems,
102 Chs, 100 Chs,
103 Calc, 101 Calc,
104 CalcPercentageWithNumber, 102 CalcPercentageWithNumber,
105 CalcPercentageWithLength, 103 CalcPercentageWithLength,
106 String,
107 PropertyID, 104 PropertyID,
108 ValueID, 105 ValueID,
109 106
110 // This value is used to handle quirky margins in reflow roots (body, td , and th) like WinIE. 107 // This value is used to handle quirky margins in reflow roots (body, td , and th) like WinIE.
111 // The basic idea is that a stylesheet can use the value __qem (for quir ky em) instead of em. 108 // The basic idea is that a stylesheet can use the value __qem (for quir ky em) instead of em.
112 // When the quirky value is used, if you're in quirks mode, the margin w ill collapse away 109 // When the quirky value is used, if you're in quirks mode, the margin w ill collapse away
113 // inside a table cell. This quirk is specified in the HTML spec but our impl is different. 110 // inside a table cell. This quirk is specified in the HTML spec but our impl is different.
114 // TODO: Remove this. crbug.com/443952 111 // TODO: Remove this. crbug.com/443952
115 QuirkyEms, 112 QuirkyEms,
116 }; 113 };
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 151
155 static UnitType fromName(const String& unit); 152 static UnitType fromName(const String& unit);
156 153
157 bool isAngle() const 154 bool isAngle() const
158 { 155 {
159 return type() == UnitType::Degrees 156 return type() == UnitType::Degrees
160 || type() == UnitType::Radians 157 || type() == UnitType::Radians
161 || type() == UnitType::Gradians 158 || type() == UnitType::Gradians
162 || type() == UnitType::Turns; 159 || type() == UnitType::Turns;
163 } 160 }
164 bool isCustomIdent() const { return type() == UnitType::CustomIdentifier; }
165 bool isFontRelativeLength() const 161 bool isFontRelativeLength() const
166 { 162 {
167 return type() == UnitType::QuirkyEms 163 return type() == UnitType::QuirkyEms
168 || type() == UnitType::Ems 164 || type() == UnitType::Ems
169 || type() == UnitType::Exs 165 || type() == UnitType::Exs
170 || type() == UnitType::Rems 166 || type() == UnitType::Rems
171 || type() == UnitType::Chs; 167 || type() == UnitType::Chs;
172 } 168 }
173 bool isQuirkyEms() const { return type() == UnitType::QuirkyEms; } 169 bool isQuirkyEms() const { return type() == UnitType::QuirkyEms; }
174 bool isViewportPercentageLength() const { return isViewportPercentageLength( type()); } 170 bool isViewportPercentageLength() const { return isViewportPercentageLength( type()); }
175 static bool isViewportPercentageLength(UnitType type) { return type >= UnitT ype::ViewportWidth && type <= UnitType::ViewportMax; } 171 static bool isViewportPercentageLength(UnitType type) { return type >= UnitT ype::ViewportWidth && type <= UnitType::ViewportMax; }
176 static bool isLength(UnitType type) 172 static bool isLength(UnitType type)
177 { 173 {
178 return (type >= UnitType::Ems && type <= UnitType::Picas) || type == Uni tType::QuirkyEms || type == UnitType::Rems || type == UnitType::Chs || isViewpor tPercentageLength(type); 174 return (type >= UnitType::Ems && type <= UnitType::Picas) || type == Uni tType::QuirkyEms || type == UnitType::Rems || type == UnitType::Chs || isViewpor tPercentageLength(type);
179 } 175 }
180 bool isLength() const { return isLength(typeWithCalcResolved()); } 176 bool isLength() const { return isLength(typeWithCalcResolved()); }
181 bool isNumber() const { return typeWithCalcResolved() == UnitType::Number || typeWithCalcResolved() == UnitType::Integer; } 177 bool isNumber() const { return typeWithCalcResolved() == UnitType::Number || typeWithCalcResolved() == UnitType::Integer; }
182 bool isPercentage() const { return typeWithCalcResolved() == UnitType::Perce ntage; } 178 bool isPercentage() const { return typeWithCalcResolved() == UnitType::Perce ntage; }
183 bool isPropertyID() const { return type() == UnitType::PropertyID; } 179 bool isPropertyID() const { return type() == UnitType::PropertyID; }
184 bool isPx() const { return typeWithCalcResolved() == UnitType::Pixels; } 180 bool isPx() const { return typeWithCalcResolved() == UnitType::Pixels; }
185 bool isRGBColor() const { return type() == UnitType::RGBColor; } 181 bool isRGBColor() const { return type() == UnitType::RGBColor; }
186 bool isString() const { return type() == UnitType::String; }
187 bool isTime() const { return type() == UnitType::Seconds || type() == UnitTy pe::Milliseconds; } 182 bool isTime() const { return type() == UnitType::Seconds || type() == UnitTy pe::Milliseconds; }
188 bool isURI() const { return type() == UnitType::URI; }
189 bool isCalculated() const { return type() == UnitType::Calc; } 183 bool isCalculated() const { return type() == UnitType::Calc; }
190 bool isCalculatedPercentageWithNumber() const { return typeWithCalcResolved( ) == UnitType::CalcPercentageWithNumber; } 184 bool isCalculatedPercentageWithNumber() const { return typeWithCalcResolved( ) == UnitType::CalcPercentageWithNumber; }
191 bool isCalculatedPercentageWithLength() const { return typeWithCalcResolved( ) == UnitType::CalcPercentageWithLength; } 185 bool isCalculatedPercentageWithLength() const { return typeWithCalcResolved( ) == UnitType::CalcPercentageWithLength; }
192 static bool isDotsPerInch(UnitType type) { return type == UnitType::DotsPerI nch; } 186 static bool isDotsPerInch(UnitType type) { return type == UnitType::DotsPerI nch; }
193 static bool isDotsPerPixel(UnitType type) { return type == UnitType::DotsPer Pixel; } 187 static bool isDotsPerPixel(UnitType type) { return type == UnitType::DotsPer Pixel; }
194 static bool isDotsPerCentimeter(UnitType type) { return type == UnitType::Do tsPerCentimeter; } 188 static bool isDotsPerCentimeter(UnitType type) { return type == UnitType::Do tsPerCentimeter; }
195 static bool isResolution(UnitType type) { return type >= UnitType::DotsPerPi xel && type <= UnitType::DotsPerCentimeter; } 189 static bool isResolution(UnitType type) { return type >= UnitType::DotsPerPi xel && type <= UnitType::DotsPerCentimeter; }
196 bool isFlex() const { return typeWithCalcResolved() == UnitType::Fraction; } 190 bool isFlex() const { return typeWithCalcResolved() == UnitType::Fraction; }
197 bool isValueID() const { return type() == UnitType::ValueID; } 191 bool isValueID() const { return type() == UnitType::ValueID; }
198 bool colorIsDerivedFromElement() const; 192 bool colorIsDerivedFromElement() const;
199 193
200 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> createIdentifier(CSSValueID valueID) 194 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> createIdentifier(CSSValueID valueID)
201 { 195 {
202 return adoptRefWillBeNoop(new CSSPrimitiveValue(valueID)); 196 return adoptRefWillBeNoop(new CSSPrimitiveValue(valueID));
203 } 197 }
204 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> createIdentifier(CSSPropert yID propertyID) 198 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> createIdentifier(CSSPropert yID propertyID)
205 { 199 {
206 return adoptRefWillBeNoop(new CSSPrimitiveValue(propertyID)); 200 return adoptRefWillBeNoop(new CSSPrimitiveValue(propertyID));
207 } 201 }
208 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> createColor(RGBA32 rgbValue ) 202 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> createColor(RGBA32 rgbValue )
209 { 203 {
210 return adoptRefWillBeNoop(new CSSPrimitiveValue(rgbValue)); 204 return adoptRefWillBeNoop(new CSSPrimitiveValue(rgbValue));
211 } 205 }
212 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> create(double value, UnitTy pe type) 206 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> create(double value, UnitTy pe type)
213 { 207 {
214 return adoptRefWillBeNoop(new CSSPrimitiveValue(value, type)); 208 return adoptRefWillBeNoop(new CSSPrimitiveValue(value, type));
215 } 209 }
216 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> create(const String& value, UnitType type)
217 {
218 return adoptRefWillBeNoop(new CSSPrimitiveValue(value, type));
219 }
220 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> create(const Length& value, float zoom) 210 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> create(const Length& value, float zoom)
221 { 211 {
222 return adoptRefWillBeNoop(new CSSPrimitiveValue(value, zoom)); 212 return adoptRefWillBeNoop(new CSSPrimitiveValue(value, zoom));
223 } 213 }
224 template<typename T> static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> create (T value) 214 template<typename T> static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> create (T value)
225 { 215 {
226 return adoptRefWillBeNoop(new CSSPrimitiveValue(value)); 216 return adoptRefWillBeNoop(new CSSPrimitiveValue(value));
227 } 217 }
228 218
229 ~CSSPrimitiveValue(); 219 ~CSSPrimitiveValue();
230 220
231 void cleanup(); 221 void cleanup();
232 222
233 UnitType typeWithCalcResolved() const; 223 UnitType typeWithCalcResolved() const;
234 224
235 double computeDegrees() const; 225 double computeDegrees() const;
236 double computeSeconds() const; 226 double computeSeconds() const;
237 227
238 // Computes a length in pixels, resolving relative lengths 228 // Computes a length in pixels, resolving relative lengths
239 template<typename T> T computeLength(const CSSToLengthConversionData&) const ; 229 template<typename T> T computeLength(const CSSToLengthConversionData&) const ;
240 230
241 // Converts to a Length (Fixed, Percent or Calculated) 231 // Converts to a Length (Fixed, Percent or Calculated)
242 Length convertToLength(const CSSToLengthConversionData&) const; 232 Length convertToLength(const CSSToLengthConversionData&) const;
243 233
244 double getDoubleValue() const; 234 double getDoubleValue() const;
245 float getFloatValue() const { return getValue<float>(); } 235 float getFloatValue() const { return getValue<float>(); }
246 int getIntValue() const { return getValue<int>(); } 236 int getIntValue() const { return getValue<int>(); }
247 template<typename T> inline T getValue() const { return clampTo<T>(getDouble Value()); } 237 template<typename T> inline T getValue() const { return clampTo<T>(getDouble Value()); }
248 238
249 String getStringValue() const;
250 RGBA32 getRGBA32Value() const { ASSERT(isRGBColor()); return m_value.rgbcolo r; } 239 RGBA32 getRGBA32Value() const { ASSERT(isRGBColor()); return m_value.rgbcolo r; }
251 240
252 CSSCalcValue* cssCalcValue() const { ASSERT(isCalculated()); return m_value. calc; } 241 CSSCalcValue* cssCalcValue() const { ASSERT(isCalculated()); return m_value. calc; }
253 CSSPropertyID getPropertyID() const { ASSERT(isPropertyID()); return m_value .propertyID; } 242 CSSPropertyID getPropertyID() const { ASSERT(isPropertyID()); return m_value .propertyID; }
254 243
255 CSSValueID getValueID() const { return type() == UnitType::ValueID ? m_value .valueID : CSSValueInvalid; } 244 CSSValueID getValueID() const { return type() == UnitType::ValueID ? m_value .valueID : CSSValueInvalid; }
256 245
257 template<typename T> inline operator T() const; // Defined in CSSPrimitiveVa lueMappings.h 246 template<typename T> inline operator T() const; // Defined in CSSPrimitiveVa lueMappings.h
258 247
259 static const char* unitTypeToString(UnitType); 248 static const char* unitTypeToString(UnitType);
260 String customCSSText() const; 249 String customCSSText() const;
261 250
262 bool equals(const CSSPrimitiveValue&) const; 251 bool equals(const CSSPrimitiveValue&) const;
263 252
264 DECLARE_TRACE_AFTER_DISPATCH(); 253 DECLARE_TRACE_AFTER_DISPATCH();
265 254
266 static UnitType canonicalUnitTypeForCategory(UnitCategory); 255 static UnitType canonicalUnitTypeForCategory(UnitCategory);
267 static double conversionToCanonicalUnitsScaleFactor(UnitType); 256 static double conversionToCanonicalUnitsScaleFactor(UnitType);
268 257
269 // Returns true and populates lengthUnitType, if unitType is a length unit. Otherwise, returns false. 258 // Returns true and populates lengthUnitType, if unitType is a length unit. Otherwise, returns false.
270 static bool unitTypeToLengthUnitType(UnitType, LengthUnitType&); 259 static bool unitTypeToLengthUnitType(UnitType, LengthUnitType&);
271 static UnitType lengthUnitTypeToUnitType(LengthUnitType); 260 static UnitType lengthUnitTypeToUnitType(LengthUnitType);
272 261
273 private: 262 private:
274 CSSPrimitiveValue(CSSValueID); 263 CSSPrimitiveValue(CSSValueID);
275 CSSPrimitiveValue(CSSPropertyID); 264 CSSPrimitiveValue(CSSPropertyID);
276 CSSPrimitiveValue(RGBA32 color); 265 CSSPrimitiveValue(RGBA32 color);
277 CSSPrimitiveValue(const Length&, float zoom); 266 CSSPrimitiveValue(const Length&, float zoom);
278 CSSPrimitiveValue(const String&, UnitType);
279 CSSPrimitiveValue(double, UnitType); 267 CSSPrimitiveValue(double, UnitType);
280 268
281 template<typename T> CSSPrimitiveValue(T); // Defined in CSSPrimitiveValueMa ppings.h 269 template<typename T> CSSPrimitiveValue(T); // Defined in CSSPrimitiveValueMa ppings.h
282 template<typename T> CSSPrimitiveValue(T* val) 270 template<typename T> CSSPrimitiveValue(T* val)
283 : CSSValue(PrimitiveClass) 271 : CSSValue(PrimitiveClass)
284 { 272 {
285 init(PassRefPtrWillBeRawPtr<T>(val)); 273 init(PassRefPtrWillBeRawPtr<T>(val));
286 } 274 }
287 275
288 template<typename T> CSSPrimitiveValue(PassRefPtrWillBeRawPtr<T> val) 276 template<typename T> CSSPrimitiveValue(PassRefPtrWillBeRawPtr<T> val)
(...skipping 11 matching lines...) Expand all
300 void init(PassRefPtrWillBeRawPtr<CSSCalcValue>); 288 void init(PassRefPtrWillBeRawPtr<CSSCalcValue>);
301 289
302 double computeLengthDouble(const CSSToLengthConversionData&) const; 290 double computeLengthDouble(const CSSToLengthConversionData&) const;
303 291
304 inline UnitType type() const { return static_cast<UnitType>(m_primitiveUnitT ype); } 292 inline UnitType type() const { return static_cast<UnitType>(m_primitiveUnitT ype); }
305 293
306 union { 294 union {
307 CSSPropertyID propertyID; 295 CSSPropertyID propertyID;
308 CSSValueID valueID; 296 CSSValueID valueID;
309 double num; 297 double num;
310 StringImpl* string;
311 RGBA32 rgbcolor; 298 RGBA32 rgbcolor;
312 // FIXME: oilpan: Should be a member, but no support for members in unio ns. Just trace the raw ptr for now. 299 // FIXME: oilpan: Should be a member, but no support for members in unio ns. Just trace the raw ptr for now.
313 CSSCalcValue* calc; 300 CSSCalcValue* calc;
314 } m_value; 301 } m_value;
315 }; 302 };
316 303
317 using CSSLengthArray = CSSPrimitiveValue::CSSLengthArray; 304 using CSSLengthArray = CSSPrimitiveValue::CSSLengthArray;
318 using CSSLengthTypeArray = CSSPrimitiveValue::CSSLengthTypeArray; 305 using CSSLengthTypeArray = CSSPrimitiveValue::CSSLengthTypeArray;
319 306
320 DEFINE_CSS_VALUE_TYPE_CASTS(CSSPrimitiveValue, isPrimitiveValue()); 307 DEFINE_CSS_VALUE_TYPE_CASTS(CSSPrimitiveValue, isPrimitiveValue());
321 308
322 } // namespace blink 309 } // namespace blink
323 310
324 #endif // CSSPrimitiveValue_h 311 #endif // CSSPrimitiveValue_h
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/css/CSSCustomIdentValue.cpp ('k') | third_party/WebKit/Source/core/css/CSSPrimitiveValue.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698