18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (C) 1999-2003 Lars Knoll (knoll@kde.org) 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2004, 2005, 2006, 2008 Apple Inc. All rights reserved. 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version. 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful, 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details. 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB. If not, write to 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA. 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef CSSPrimitiveValue_h 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define CSSPrimitiveValue_h 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CSSValue.h" 260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "Color.h" 27dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include <wtf/Forward.h> 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/PassRefPtr.h> 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass Counter; 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass DashboardRegion; 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass Pair; 350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochclass RGBColor; 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass Rect; 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass RenderStyle; 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct Length; 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 415abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merricktemplate<typename T, T max, T min> inline T roundForImpreciseConversion(double value) 425abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{ 435abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick // Dimension calculations are imprecise, often resulting in values of e.g. 445abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick // 44.99998. We need to go ahead and round if we're really close to the 455abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick // next integer value. 465abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick value += (value < 0) ? -0.01 : +0.01; 475abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick return ((value > max) || (value < min)) ? 0 : static_cast<T>(value); 485abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick} 495abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass CSSPrimitiveValue : public CSSValue { 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic: 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project enum UnitTypes { 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSS_UNKNOWN = 0, 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSS_NUMBER = 1, 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSS_PERCENTAGE = 2, 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSS_EMS = 3, 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSS_EXS = 4, 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSS_PX = 5, 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSS_CM = 6, 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSS_MM = 7, 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSS_IN = 8, 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSS_PT = 9, 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSS_PC = 10, 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSS_DEG = 11, 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSS_RAD = 12, 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSS_GRAD = 13, 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSS_MS = 14, 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSS_S = 15, 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSS_HZ = 16, 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSS_KHZ = 17, 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSS_DIMENSION = 18, 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSS_STRING = 19, 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSS_URI = 20, 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSS_IDENT = 21, 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSS_ATTR = 22, 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSS_COUNTER = 23, 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSS_RECT = 24, 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSS_RGBCOLOR = 25, 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSS_PAIR = 100, // We envision this being exposed as a means of getting computed style values for pairs (border-spacing/radius, background-position, etc.) 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSS_DASHBOARD_REGION = 101, // FIXME: Dashboard region should not be a primitive value. 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSS_UNICODE_RANGE = 102, 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // These next types are just used internally to allow us to translate back and forth from CSSPrimitiveValues to CSSParserValues. 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSS_PARSER_OPERATOR = 103, 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSS_PARSER_INTEGER = 104, 866b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner CSS_PARSER_HEXCOLOR = 105, 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // This is used internally for unknown identifiers 896b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner CSS_PARSER_IDENTIFIER = 106, 90635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // These are from CSS3 Values and Units, but that isn't a finished standard yet 926b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner CSS_TURN = 107, 9381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch CSS_REMS = 108, 9481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 9581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // This is used internally for counter names (as opposed to counter values) 9681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch CSS_COUNTER_NAME = 109 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }; 988f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 996b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // This enum follows the CSSParser::Units enum augmented with UNIT_FREQUENCY for frequencies. 1006b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner enum UnitCategory { 1016b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner UNumber, 1026b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner UPercent, 1036b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner ULength, 1046b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner UAngle, 1056b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner UTime, 1066b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner UFrequency, 1076b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner UOther 1086b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner }; 1096b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 1100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch static bool isUnitTypeLength(int type) { return (type > CSSPrimitiveValue::CSS_PERCENTAGE && type < CSSPrimitiveValue::CSS_DEG) || 1110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch type == CSSPrimitiveValue::CSS_REMS; } 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch static PassRefPtr<CSSPrimitiveValue> createIdentifier(int identifier) { return adoptRef(new CSSPrimitiveValue(identifier)); } 11481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch static PassRefPtr<CSSPrimitiveValue> createColor(unsigned rgbValue) { return adoptRef(new CSSPrimitiveValue(rgbValue)); } 11581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch static PassRefPtr<CSSPrimitiveValue> create(double value, UnitTypes type) { return adoptRef(new CSSPrimitiveValue(value, type)); } 11681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch static PassRefPtr<CSSPrimitiveValue> create(const String& value, UnitTypes type) { return adoptRef(new CSSPrimitiveValue(value, type)); } 117635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename T> static PassRefPtr<CSSPrimitiveValue> create(T value) 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return adoptRef(new CSSPrimitiveValue(value)); 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual ~CSSPrimitiveValue(); 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void cleanup(); 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned short primitiveType() const { return m_type; } 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /* 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * computes a length in pixels out of the given CSSValue. Need the RenderStyle to get 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the fontinfo in case val is defined in em or ex. 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The metrics have to be a bit different for screen and printer output. 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * For screen output we assume 1 inch == 72 px, for printer we assume 300 dpi 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * this is screen/printer dependent, so we probably need a config option for this, 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * and some tool to calibrate. 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 1390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch int computeLengthInt(RenderStyle* currStyle, RenderStyle* rootStyle); 1400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch int computeLengthInt(RenderStyle* currStyle, RenderStyle* rootStyle, double multiplier); 1410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch int computeLengthIntForLength(RenderStyle* currStyle, RenderStyle* rootStyle); 1420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch int computeLengthIntForLength(RenderStyle* currStyle, RenderStyle* rootStyle, double multiplier); 1430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch short computeLengthShort(RenderStyle* currStyle, RenderStyle* rootStyle); 1440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch short computeLengthShort(RenderStyle* currStyle, RenderStyle* rootStyle, double multiplier); 1450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch float computeLengthFloat(RenderStyle* currStyle, RenderStyle* rootStyle, bool computingFontSize = false); 1460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch float computeLengthFloat(RenderStyle* currStyle, RenderStyle* rootStyle, double multiplier, bool computingFontSize = false); 1470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch double computeLengthDouble(RenderStyle* currentStyle, RenderStyle* rootStyle, double multiplier = 1.0, bool computingFontSize = false); 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // use with care!!! 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setPrimitiveType(unsigned short type) { m_type = type; } 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1526b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner double getDoubleValue(unsigned short unitType, ExceptionCode&) const; 1536b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner double getDoubleValue(unsigned short unitType) const; 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project double getDoubleValue() const { return m_value.num; } 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setFloatValue(unsigned short unitType, double floatValue, ExceptionCode&); 1576b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner float getFloatValue(unsigned short unitType, ExceptionCode& ec) const { return static_cast<float>(getDoubleValue(unitType, ec)); } 1586b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner float getFloatValue(unsigned short unitType) const { return static_cast<float>(getDoubleValue(unitType)); } 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float getFloatValue() const { return static_cast<float>(m_value.num); } 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1616b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner int getIntValue(unsigned short unitType, ExceptionCode& ec) const { return static_cast<int>(getDoubleValue(unitType, ec)); } 1626b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner int getIntValue(unsigned short unitType) const { return static_cast<int>(getDoubleValue(unitType)); } 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int getIntValue() const { return static_cast<int>(m_value.num); } 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setStringValue(unsigned short stringType, const String& stringValue, ExceptionCode&); 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String getStringValue(ExceptionCode&) const; 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String getStringValue() const; 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Counter* getCounterValue(ExceptionCode&) const; 1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Counter* getCounterValue() const { return m_type != CSS_COUNTER ? 0 : m_value.counter; } 1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Rect* getRectValue(ExceptionCode&) const; 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Rect* getRectValue() const { return m_type != CSS_RECT ? 0 : m_value.rect; } 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 175231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block PassRefPtr<RGBColor> getRGBColorValue(ExceptionCode&) const; 1760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch RGBA32 getRGBA32Value() const { return m_type != CSS_RGBCOLOR ? 0 : m_value.rgbcolor; } 1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Pair* getPairValue(ExceptionCode&) const; 1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Pair* getPairValue() const { return m_type != CSS_PAIR ? 0 : m_value.pair; } 1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project DashboardRegion* getDashboardRegionValue() const { return m_type != CSS_DASHBOARD_REGION ? 0 : m_value.region; } 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1836b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner int getIdent() const; 1840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch template<typename T> inline operator T() const; // Defined in CSSPrimitiveValueMappings.h 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool parseString(const String&, bool = false); 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual String cssText() const; 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isQuirkValue() { return false; } 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 191635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual void addSubresourceStyleURLs(ListHashSet<KURL>&, const CSSStyleSheet*); 192635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprotected: 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: int vs. unsigned overloading is too subtle to distinguish the color and identifier cases. 1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSSPrimitiveValue(int ident); 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSSPrimitiveValue(double, UnitTypes); 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSSPrimitiveValue(const String&, UnitTypes); 1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate: 2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSSPrimitiveValue(); 2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSSPrimitiveValue(unsigned color); // RGB value 2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CSSPrimitiveValue(const Length&); 2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename T> CSSPrimitiveValue(T); // Defined in CSSPrimitiveValueMappings.h 2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename T> CSSPrimitiveValue(T* val) { init(PassRefPtr<T>(val)); } 2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename T> CSSPrimitiveValue(PassRefPtr<T> val) { init(val); } 2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static void create(int); // compile-time guard 2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static void create(unsigned); // compile-time guard 2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename T> operator T*(); // compile-time guard 2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 21206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen static PassRefPtr<CSSPrimitiveValue> createUncachedIdentifier(int identifier); 21306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen static PassRefPtr<CSSPrimitiveValue> createUncachedColor(unsigned rgbValue); 21406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen static PassRefPtr<CSSPrimitiveValue> createUncached(double value, UnitTypes type); 21506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 2166b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner static UnitTypes canonicalUnitTypeForCategory(UnitCategory category); 2176b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void init(PassRefPtr<Counter>); 2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void init(PassRefPtr<Rect>); 2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void init(PassRefPtr<Pair>); 2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void init(PassRefPtr<DashboardRegion>); // FIXME: Dashboard region should not be a primitive value. 2226b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner bool getDoubleValueInternal(UnitTypes targetUnitType, double* result) const; 2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isPrimitiveValue() const { return true; } 2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual unsigned short cssValueType() const; 2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2286c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen int m_type : 31; 2296c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen mutable unsigned m_hasCachedCSSText : 1; 2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project union { 2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int ident; 2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project double num; 2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project StringImpl* string; 2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Counter* counter; 2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Rect* rect; 2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned rgbcolor; 2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Pair* pair; 2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project DashboardRegion* region; 2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } m_value; 2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore 2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // CSSPrimitiveValue_h 245