15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (C) 1999-2003 Lars Knoll (knoll@kde.org) 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2012 Apple Inc. All rights reserved. 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is free software; you can redistribute it and/or 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modify it under the terms of the GNU Library General Public 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * License as published by the Free Software Foundation; either 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version 2 of the License, or (at your option) any later version. 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is distributed in the hope that it will be useful, 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * but WITHOUT ANY WARRANTY; without even the implied warranty of 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Library General Public License for more details. 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * You should have received a copy of the GNU Library General Public License 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * along with this library; see the file COPYING.LIB. If not, write to 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Boston, MA 02110-1301, USA. 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 2253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/css/CSSPrimitiveValue.h" 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 24197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ExceptionState.h" 2553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/css/CSSBasicShapes.h" 2653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/css/CSSCalculationValue.h" 2753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/css/CSSHelper.h" 2809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/css/CSSMarkup.h" 29a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "core/css/CSSToLengthConversionData.h" 3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/css/Counter.h" 3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/css/Pair.h" 3253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/css/RGBColor.h" 3353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/css/Rect.h" 3453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/css/StyleSheetContents.h" 3553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/ExceptionCode.h" 3653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Node.h" 3753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/style/RenderStyle.h" 38d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#include "platform/Decimal.h" 391e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/LayoutUnit.h" 405d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "platform/fonts/FontMetrics.h" 41591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/StdLibExtras.h" 42591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/text/StringBuffer.h" 43591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/text/StringBuilder.h" 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)using namespace WTF; 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 47c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 48e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 49926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)// Max/min values for CSS, needs to slightly smaller/larger than the true max/min values to allow for rounding without overflowing. 50926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)// Subtract two (rather than one) to allow for values to be converted to float and back without exceeding the LayoutUnit::max. 51926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)const int maxValueForCssLength = INT_MAX / kFixedPointDenominator - 2; 52926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)const int minValueForCssLength = INT_MIN / kFixedPointDenominator + 2; 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 54d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)static inline bool isValidCSSUnitTypeForDoubleConversion(CSSPrimitiveValue::UnitType unitType) 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (unitType) { 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_CALC: 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_CALC_PERCENTAGE_WITH_NUMBER: 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_CALC_PERCENTAGE_WITH_LENGTH: 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_CM: 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_DEG: 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_DIMENSION: 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_DPPX: 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_DPI: 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_DPCM: 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_EMS: 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_EXS: 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_GRAD: 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_HZ: 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_IN: 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_KHZ: 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_MM: 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_MS: 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_NUMBER: 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_PERCENTAGE: 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_PC: 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_PT: 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_PX: 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_RAD: 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_REMS: 81926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSSPrimitiveValue::CSS_CHS: 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_S: 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_TURN: 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_VW: 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_VH: 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_VMIN: 87926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSSPrimitiveValue::CSS_VMAX: 8853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) case CSSPrimitiveValue::CSS_FR: 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_ATTR: 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_COUNTER: 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_COUNTER_NAME: 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_IDENT: 945267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) case CSSPrimitiveValue::CSS_PROPERTY_ID: 955267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) case CSSPrimitiveValue::CSS_VALUE_ID: 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_PAIR: 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_PARSER_HEXCOLOR: 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_RECT: 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_QUAD: 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_RGBCOLOR: 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_SHAPE: 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_STRING: 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_UNICODE_RANGE: 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_UNKNOWN: 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSSPrimitiveValue::CSS_URI: 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT_NOT_REACHED(); 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 113d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)typedef HashMap<String, CSSPrimitiveValue::UnitType> StringToUnitTable; 114f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu 115f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuStringToUnitTable createStringToUnitTable() 116d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 117f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu StringToUnitTable table; 118d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) table.set(String("em"), CSSPrimitiveValue::CSS_EMS); 119d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) table.set(String("ex"), CSSPrimitiveValue::CSS_EXS); 120d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) table.set(String("px"), CSSPrimitiveValue::CSS_PX); 121d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) table.set(String("cm"), CSSPrimitiveValue::CSS_CM); 122d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) table.set(String("mm"), CSSPrimitiveValue::CSS_MM); 123d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) table.set(String("in"), CSSPrimitiveValue::CSS_IN); 124d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) table.set(String("pt"), CSSPrimitiveValue::CSS_PT); 125d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) table.set(String("pc"), CSSPrimitiveValue::CSS_PC); 126d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) table.set(String("deg"), CSSPrimitiveValue::CSS_DEG); 127d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) table.set(String("rad"), CSSPrimitiveValue::CSS_RAD); 128d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) table.set(String("grad"), CSSPrimitiveValue::CSS_GRAD); 129d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) table.set(String("ms"), CSSPrimitiveValue::CSS_MS); 130d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) table.set(String("s"), CSSPrimitiveValue::CSS_S); 131d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) table.set(String("hz"), CSSPrimitiveValue::CSS_HZ); 132d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) table.set(String("khz"), CSSPrimitiveValue::CSS_KHZ); 133d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) table.set(String("dpi"), CSSPrimitiveValue::CSS_DPI); 134d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) table.set(String("dpcm"), CSSPrimitiveValue::CSS_DPCM); 135d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) table.set(String("dppx"), CSSPrimitiveValue::CSS_DPPX); 136d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) table.set(String("vw"), CSSPrimitiveValue::CSS_VW); 137d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) table.set(String("vh"), CSSPrimitiveValue::CSS_VH); 138d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) table.set(String("vmax"), CSSPrimitiveValue::CSS_VMIN); 139d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) table.set(String("vmin"), CSSPrimitiveValue::CSS_VMAX); 140c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) table.set(String("rem"), CSSPrimitiveValue::CSS_REMS); 141c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) table.set(String("fr"), CSSPrimitiveValue::CSS_FR); 142c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) table.set(String("turn"), CSSPrimitiveValue::CSS_TURN); 143c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) table.set(String("ch"), CSSPrimitiveValue::CSS_CHS); 144d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return table; 145d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 146d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 147d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)CSSPrimitiveValue::UnitType CSSPrimitiveValue::fromName(const String& unit) 148d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 149f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu DEFINE_STATIC_LOCAL(StringToUnitTable, unitTable, (createStringToUnitTable())); 15007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return unitTable.get(unit.lower()); 151d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 152d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 153d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)CSSPrimitiveValue::UnitCategory CSSPrimitiveValue::unitCategory(UnitType type) 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Here we violate the spec (http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue) and allow conversions 15653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) // between CSS_PX and relative lengths (see cssPixelsPerInch comment in core/css/CSSHelper.h for the topic treatment). 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (type) { 158e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_NUMBER: 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return CSSPrimitiveValue::UNumber; 160e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_PERCENTAGE: 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return CSSPrimitiveValue::UPercent; 162e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_PX: 163e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_CM: 164e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_MM: 165e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_IN: 166e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_PT: 167e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_PC: 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return CSSPrimitiveValue::ULength; 169e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_MS: 170e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_S: 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return CSSPrimitiveValue::UTime; 172e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_DEG: 173e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_RAD: 174e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_GRAD: 175e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_TURN: 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return CSSPrimitiveValue::UAngle; 177e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_HZ: 178e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_KHZ: 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return CSSPrimitiveValue::UFrequency; 180e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_DPPX: 181e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_DPI: 182e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_DPCM: 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return CSSPrimitiveValue::UResolution; 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) default: 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return CSSPrimitiveValue::UOther; 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 189591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochbool CSSPrimitiveValue::colorIsDerivedFromElement() const 190591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch{ 191591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch int valueID = getValueID(); 192591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch switch (valueID) { 193591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch case CSSValueWebkitText: 194591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch case CSSValueWebkitLink: 195591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch case CSSValueWebkitActivelink: 196591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch case CSSValueCurrentcolor: 197591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return true; 198591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch default: 199591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return false; 200591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } 201591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch} 202591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)typedef HashMap<const CSSPrimitiveValue*, String> CSSTextCache; 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static CSSTextCache& cssTextCache() 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DEFINE_STATIC_LOCAL(CSSTextCache, cache, ()); 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return cache; 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 210d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)CSSPrimitiveValue::UnitType CSSPrimitiveValue::primitiveType() const 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2125267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) if (m_primitiveUnitType == CSS_PROPERTY_ID || m_primitiveUnitType == CSS_VALUE_ID) 2135267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return CSS_IDENT; 2145267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 215e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (m_primitiveUnitType != CSS_CALC) 216d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) return static_cast<UnitType>(m_primitiveUnitType); 21702772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (m_value.calc->category()) { 219c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) case CalcAngle: 220c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return CSS_DEG; 221c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) case CalcFrequency: 222c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return CSS_HZ; 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CalcNumber: 224e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return CSS_NUMBER; 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CalcPercent: 226e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return CSS_PERCENTAGE; 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CalcLength: 228e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return CSS_PX; 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CalcPercentNumber: 230e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return CSS_CALC_PERCENTAGE_WITH_NUMBER; 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CalcPercentLength: 232e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return CSS_CALC_PERCENTAGE_WITH_LENGTH; 233c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) case CalcTime: 234c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return CSS_MS; 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CalcOther: 236e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return CSS_UNKNOWN; 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 238e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return CSS_UNKNOWN; 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2415267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)static const AtomicString& propertyName(CSSPropertyID propertyID) 2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2435267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) ASSERT_ARG(propertyID, propertyID >= 0); 2445267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) ASSERT_ARG(propertyID, (propertyID >= firstCSSProperty && propertyID < firstCSSProperty + numCSSProperties)); 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2465267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) if (propertyID < 0) 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return nullAtom; 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2495267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return getPropertyNameAtomicString(propertyID); 2505267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)} 2515267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2525267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)static const AtomicString& valueName(CSSValueID valueID) 2535267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles){ 2545267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) ASSERT_ARG(valueID, valueID >= 0); 2555267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) ASSERT_ARG(valueID, valueID < numCSSValueKeywords); 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2575267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) if (valueID < 0) 2585267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return nullAtom; 2595267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2605267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) static AtomicString* keywordStrings = new AtomicString[numCSSValueKeywords]; // Leaked intentionally. 2615267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) AtomicString& keywordString = keywordStrings[valueID]; 2625267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) if (keywordString.isNull()) 2635267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) keywordString = getValueName(valueID); 2645267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return keywordString; 2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2675267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)CSSPrimitiveValue::CSSPrimitiveValue(CSSValueID valueID) 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : CSSValue(PrimitiveClass) 2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2705267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) m_primitiveUnitType = CSS_VALUE_ID; 2715267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) m_value.valueID = valueID; 2725267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)} 2735267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2745267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)CSSPrimitiveValue::CSSPrimitiveValue(CSSPropertyID propertyID) 2755267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) : CSSValue(PrimitiveClass) 2765267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles){ 2775267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) m_primitiveUnitType = CSS_PROPERTY_ID; 2785267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) m_value.propertyID = propertyID; 2795267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)} 2805267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 281d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)CSSPrimitiveValue::CSSPrimitiveValue(double num, UnitType type) 2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : CSSValue(PrimitiveClass) 2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_primitiveUnitType = type; 285926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ASSERT(std::isfinite(num)); 2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_value.num = num; 2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 289d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)CSSPrimitiveValue::CSSPrimitiveValue(const String& str, UnitType type) 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : CSSValue(PrimitiveClass) 2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_primitiveUnitType = type; 293197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch m_value.string = str.impl(); 294197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (m_value.string) 2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_value.string->ref(); 2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 298f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuCSSPrimitiveValue::CSSPrimitiveValue(const LengthSize& lengthSize, const RenderStyle& style) 29909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) : CSSValue(PrimitiveClass) 30009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 301f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu init(lengthSize, style); 30209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 304d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)CSSPrimitiveValue::CSSPrimitiveValue(RGBA32 color, UnitType type) 3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : CSSValue(PrimitiveClass) 3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 30707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch ASSERT(type == CSS_RGBCOLOR); 3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_primitiveUnitType = CSS_RGBCOLOR; 3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_value.rgbcolor = color; 3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3121e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)CSSPrimitiveValue::CSSPrimitiveValue(const Length& length, float zoom) 3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : CSSValue(PrimitiveClass) 3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (length.type()) { 316c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) case Auto: 317d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) m_primitiveUnitType = CSS_VALUE_ID; 318d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) m_value.valueID = CSSValueAuto; 319d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) break; 320c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) case Intrinsic: 321d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) m_primitiveUnitType = CSS_VALUE_ID; 322d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) m_value.valueID = CSSValueIntrinsic; 323d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) break; 324c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) case MinIntrinsic: 325d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) m_primitiveUnitType = CSS_VALUE_ID; 326d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) m_value.valueID = CSSValueMinIntrinsic; 327d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) break; 328c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) case MinContent: 329d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) m_primitiveUnitType = CSS_VALUE_ID; 330d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) m_value.valueID = CSSValueMinContent; 331d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) break; 332c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) case MaxContent: 333d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) m_primitiveUnitType = CSS_VALUE_ID; 334d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) m_value.valueID = CSSValueMaxContent; 335d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) break; 336c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) case FillAvailable: 337d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) m_primitiveUnitType = CSS_VALUE_ID; 338d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) m_value.valueID = CSSValueWebkitFillAvailable; 339d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) break; 340c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) case FitContent: 341d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) m_primitiveUnitType = CSS_VALUE_ID; 342d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) m_value.valueID = CSSValueWebkitFitContent; 343d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) break; 344c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) case ExtendToZoom: 345d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) m_primitiveUnitType = CSS_VALUE_ID; 346d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) m_value.valueID = CSSValueInternalExtendToZoom; 347d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) break; 348c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) case Percent: 349d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) m_primitiveUnitType = CSS_PERCENTAGE; 350d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) ASSERT(std::isfinite(length.percent())); 351d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) m_value.num = length.percent(); 35210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch break; 353c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) case Fixed: 354c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_primitiveUnitType = CSS_PX; 3551e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) m_value.num = length.value() / zoom; 35610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch break; 35710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch case Calculated: { 35810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch const CalculationValue& calc = length.calculationValue(); 35910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch if (calc.pixels() && calc.percent()) { 36010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch init(CSSCalcValue::create( 36110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch CSSCalcValue::createExpressionNode(calc.pixels() / zoom, calc.percent()), 36210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch calc.isNonNegative() ? ValueRangeNonNegative : ValueRangeAll)); 36310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch break; 36410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch } 36510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch if (calc.percent()) { 36610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch m_primitiveUnitType = CSS_PERCENTAGE; 36710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch m_value.num = calc.percent(); 36810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch } else { 36910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch m_primitiveUnitType = CSS_PX; 37010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch m_value.num = calc.pixels() / zoom; 37110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch } 37210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch if (m_value.num < 0 && calc.isNonNegative()) 37310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch m_value.num = 0; 37410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch break; 37510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch } 37609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case DeviceWidth: 37709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case DeviceHeight: 3789e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) case MaxSizeNone: 379c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) ASSERT_NOT_REACHED(); 380c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) break; 381c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) } 382c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)} 383c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 384f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liuvoid CSSPrimitiveValue::init(const LengthSize& lengthSize, const RenderStyle& style) 38509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 38609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_primitiveUnitType = CSS_PAIR; 38709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_hasCachedCSSText = false; 388f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu m_value.pair = Pair::create(create(lengthSize.width(), style.effectiveZoom()), create(lengthSize.height(), style.effectiveZoom()), Pair::KeepIdenticalValues).leakRef(); 38909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 39009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 39109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void CSSPrimitiveValue::init(PassRefPtrWillBeRawPtr<Counter> c) 3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_primitiveUnitType = CSS_COUNTER; 3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_hasCachedCSSText = false; 3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_value.counter = c.leakRef(); 3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 398d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void CSSPrimitiveValue::init(PassRefPtrWillBeRawPtr<Rect> r) 3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_primitiveUnitType = CSS_RECT; 4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_hasCachedCSSText = false; 4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_value.rect = r.leakRef(); 4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 405d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void CSSPrimitiveValue::init(PassRefPtrWillBeRawPtr<Quad> quad) 4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_primitiveUnitType = CSS_QUAD; 4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_hasCachedCSSText = false; 4095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_value.quad = quad.leakRef(); 4105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 41209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void CSSPrimitiveValue::init(PassRefPtrWillBeRawPtr<Pair> p) 4135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_primitiveUnitType = CSS_PAIR; 4155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_hasCachedCSSText = false; 4165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_value.pair = p.leakRef(); 4175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 41909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void CSSPrimitiveValue::init(PassRefPtrWillBeRawPtr<CSSCalcValue> c) 4205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_primitiveUnitType = CSS_CALC; 4225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_hasCachedCSSText = false; 4235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_value.calc = c.leakRef(); 4245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 426d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void CSSPrimitiveValue::init(PassRefPtrWillBeRawPtr<CSSBasicShape> shape) 4275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_primitiveUnitType = CSS_SHAPE; 4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_hasCachedCSSText = false; 4305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_value.shape = shape.leakRef(); 4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)CSSPrimitiveValue::~CSSPrimitiveValue() 4345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cleanup(); 4365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void CSSPrimitiveValue::cleanup() 4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 440d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) switch (static_cast<UnitType>(m_primitiveUnitType)) { 4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_STRING: 4425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_URI: 4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_ATTR: 4445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_COUNTER_NAME: 4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_PARSER_HEXCOLOR: 4465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_value.string) 4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_value.string->deref(); 4485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 4495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_COUNTER: 45009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // We must not call deref() when oilpan is enabled because m_value.counter is traced. 45109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#if !ENABLE(OILPAN) 4525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_value.counter->deref(); 45309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#endif 4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 4555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_RECT: 456d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) // We must not call deref() when oilpan is enabled because m_value.rect is traced. 457d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#if !ENABLE(OILPAN) 4585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_value.rect->deref(); 459d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#endif 4605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 4615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_QUAD: 462d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) // We must not call deref() when oilpan is enabled because m_value.quad is traced. 463d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#if !ENABLE(OILPAN) 4645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_value.quad->deref(); 465d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#endif 4665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 4675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_PAIR: 46809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // We must not call deref() when oilpan is enabled because m_value.pair is traced. 46909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#if !ENABLE(OILPAN) 4705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_value.pair->deref(); 47109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#endif 4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_CALC: 47409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // We must not call deref() when oilpan is enabled because m_value.calc is traced. 47509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#if !ENABLE(OILPAN) 4765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_value.calc->deref(); 47709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#endif 4785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 4795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_CALC_PERCENTAGE_WITH_NUMBER: 4805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_CALC_PERCENTAGE_WITH_LENGTH: 4815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT_NOT_REACHED(); 4825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 4835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_SHAPE: 484d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) // We must not call deref() when oilpan is enabled because m_value.shape is traced. 485d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#if !ENABLE(OILPAN) 4865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_value.shape->deref(); 487d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#endif 4885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 4895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_NUMBER: 4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_PERCENTAGE: 4915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_EMS: 4925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_EXS: 4935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_REMS: 494926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_CHS: 4955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_PX: 4965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_CM: 4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_MM: 4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_IN: 4995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_PT: 5005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_PC: 5015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_DEG: 5025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_RAD: 5035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_GRAD: 5045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_MS: 5055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_S: 5065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_HZ: 5075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_KHZ: 5085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_TURN: 5095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_VW: 5105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_VH: 5115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_VMIN: 512926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_VMAX: 5135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_DPPX: 5145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_DPI: 5155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_DPCM: 51653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) case CSS_FR: 5175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_IDENT: 5185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_RGBCOLOR: 5195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_DIMENSION: 5205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_UNKNOWN: 5215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_UNICODE_RANGE: 5225267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) case CSS_PROPERTY_ID: 5235267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) case CSS_VALUE_ID: 5245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 5255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_primitiveUnitType = 0; 5275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_hasCachedCSSText) { 5285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cssTextCache().remove(this); 5295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_hasCachedCSSText = false; 5305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 533c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)double CSSPrimitiveValue::computeSeconds() 534c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){ 535c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) ASSERT(isTime() || (isCalculated() && cssCalcValue()->category() == CalcTime)); 536c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) UnitType currentType = isCalculated() ? cssCalcValue()->expressionNode()->primitiveType() : static_cast<UnitType>(m_primitiveUnitType); 537c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (currentType == CSS_S) 538c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return getDoubleValue(); 539c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (currentType == CSS_MS) 540c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return getDoubleValue() / 1000; 541c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) ASSERT_NOT_REACHED(); 542c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return 0; 543c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 544c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 5455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)double CSSPrimitiveValue::computeDegrees() 5465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 547c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) ASSERT(isAngle() || (isCalculated() && cssCalcValue()->category() == CalcAngle)); 548c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) UnitType currentType = isCalculated() ? cssCalcValue()->expressionNode()->primitiveType() : static_cast<UnitType>(m_primitiveUnitType); 549c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) switch (currentType) { 5505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_DEG: 5515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return getDoubleValue(); 5525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_RAD: 5535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return rad2deg(getDoubleValue()); 5545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_GRAD: 5555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return grad2deg(getDoubleValue()); 5565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_TURN: 5575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return turn2deg(getDoubleValue()); 5585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) default: 5595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT_NOT_REACHED(); 5605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 5615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 564a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)template<> int CSSPrimitiveValue::computeLength(const CSSToLengthConversionData& conversionData) 5655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 566a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return roundForImpreciseConversion<int>(computeLengthDouble(conversionData)); 5675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 569a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)template<> unsigned CSSPrimitiveValue::computeLength(const CSSToLengthConversionData& conversionData) 5705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 571a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return roundForImpreciseConversion<unsigned>(computeLengthDouble(conversionData)); 5725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 574a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)template<> Length CSSPrimitiveValue::computeLength(const CSSToLengthConversionData& conversionData) 5755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 576a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return Length(clampTo<float>(computeLengthDouble(conversionData), minValueForCssLength, maxValueForCssLength), Fixed); 5775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 579a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)template<> short CSSPrimitiveValue::computeLength(const CSSToLengthConversionData& conversionData) 5805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 581a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return roundForImpreciseConversion<short>(computeLengthDouble(conversionData)); 5825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 584a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)template<> unsigned short CSSPrimitiveValue::computeLength(const CSSToLengthConversionData& conversionData) 5855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 586a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return roundForImpreciseConversion<unsigned short>(computeLengthDouble(conversionData)); 5875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 589a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)template<> float CSSPrimitiveValue::computeLength(const CSSToLengthConversionData& conversionData) 5905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 591a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return static_cast<float>(computeLengthDouble(conversionData)); 5925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 594a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)template<> double CSSPrimitiveValue::computeLength(const CSSToLengthConversionData& conversionData) 5955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 596a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return computeLengthDouble(conversionData); 5975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 599a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)double CSSPrimitiveValue::computeLengthDouble(const CSSToLengthConversionData& conversionData) 6005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 60110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // The logic in this function is duplicated in MediaValues::computeLength 60210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // because MediaValues::computeLength needs nearly identical logic, but we haven't found a way to make 60310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // CSSPrimitiveValue::computeLengthDouble more generic (to solve both cases) without hurting performance. 6045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_primitiveUnitType == CSS_CALC) 605a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return m_value.calc->computeLengthPx(conversionData); 606a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 607a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) const RenderStyle& style = conversionData.style(); 608d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) const RenderStyle* rootStyle = conversionData.rootStyle(); 609a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) bool computingFontSize = conversionData.computingFontSize(); 61002772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 6115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) double factor; 6125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (primitiveType()) { 6145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_EMS: 615a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) factor = computingFontSize ? style.fontDescription().specifiedSize() : style.fontDescription().computedSize(); 6165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 6175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_EXS: 6185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: We have a bug right now where the zoom will be applied twice to EX units. 6195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We really need to compute EX using fontMetrics for the original specifiedSize and not use 6205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // our actual constructed rendering font. 621a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) if (style.fontMetrics().hasXHeight()) 622a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) factor = style.fontMetrics().xHeight(); 6235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 624a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) factor = (computingFontSize ? style.fontDescription().specifiedSize() : style.fontDescription().computedSize()) / 2.0; 6255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 6265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_REMS: 627d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (rootStyle) 628d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) factor = computingFontSize ? rootStyle->fontDescription().specifiedSize() : rootStyle->fontDescription().computedSize(); 629d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) else 630d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) factor = 1.0; 6315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 632926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_CHS: 633a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) factor = style.fontMetrics().zeroWidth(); 634926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) break; 6355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_PX: 6365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) factor = 1.0; 6375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 6385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_CM: 639a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) factor = cssPixelsPerCentimeter; 6405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 6415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_MM: 642a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) factor = cssPixelsPerMillimeter; 6435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 6445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_IN: 6455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) factor = cssPixelsPerInch; 6465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 6475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_PT: 648a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) factor = cssPixelsPerPoint; 6495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 6505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_PC: 651a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) factor = cssPixelsPerPica; 6525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 65309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case CSS_VW: 65409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) factor = conversionData.viewportWidthPercent(); 65509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) break; 65609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case CSS_VH: 65709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) factor = conversionData.viewportHeightPercent(); 65809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) break; 65909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case CSS_VMIN: 66009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) factor = conversionData.viewportMinPercent(); 66109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) break; 66209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case CSS_VMAX: 66309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) factor = conversionData.viewportMaxPercent(); 66409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) break; 6655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_CALC_PERCENTAGE_WITH_LENGTH: 6665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_CALC_PERCENTAGE_WITH_NUMBER: 6675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT_NOT_REACHED(); 6685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return -1.0; 6695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) default: 6705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT_NOT_REACHED(); 6715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return -1.0; 6725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We do not apply the zoom factor when we are computing the value of the font-size property. The zooming 6755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // for font sizes is much more complicated, since we have to worry about enforcing the minimum font size preference 676926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // as well as enforcing the implicit "smart minimum." 6775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) double result = getDoubleValue() * factor; 6785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (computingFontSize || isFontRelativeLength()) 6795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return result; 6805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 681a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return result * conversionData.zoom(); 6825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 684a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdochvoid CSSPrimitiveValue::accumulateLengthArray(CSSLengthArray& lengthArray, double multiplier) const 685a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch{ 686a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch ASSERT(lengthArray.size() == LengthUnitTypeCount); 687a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 688a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (m_primitiveUnitType == CSS_CALC) { 689a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch cssCalcValue()->accumulateLengthArray(lengthArray, multiplier); 690a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return; 691a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch } 692a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 693a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch LengthUnitType lengthType; 694d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (unitTypeToLengthUnitType(static_cast<UnitType>(m_primitiveUnitType), lengthType)) 695d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) lengthArray.at(lengthType) += m_value.num * conversionToCanonicalUnitsScaleFactor(static_cast<UnitType>(m_primitiveUnitType)) * multiplier; 696a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch} 697a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 69851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void CSSPrimitiveValue::setFloatValue(unsigned short, double, ExceptionState& exceptionState) 6995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Keeping values immutable makes optimizations easier and allows sharing of the primitive value objects. 7015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // No other engine supports mutating style through this API. Computed style is always read-only anyway. 7025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Supporting setter would require making primitive value copy-on-write and taking care of style invalidation. 70309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) exceptionState.throwDOMException(NoModificationAllowedError, "CSSPrimitiveValue objects are read-only."); 7045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 706d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)double CSSPrimitiveValue::conversionToCanonicalUnitsScaleFactor(UnitType unitType) 7075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) double factor = 1.0; 7095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: the switch can be replaced by an array of scale factors. 7105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (unitType) { 711e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // These are "canonical" units in their respective categories. 712e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_PX: 713e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_DEG: 714e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_MS: 715e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_HZ: 716e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch break; 717e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_CM: 718a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) factor = cssPixelsPerCentimeter; 719e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch break; 720e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_DPCM: 721a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) factor = 1 / cssPixelsPerCentimeter; 722e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch break; 723e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_MM: 724a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) factor = cssPixelsPerMillimeter; 725e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch break; 726e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_IN: 727e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch factor = cssPixelsPerInch; 728e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch break; 729e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_DPI: 730e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch factor = 1 / cssPixelsPerInch; 731e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch break; 732e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_PT: 733a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) factor = cssPixelsPerPoint; 734e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch break; 735e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_PC: 736a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) factor = cssPixelsPerPica; 737e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch break; 738e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_RAD: 739e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch factor = 180 / piDouble; 740e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch break; 741e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_GRAD: 742e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch factor = 0.9; 743e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch break; 744e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_TURN: 745e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch factor = 360; 746e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch break; 747e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_S: 748e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSS_KHZ: 749e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch factor = 1000; 750e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch break; 751e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch default: 752e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch break; 7535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return factor; 7565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 758d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)double CSSPrimitiveValue::getDoubleValue(UnitType unitType, ExceptionState& exceptionState) const 7595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) double result = 0; 761d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) bool success = getDoubleValueInternal(unitType, &result); 7625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!success) { 76309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) exceptionState.throwDOMException(InvalidAccessError, "Failed to obtain a double value."); 7645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0.0; 7655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return result; 7685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 770d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)double CSSPrimitiveValue::getDoubleValue(UnitType unitType) const 7715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) double result = 0; 773d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) getDoubleValueInternal(unitType, &result); 7745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return result; 7755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)double CSSPrimitiveValue::getDoubleValue() const 77802772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch{ 7795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_primitiveUnitType != CSS_CALC ? m_value.num : m_value.calc->doubleValue(); 7805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 782d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)CSSPrimitiveValue::UnitType CSSPrimitiveValue::canonicalUnitTypeForCategory(UnitCategory category) 7835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 78409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // The canonical unit type is chosen according to the way BisonCSSParser::validUnit() chooses the default unit 7855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // in each category (based on unitflags). 7865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (category) { 7875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case UNumber: 7885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return CSS_NUMBER; 7895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case ULength: 7905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return CSS_PX; 7915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case UPercent: 7925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return CSS_UNKNOWN; // Cannot convert between numbers and percent. 7935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case UTime: 7945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return CSS_MS; 7955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case UAngle: 7965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return CSS_DEG; 7975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case UFrequency: 7985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return CSS_HZ; 7995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case UResolution: 8005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return CSS_DPPX; 8015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) default: 8025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return CSS_UNKNOWN; 8035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 806d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)bool CSSPrimitiveValue::getDoubleValueInternal(UnitType requestedUnitType, double* result) const 8075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 808d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (!isValidCSSUnitTypeForDoubleConversion(static_cast<UnitType>(m_primitiveUnitType)) || !isValidCSSUnitTypeForDoubleConversion(requestedUnitType)) 8095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 8105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 811d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) UnitType sourceUnitType = primitiveType(); 8125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (requestedUnitType == sourceUnitType || requestedUnitType == CSS_DIMENSION) { 8135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *result = getDoubleValue(); 8145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 8155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) UnitCategory sourceCategory = unitCategory(sourceUnitType); 8185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(sourceCategory != UOther); 8195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 820d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) UnitType targetUnitType = requestedUnitType; 8215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) UnitCategory targetCategory = unitCategory(targetUnitType); 8225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(targetCategory != UOther); 8235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Cannot convert between unrelated unit categories if one of them is not UNumber. 8255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (sourceCategory != targetCategory && sourceCategory != UNumber && targetCategory != UNumber) 8265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 8275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (targetCategory == UNumber) { 8295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We interpret conversion to CSS_NUMBER as conversion to a canonical unit in this value's category. 8305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) targetUnitType = canonicalUnitTypeForCategory(sourceCategory); 8315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (targetUnitType == CSS_UNKNOWN) 8325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 8335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (sourceUnitType == CSS_NUMBER) { 83609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // We interpret conversion from CSS_NUMBER in the same way as BisonCSSParser::validUnit() while using non-strict mode. 8375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) sourceUnitType = canonicalUnitTypeForCategory(targetCategory); 8385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (sourceUnitType == CSS_UNKNOWN) 8395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 8405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) double convertedValue = getDoubleValue(); 8435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // First convert the value from m_primitiveUnitType to canonical type. 8455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) double factor = conversionToCanonicalUnitsScaleFactor(sourceUnitType); 8465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) convertedValue *= factor; 8475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Now convert from canonical type to the target unitType. 8495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) factor = conversionToCanonicalUnitsScaleFactor(targetUnitType); 8505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) convertedValue /= factor; 8515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *result = convertedValue; 8535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 8545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 856d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)bool CSSPrimitiveValue::unitTypeToLengthUnitType(UnitType unitType, LengthUnitType& lengthType) 857a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch{ 858a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch switch (unitType) { 859a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch case CSSPrimitiveValue::CSS_PX: 860a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch case CSSPrimitiveValue::CSS_CM: 861a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch case CSSPrimitiveValue::CSS_MM: 862a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch case CSSPrimitiveValue::CSS_IN: 863a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch case CSSPrimitiveValue::CSS_PT: 864a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch case CSSPrimitiveValue::CSS_PC: 865a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch lengthType = UnitTypePixels; 866a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return true; 867a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch case CSSPrimitiveValue::CSS_EMS: 868a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch lengthType = UnitTypeFontSize; 869a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return true; 870a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch case CSSPrimitiveValue::CSS_EXS: 871a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch lengthType = UnitTypeFontXSize; 872a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return true; 873a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch case CSSPrimitiveValue::CSS_REMS: 874a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch lengthType = UnitTypeRootFontSize; 875a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return true; 876a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch case CSSPrimitiveValue::CSS_CHS: 877a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch lengthType = UnitTypeZeroCharacterWidth; 878a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return true; 879a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch case CSSPrimitiveValue::CSS_PERCENTAGE: 880a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch lengthType = UnitTypePercentage; 881a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return true; 882a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch case CSSPrimitiveValue::CSS_VW: 883a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch lengthType = UnitTypeViewportWidth; 884a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return true; 885a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch case CSSPrimitiveValue::CSS_VH: 886a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch lengthType = UnitTypeViewportHeight; 887a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return true; 888a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch case CSSPrimitiveValue::CSS_VMIN: 889a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch lengthType = UnitTypeViewportMin; 890a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return true; 891a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch case CSSPrimitiveValue::CSS_VMAX: 892a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch lengthType = UnitTypeViewportMax; 893a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return true; 894a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch default: 895a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return false; 896a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch } 897a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch} 898a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 899d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)CSSPrimitiveValue::UnitType CSSPrimitiveValue::lengthUnitTypeToUnitType(LengthUnitType type) 900a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch{ 901a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch switch (type) { 902a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch case UnitTypePixels: 903a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return CSSPrimitiveValue::CSS_PX; 904a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch case UnitTypeFontSize: 905a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return CSSPrimitiveValue::CSS_EMS; 906a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch case UnitTypeFontXSize: 907a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return CSSPrimitiveValue::CSS_EXS; 908a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch case UnitTypeRootFontSize: 909a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return CSSPrimitiveValue::CSS_REMS; 910a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch case UnitTypeZeroCharacterWidth: 911a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return CSSPrimitiveValue::CSS_CHS; 912a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch case UnitTypePercentage: 913a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return CSSPrimitiveValue::CSS_PERCENTAGE; 914a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch case UnitTypeViewportWidth: 915a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return CSSPrimitiveValue::CSS_VW; 916a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch case UnitTypeViewportHeight: 917a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return CSSPrimitiveValue::CSS_VH; 918a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch case UnitTypeViewportMin: 919a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return CSSPrimitiveValue::CSS_VMIN; 920a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch case UnitTypeViewportMax: 921a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return CSSPrimitiveValue::CSS_VMAX; 922a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch case LengthUnitTypeCount: 923a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch break; 924a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch } 925a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch ASSERT_NOT_REACHED(); 926a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return CSSPrimitiveValue::CSS_UNKNOWN; 927a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch} 928a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 92951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void CSSPrimitiveValue::setStringValue(unsigned short, const String&, ExceptionState& exceptionState) 9305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Keeping values immutable makes optimizations easier and allows sharing of the primitive value objects. 9325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // No other engine supports mutating style through this API. Computed style is always read-only anyway. 9335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Supporting setter would require making primitive value copy-on-write and taking care of style invalidation. 93409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) exceptionState.throwDOMException(NoModificationAllowedError, "CSSPrimitiveValue objects are read-only."); 9355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 93751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)String CSSPrimitiveValue::getStringValue(ExceptionState& exceptionState) const 9385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (m_primitiveUnitType) { 9405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_STRING: 9415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_ATTR: 9425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_URI: 9435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_value.string; 9445267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) case CSS_VALUE_ID: 9455267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return valueName(m_value.valueID); 9465267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) case CSS_PROPERTY_ID: 9475267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return propertyName(m_value.propertyID); 9485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) default: 94909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) exceptionState.throwDOMException(InvalidAccessError, "This object's value cannot be represented as a string."); 9505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 9515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 9525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return String(); 9545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)String CSSPrimitiveValue::getStringValue() const 9575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (m_primitiveUnitType) { 9595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_STRING: 9605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_ATTR: 9615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_URI: 9625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_value.string; 9635267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) case CSS_VALUE_ID: 9645267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return valueName(m_value.valueID); 9655267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) case CSS_PROPERTY_ID: 9665267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return propertyName(m_value.propertyID); 9675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) default: 9685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 9695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 9705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return String(); 9725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 97451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)Counter* CSSPrimitiveValue::getCounterValue(ExceptionState& exceptionState) const 9755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_primitiveUnitType != CSS_COUNTER) { 97709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) exceptionState.throwDOMException(InvalidAccessError, "This object is not a counter value."); 9785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 9795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 9805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_value.counter; 9825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 98451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)Rect* CSSPrimitiveValue::getRectValue(ExceptionState& exceptionState) const 9855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_primitiveUnitType != CSS_RECT) { 98709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) exceptionState.throwDOMException(InvalidAccessError, "This object is not a rect value."); 9885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 9895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 9905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_value.rect; 9925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 99451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)Quad* CSSPrimitiveValue::getQuadValue(ExceptionState& exceptionState) const 9955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_primitiveUnitType != CSS_QUAD) { 99709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) exceptionState.throwDOMException(InvalidAccessError, "This object is not a quad value."); 9985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 9995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 10005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_value.quad; 10025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1004d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)PassRefPtrWillBeRawPtr<RGBColor> CSSPrimitiveValue::getRGBColorValue(ExceptionState& exceptionState) const 10055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_primitiveUnitType != CSS_RGBCOLOR) { 100709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) exceptionState.throwDOMException(InvalidAccessError, "This object is not an RGB color value."); 1008d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return nullptr; 10095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 10105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIMXE: This should not return a new object for each invocation. 10125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return RGBColor::create(m_value.rgbcolor); 10135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 101551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)Pair* CSSPrimitiveValue::getPairValue(ExceptionState& exceptionState) const 10165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_primitiveUnitType != CSS_PAIR) { 101809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) exceptionState.throwDOMException(InvalidAccessError, "This object is not a pair value."); 10195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 10205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 10215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_value.pair; 10235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static String formatNumber(double number, const char* suffix, unsigned suffixLength) 10265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1027d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) Decimal decimal = Decimal::fromDouble(number); 1028d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) String result = decimal.toString(); 1029d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) result.append(suffix, suffixLength); 1030d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) return result; 10315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)template <unsigned characterCount> 10345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)ALWAYS_INLINE static String formatNumber(double number, const char (&characters)[characterCount]) 10355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return formatNumber(number, characters, characterCount - 1); 10375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1039f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liustatic String formatNumber(double number, const char* characters) 1040f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu{ 1041f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return formatNumber(number, characters, strlen(characters)); 1042f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu} 1043f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu 1044d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)const char* CSSPrimitiveValue::unitTypeToString(UnitType type) 1045f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu{ 1046f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu switch (type) { 1047f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_NUMBER: 1048f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return ""; 1049f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_PERCENTAGE: 1050f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return "%"; 1051f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_EMS: 1052f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return "em"; 1053f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_EXS: 1054f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return "ex"; 1055f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_REMS: 1056f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return "rem"; 1057f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_CHS: 1058f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return "ch"; 1059f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_PX: 1060f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return "px"; 1061f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_CM: 1062f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return "cm"; 1063f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_DPPX: 1064f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return "dppx"; 1065f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_DPI: 1066f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return "dpi"; 1067f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_DPCM: 1068f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return "dpcm"; 1069f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_MM: 1070f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return "mm"; 1071f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_IN: 1072f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return "in"; 1073f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_PT: 1074f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return "pt"; 1075f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_PC: 1076f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return "pc"; 1077f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_DEG: 1078f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return "deg"; 1079f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_RAD: 1080f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return "rad"; 1081f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_GRAD: 1082f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return "grad"; 1083f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_MS: 1084f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return "ms"; 1085f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_S: 1086f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return "s"; 1087f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_HZ: 1088f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return "hz"; 1089f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_KHZ: 1090f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return "khz"; 1091f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_TURN: 1092f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return "turn"; 1093f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_FR: 1094f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return "fr"; 1095f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_VW: 1096f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return "vw"; 1097f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_VH: 1098f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return "vh"; 1099f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_VMIN: 1100f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return "vmin"; 1101f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_VMAX: 1102f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return "vmax"; 1103f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_UNKNOWN: 1104f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_DIMENSION: 1105f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_STRING: 1106f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_URI: 1107f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_VALUE_ID: 1108f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_PROPERTY_ID: 1109f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_ATTR: 1110f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_COUNTER_NAME: 1111f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_COUNTER: 1112f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_RECT: 1113f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_QUAD: 1114f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_RGBCOLOR: 1115f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_PARSER_HEXCOLOR: 1116f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_PAIR: 1117f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_CALC: 1118f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_SHAPE: 1119f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_IDENT: 1120f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_UNICODE_RANGE: 1121f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_CALC_PERCENTAGE_WITH_NUMBER: 1122f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_CALC_PERCENTAGE_WITH_LENGTH: 1123f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu break; 1124f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu }; 1125f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu ASSERT_NOT_REACHED(); 1126f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return ""; 1127f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu} 1128f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu 1129bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)String CSSPrimitiveValue::customCSSText(CSSTextFormattingFlags formattingFlag) const 11305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 11315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: return the original value instead of a generated one (e.g. color 11325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // name if it was specified) - check what spec says about this 11335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_hasCachedCSSText) { 11355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(cssTextCache().contains(this)); 11365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return cssTextCache().get(this); 11375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 11385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String text; 11405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (m_primitiveUnitType) { 11415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_UNKNOWN: 11425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME 11435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 11445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_NUMBER: 11455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_PERCENTAGE: 11465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_EMS: 11475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_EXS: 11485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_REMS: 1149926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_CHS: 11505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_PX: 11515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_CM: 11525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_DPPX: 11535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_DPI: 11545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_DPCM: 11555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_MM: 11565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_IN: 11575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_PT: 11585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_PC: 11595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_DEG: 11605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_RAD: 11615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_GRAD: 11625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_MS: 11635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_S: 11645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_HZ: 11655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_KHZ: 11665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_TURN: 1167f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_FR: 1168f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_VW: 1169f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_VH: 1170f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_VMIN: 1171f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu case CSS_VMAX: 1172d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) text = formatNumber(m_value.num, unitTypeToString((UnitType)m_primitiveUnitType)); 11735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_DIMENSION: 11749bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) // FIXME: We currently don't handle CSS_DIMENSION properly as we don't store 11759bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) // the actual dimension, just the numeric value as a string. 11765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 11775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_STRING: 1178591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch text = formattingFlag == AlwaysQuoteCSSString ? quoteCSSString(m_value.string) : quoteCSSStringIfNeeded(m_value.string); 11795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 11805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_URI: 11815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) text = "url(" + quoteCSSURLIfNeeded(m_value.string) + ")"; 11825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 11835267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) case CSS_VALUE_ID: 11845267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) text = valueName(m_value.valueID); 11855267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) break; 11865267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) case CSS_PROPERTY_ID: 11875267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) text = propertyName(m_value.propertyID); 11885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 11895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_ATTR: { 11905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) StringBuilder result; 11915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result.reserveCapacity(6 + m_value.string->length()); 11925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result.appendLiteral("attr("); 11935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result.append(m_value.string); 11945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result.append(')'); 11955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) text = result.toString(); 11975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 11985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 11995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_COUNTER_NAME: 12005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) text = "counter(" + String(m_value.string) + ')'; 12015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 12025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_COUNTER: { 12035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) StringBuilder result; 12045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String separator = m_value.counter->separator(); 12055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (separator.isEmpty()) 12065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result.appendLiteral("counter("); 12075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 12085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result.appendLiteral("counters("); 12095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result.append(m_value.counter->identifier()); 12115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!separator.isEmpty()) { 12125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result.appendLiteral(", "); 12135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result.append(quoteCSSStringIfNeeded(separator)); 12145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 12155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String listStyle = m_value.counter->listStyle(); 12165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!listStyle.isEmpty()) { 12175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result.appendLiteral(", "); 12185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result.append(listStyle); 12195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 12205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result.append(')'); 12215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) text = result.toString(); 12235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 12245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 12255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_RECT: 12265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) text = getRectValue()->cssText(); 12275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 12285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_QUAD: 12295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) text = getQuadValue()->cssText(); 12305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 12315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_RGBCOLOR: 12325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_PARSER_HEXCOLOR: { 12335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RGBA32 rgbColor = m_value.rgbcolor; 12345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_primitiveUnitType == CSS_PARSER_HEXCOLOR) 12355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Color::parseHexColor(m_value.string, rgbColor); 12365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Color color(rgbColor); 123709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) text = color.serializedAsCSSComponentValue(); 12385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 12395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 12405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_PAIR: 12415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) text = getPairValue()->cssText(); 12425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 12435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_CALC: 12445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) text = m_value.calc->cssText(); 12455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 12465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_SHAPE: 12475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) text = m_value.shape->cssText(); 12485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 12495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 12505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!cssTextCache().contains(this)); 12525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cssTextCache().set(this, text); 12535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_hasCachedCSSText = true; 12545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return text; 12555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 125709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)PassRefPtrWillBeRawPtr<CSSPrimitiveValue> CSSPrimitiveValue::cloneForCSSOM() const 12585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 125907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch RefPtrWillBeRawPtr<CSSPrimitiveValue> result = nullptr; 12605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (m_primitiveUnitType) { 12625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_STRING: 12635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_URI: 12645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_ATTR: 12655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_COUNTER_NAME: 1266d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) result = CSSPrimitiveValue::create(m_value.string, static_cast<UnitType>(m_primitiveUnitType)); 12675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 12685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_COUNTER: 12695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result = CSSPrimitiveValue::create(m_value.counter->cloneForCSSOM()); 12705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 12715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_RECT: 12725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result = CSSPrimitiveValue::create(m_value.rect->cloneForCSSOM()); 12735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 12745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_QUAD: 12755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result = CSSPrimitiveValue::create(m_value.quad->cloneForCSSOM()); 12765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 12775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_PAIR: 12785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Pair is not exposed to the CSSOM, no need for a deep clone. 12795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result = CSSPrimitiveValue::create(m_value.pair); 12805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 12815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_CALC: 12825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // CSSCalcValue is not exposed to the CSSOM, no need for a deep clone. 12835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result = CSSPrimitiveValue::create(m_value.calc); 12845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 12855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_SHAPE: 12865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // CSSShapeValue is not exposed to the CSSOM, no need for a deep clone. 12875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result = CSSPrimitiveValue::create(m_value.shape); 12885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 12895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_NUMBER: 12905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_PERCENTAGE: 12915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_EMS: 12925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_EXS: 12935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_REMS: 1294926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_CHS: 12955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_PX: 12965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_CM: 12975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_MM: 12985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_IN: 12995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_PT: 13005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_PC: 13015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_DEG: 13025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_RAD: 13035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_GRAD: 13045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_MS: 13055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_S: 13065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_HZ: 13075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_KHZ: 13085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_TURN: 13095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_VW: 13105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_VH: 13115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_VMIN: 1312926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_VMAX: 13135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_DPPX: 13145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_DPI: 13155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_DPCM: 1316c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) case CSS_FR: 1317d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) result = CSSPrimitiveValue::create(m_value.num, static_cast<UnitType>(m_primitiveUnitType)); 13185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 13195267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) case CSS_PROPERTY_ID: 13205267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) result = CSSPrimitiveValue::createIdentifier(m_value.propertyID); 13215267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) break; 13225267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) case CSS_VALUE_ID: 13235267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) result = CSSPrimitiveValue::createIdentifier(m_value.valueID); 13245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 13255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_RGBCOLOR: 13265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result = CSSPrimitiveValue::createColor(m_value.rgbcolor); 13275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 13285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_DIMENSION: 13295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_UNKNOWN: 13305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case CSS_PARSER_HEXCOLOR: 13315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT_NOT_REACHED(); 13325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 13335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 13345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (result) 13355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result->setCSSOMSafe(); 13365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return result; 13385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1340926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool CSSPrimitiveValue::equals(const CSSPrimitiveValue& other) const 1341926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 1342926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (m_primitiveUnitType != other.m_primitiveUnitType) 1343926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return false; 1344926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1345926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) switch (m_primitiveUnitType) { 1346926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_UNKNOWN: 1347926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return false; 1348926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_NUMBER: 1349926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_PERCENTAGE: 1350926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_EMS: 1351926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_EXS: 1352926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_REMS: 1353926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_PX: 1354926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_CM: 1355926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_DPPX: 1356926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_DPI: 1357926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_DPCM: 1358926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_MM: 1359926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_IN: 1360926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_PT: 1361926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_PC: 1362926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_DEG: 1363926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_RAD: 1364926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_GRAD: 1365926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_MS: 1366926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_S: 1367926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_HZ: 1368926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_KHZ: 1369926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_TURN: 1370926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_VW: 1371926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_VH: 1372926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_VMIN: 137353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) case CSS_VMAX: 1374926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_DIMENSION: 1375c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) case CSS_FR: 1376926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return m_value.num == other.m_value.num; 13775267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) case CSS_PROPERTY_ID: 13785267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return propertyName(m_value.propertyID) == propertyName(other.m_value.propertyID); 13795267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) case CSS_VALUE_ID: 13805267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return valueName(m_value.valueID) == valueName(other.m_value.valueID); 1381926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_STRING: 1382926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_URI: 1383926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_ATTR: 1384926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_COUNTER_NAME: 1385926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_PARSER_HEXCOLOR: 1386926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return equal(m_value.string, other.m_value.string); 1387926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_COUNTER: 1388926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return m_value.counter && other.m_value.counter && m_value.counter->equals(*other.m_value.counter); 1389926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_RECT: 1390926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return m_value.rect && other.m_value.rect && m_value.rect->equals(*other.m_value.rect); 1391926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_QUAD: 1392926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return m_value.quad && other.m_value.quad && m_value.quad->equals(*other.m_value.quad); 1393926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_RGBCOLOR: 1394926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return m_value.rgbcolor == other.m_value.rgbcolor; 1395926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_PAIR: 1396926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return m_value.pair && other.m_value.pair && m_value.pair->equals(*other.m_value.pair); 1397926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_CALC: 1398926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return m_value.calc && other.m_value.calc && m_value.calc->equals(*other.m_value.calc); 1399926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSS_SHAPE: 1400926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return m_value.shape && other.m_value.shape && m_value.shape->equals(*other.m_value.shape); 1401926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 1402926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return false; 1403926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 1404926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 140509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void CSSPrimitiveValue::traceAfterDispatch(Visitor* visitor) 140609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 1407197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#if ENABLE(OILPAN) 140809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) switch (m_primitiveUnitType) { 140909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case CSS_COUNTER: 141009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) visitor->trace(m_value.counter); 141109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) break; 1412d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) case CSS_RECT: 1413d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) visitor->trace(m_value.rect); 1414d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) break; 1415d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) case CSS_QUAD: 1416d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) visitor->trace(m_value.quad); 1417d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) break; 141809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case CSS_PAIR: 141909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) visitor->trace(m_value.pair); 142009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) break; 142109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case CSS_CALC: 142209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) visitor->trace(m_value.calc); 142309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) break; 1424d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) case CSS_SHAPE: 1425d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) visitor->trace(m_value.shape); 1426d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) break; 142709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) default: 142809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) break; 142909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 1430197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#endif 143109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) CSSValue::traceAfterDispatch(visitor); 143209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 143309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 1434c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 1435