| OLD | NEW |
| 1 /* | 1 /* |
| 2 * (C) 1999-2003 Lars Knoll (knoll@kde.org) | 2 * (C) 1999-2003 Lars Knoll (knoll@kde.org) |
| 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2012 Apple Inc. All rights reserv
ed. | 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2012 Apple Inc. All rights reserv
ed. |
| 4 * | 4 * |
| 5 * This library is free software; you can redistribute it and/or | 5 * This library is free software; you can redistribute it and/or |
| 6 * modify it under the terms of the GNU Library General Public | 6 * modify it under the terms of the GNU Library General Public |
| 7 * License as published by the Free Software Foundation; either | 7 * License as published by the Free Software Foundation; either |
| 8 * version 2 of the License, or (at your option) any later version. | 8 * version 2 of the License, or (at your option) any later version. |
| 9 * | 9 * |
| 10 * This library is distributed in the hope that it will be useful, | 10 * This library is distributed in the hope that it will be useful, |
| 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 13 * Library General Public License for more details. | 13 * Library General Public License for more details. |
| 14 * | 14 * |
| 15 * You should have received a copy of the GNU Library General Public License | 15 * You should have received a copy of the GNU Library General Public License |
| 16 * along with this library; see the file COPYING.LIB. If not, write to | 16 * along with this library; see the file COPYING.LIB. If not, write to |
| 17 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | 17 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
| 18 * Boston, MA 02110-1301, USA. | 18 * Boston, MA 02110-1301, USA. |
| 19 */ | 19 */ |
| 20 | 20 |
| 21 #include "sky/engine/config.h" | 21 #include "sky/engine/config.h" |
| 22 #include "sky/engine/core/css/CSSPrimitiveValue.h" | 22 #include "sky/engine/core/css/CSSPrimitiveValue.h" |
| 23 | 23 |
| 24 #include "sky/engine/bindings/core/v8/ExceptionState.h" | 24 #include "sky/engine/bindings2/exception_state.h" |
| 25 #include "sky/engine/core/css/CSSBasicShapes.h" | 25 #include "sky/engine/core/css/CSSBasicShapes.h" |
| 26 #include "sky/engine/core/css/CSSCalculationValue.h" | 26 #include "sky/engine/core/css/CSSCalculationValue.h" |
| 27 #include "sky/engine/core/css/CSSHelper.h" | 27 #include "sky/engine/core/css/CSSHelper.h" |
| 28 #include "sky/engine/core/css/CSSMarkup.h" | 28 #include "sky/engine/core/css/CSSMarkup.h" |
| 29 #include "sky/engine/core/css/CSSToLengthConversionData.h" | 29 #include "sky/engine/core/css/CSSToLengthConversionData.h" |
| 30 #include "sky/engine/core/css/Pair.h" | 30 #include "sky/engine/core/css/Pair.h" |
| 31 #include "sky/engine/core/css/RGBColor.h" | 31 #include "sky/engine/core/css/RGBColor.h" |
| 32 #include "sky/engine/core/css/Rect.h" | 32 #include "sky/engine/core/css/Rect.h" |
| 33 #include "sky/engine/core/css/StyleSheetContents.h" | 33 #include "sky/engine/core/css/StyleSheetContents.h" |
| 34 #include "sky/engine/core/dom/ExceptionCode.h" | 34 #include "sky/engine/core/dom/ExceptionCode.h" |
| (...skipping 618 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 653 LengthUnitType lengthType; | 653 LengthUnitType lengthType; |
| 654 if (unitTypeToLengthUnitType(static_cast<UnitType>(m_primitiveUnitType), len
gthType)) | 654 if (unitTypeToLengthUnitType(static_cast<UnitType>(m_primitiveUnitType), len
gthType)) |
| 655 lengthArray.at(lengthType) += m_value.num * conversionToCanonicalUnitsSc
aleFactor(static_cast<UnitType>(m_primitiveUnitType)) * multiplier; | 655 lengthArray.at(lengthType) += m_value.num * conversionToCanonicalUnitsSc
aleFactor(static_cast<UnitType>(m_primitiveUnitType)) * multiplier; |
| 656 } | 656 } |
| 657 | 657 |
| 658 void CSSPrimitiveValue::setFloatValue(unsigned short, double, ExceptionState& ex
ceptionState) | 658 void CSSPrimitiveValue::setFloatValue(unsigned short, double, ExceptionState& ex
ceptionState) |
| 659 { | 659 { |
| 660 // Keeping values immutable makes optimizations easier and allows sharing of
the primitive value objects. | 660 // Keeping values immutable makes optimizations easier and allows sharing of
the primitive value objects. |
| 661 // No other engine supports mutating style through this API. Computed style
is always read-only anyway. | 661 // No other engine supports mutating style through this API. Computed style
is always read-only anyway. |
| 662 // Supporting setter would require making primitive value copy-on-write and
taking care of style invalidation. | 662 // Supporting setter would require making primitive value copy-on-write and
taking care of style invalidation. |
| 663 exceptionState.throwDOMException(NoModificationAllowedError, "CSSPrimitiveVa
lue objects are read-only."); | 663 exceptionState.ThrowDOMException(NoModificationAllowedError, "CSSPrimitiveVa
lue objects are read-only."); |
| 664 } | 664 } |
| 665 | 665 |
| 666 double CSSPrimitiveValue::conversionToCanonicalUnitsScaleFactor(UnitType unitTyp
e) | 666 double CSSPrimitiveValue::conversionToCanonicalUnitsScaleFactor(UnitType unitTyp
e) |
| 667 { | 667 { |
| 668 double factor = 1.0; | 668 double factor = 1.0; |
| 669 // FIXME: the switch can be replaced by an array of scale factors. | 669 // FIXME: the switch can be replaced by an array of scale factors. |
| 670 switch (unitType) { | 670 switch (unitType) { |
| 671 // These are "canonical" units in their respective categories. | 671 // These are "canonical" units in their respective categories. |
| 672 case CSS_PX: | 672 case CSS_PX: |
| 673 case CSS_DEG: | 673 case CSS_DEG: |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 713 } | 713 } |
| 714 | 714 |
| 715 return factor; | 715 return factor; |
| 716 } | 716 } |
| 717 | 717 |
| 718 double CSSPrimitiveValue::getDoubleValue(UnitType unitType, ExceptionState& exce
ptionState) const | 718 double CSSPrimitiveValue::getDoubleValue(UnitType unitType, ExceptionState& exce
ptionState) const |
| 719 { | 719 { |
| 720 double result = 0; | 720 double result = 0; |
| 721 bool success = getDoubleValueInternal(unitType, &result); | 721 bool success = getDoubleValueInternal(unitType, &result); |
| 722 if (!success) { | 722 if (!success) { |
| 723 exceptionState.throwDOMException(InvalidAccessError, "Failed to obtain a
double value."); | 723 exceptionState.ThrowDOMException(InvalidAccessError, "Failed to obtain a
double value."); |
| 724 return 0.0; | 724 return 0.0; |
| 725 } | 725 } |
| 726 | 726 |
| 727 return result; | 727 return result; |
| 728 } | 728 } |
| 729 | 729 |
| 730 double CSSPrimitiveValue::getDoubleValue(UnitType unitType) const | 730 double CSSPrimitiveValue::getDoubleValue(UnitType unitType) const |
| 731 { | 731 { |
| 732 double result = 0; | 732 double result = 0; |
| 733 getDoubleValueInternal(unitType, &result); | 733 getDoubleValueInternal(unitType, &result); |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 879 } | 879 } |
| 880 ASSERT_NOT_REACHED(); | 880 ASSERT_NOT_REACHED(); |
| 881 return CSSPrimitiveValue::CSS_UNKNOWN; | 881 return CSSPrimitiveValue::CSS_UNKNOWN; |
| 882 } | 882 } |
| 883 | 883 |
| 884 void CSSPrimitiveValue::setStringValue(unsigned short, const String&, ExceptionS
tate& exceptionState) | 884 void CSSPrimitiveValue::setStringValue(unsigned short, const String&, ExceptionS
tate& exceptionState) |
| 885 { | 885 { |
| 886 // Keeping values immutable makes optimizations easier and allows sharing of
the primitive value objects. | 886 // Keeping values immutable makes optimizations easier and allows sharing of
the primitive value objects. |
| 887 // No other engine supports mutating style through this API. Computed style
is always read-only anyway. | 887 // No other engine supports mutating style through this API. Computed style
is always read-only anyway. |
| 888 // Supporting setter would require making primitive value copy-on-write and
taking care of style invalidation. | 888 // Supporting setter would require making primitive value copy-on-write and
taking care of style invalidation. |
| 889 exceptionState.throwDOMException(NoModificationAllowedError, "CSSPrimitiveVa
lue objects are read-only."); | 889 exceptionState.ThrowDOMException(NoModificationAllowedError, "CSSPrimitiveVa
lue objects are read-only."); |
| 890 } | 890 } |
| 891 | 891 |
| 892 String CSSPrimitiveValue::getStringValue(ExceptionState& exceptionState) const | 892 String CSSPrimitiveValue::getStringValue(ExceptionState& exceptionState) const |
| 893 { | 893 { |
| 894 switch (m_primitiveUnitType) { | 894 switch (m_primitiveUnitType) { |
| 895 case CSS_STRING: | 895 case CSS_STRING: |
| 896 case CSS_ATTR: | 896 case CSS_ATTR: |
| 897 case CSS_URI: | 897 case CSS_URI: |
| 898 return m_value.string; | 898 return m_value.string; |
| 899 case CSS_VALUE_ID: | 899 case CSS_VALUE_ID: |
| 900 return valueName(m_value.valueID); | 900 return valueName(m_value.valueID); |
| 901 case CSS_PROPERTY_ID: | 901 case CSS_PROPERTY_ID: |
| 902 return propertyName(m_value.propertyID); | 902 return propertyName(m_value.propertyID); |
| 903 default: | 903 default: |
| 904 exceptionState.throwDOMException(InvalidAccessError, "This object's
value cannot be represented as a string."); | 904 exceptionState.ThrowDOMException(InvalidAccessError, "This object's
value cannot be represented as a string."); |
| 905 break; | 905 break; |
| 906 } | 906 } |
| 907 | 907 |
| 908 return String(); | 908 return String(); |
| 909 } | 909 } |
| 910 | 910 |
| 911 String CSSPrimitiveValue::getStringValue() const | 911 String CSSPrimitiveValue::getStringValue() const |
| 912 { | 912 { |
| 913 switch (m_primitiveUnitType) { | 913 switch (m_primitiveUnitType) { |
| 914 case CSS_STRING: | 914 case CSS_STRING: |
| 915 case CSS_ATTR: | 915 case CSS_ATTR: |
| 916 case CSS_URI: | 916 case CSS_URI: |
| 917 return m_value.string; | 917 return m_value.string; |
| 918 case CSS_VALUE_ID: | 918 case CSS_VALUE_ID: |
| 919 return valueName(m_value.valueID); | 919 return valueName(m_value.valueID); |
| 920 case CSS_PROPERTY_ID: | 920 case CSS_PROPERTY_ID: |
| 921 return propertyName(m_value.propertyID); | 921 return propertyName(m_value.propertyID); |
| 922 default: | 922 default: |
| 923 break; | 923 break; |
| 924 } | 924 } |
| 925 | 925 |
| 926 return String(); | 926 return String(); |
| 927 } | 927 } |
| 928 | 928 |
| 929 Rect* CSSPrimitiveValue::getRectValue(ExceptionState& exceptionState) const | 929 Rect* CSSPrimitiveValue::getRectValue(ExceptionState& exceptionState) const |
| 930 { | 930 { |
| 931 if (m_primitiveUnitType != CSS_RECT) { | 931 if (m_primitiveUnitType != CSS_RECT) { |
| 932 exceptionState.throwDOMException(InvalidAccessError, "This object is not
a rect value."); | 932 exceptionState.ThrowDOMException(InvalidAccessError, "This object is not
a rect value."); |
| 933 return 0; | 933 return 0; |
| 934 } | 934 } |
| 935 | 935 |
| 936 return m_value.rect; | 936 return m_value.rect; |
| 937 } | 937 } |
| 938 | 938 |
| 939 Quad* CSSPrimitiveValue::getQuadValue(ExceptionState& exceptionState) const | 939 Quad* CSSPrimitiveValue::getQuadValue(ExceptionState& exceptionState) const |
| 940 { | 940 { |
| 941 if (m_primitiveUnitType != CSS_QUAD) { | 941 if (m_primitiveUnitType != CSS_QUAD) { |
| 942 exceptionState.throwDOMException(InvalidAccessError, "This object is not
a quad value."); | 942 exceptionState.ThrowDOMException(InvalidAccessError, "This object is not
a quad value."); |
| 943 return 0; | 943 return 0; |
| 944 } | 944 } |
| 945 | 945 |
| 946 return m_value.quad; | 946 return m_value.quad; |
| 947 } | 947 } |
| 948 | 948 |
| 949 PassRefPtr<RGBColor> CSSPrimitiveValue::getRGBColorValue(ExceptionState& excepti
onState) const | 949 PassRefPtr<RGBColor> CSSPrimitiveValue::getRGBColorValue(ExceptionState& excepti
onState) const |
| 950 { | 950 { |
| 951 if (m_primitiveUnitType != CSS_RGBCOLOR) { | 951 if (m_primitiveUnitType != CSS_RGBCOLOR) { |
| 952 exceptionState.throwDOMException(InvalidAccessError, "This object is not
an RGB color value."); | 952 exceptionState.ThrowDOMException(InvalidAccessError, "This object is not
an RGB color value."); |
| 953 return nullptr; | 953 return nullptr; |
| 954 } | 954 } |
| 955 | 955 |
| 956 // FIMXE: This should not return a new object for each invocation. | 956 // FIMXE: This should not return a new object for each invocation. |
| 957 return RGBColor::create(m_value.rgbcolor); | 957 return RGBColor::create(m_value.rgbcolor); |
| 958 } | 958 } |
| 959 | 959 |
| 960 Pair* CSSPrimitiveValue::getPairValue(ExceptionState& exceptionState) const | 960 Pair* CSSPrimitiveValue::getPairValue(ExceptionState& exceptionState) const |
| 961 { | 961 { |
| 962 if (m_primitiveUnitType != CSS_PAIR) { | 962 if (m_primitiveUnitType != CSS_PAIR) { |
| 963 exceptionState.throwDOMException(InvalidAccessError, "This object is not
a pair value."); | 963 exceptionState.ThrowDOMException(InvalidAccessError, "This object is not
a pair value."); |
| 964 return 0; | 964 return 0; |
| 965 } | 965 } |
| 966 | 966 |
| 967 return m_value.pair; | 967 return m_value.pair; |
| 968 } | 968 } |
| 969 | 969 |
| 970 static String formatNumber(double number, const char* suffix, unsigned suffixLen
gth) | 970 static String formatNumber(double number, const char* suffix, unsigned suffixLen
gth) |
| 971 { | 971 { |
| 972 Decimal decimal = Decimal::fromDouble(number); | 972 Decimal decimal = Decimal::fromDouble(number); |
| 973 String result = decimal.toString(); | 973 String result = decimal.toString(); |
| (...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1301 return m_value.pair && other.m_value.pair && m_value.pair->equals(*other
.m_value.pair); | 1301 return m_value.pair && other.m_value.pair && m_value.pair->equals(*other
.m_value.pair); |
| 1302 case CSS_CALC: | 1302 case CSS_CALC: |
| 1303 return m_value.calc && other.m_value.calc && m_value.calc->equals(*other
.m_value.calc); | 1303 return m_value.calc && other.m_value.calc && m_value.calc->equals(*other
.m_value.calc); |
| 1304 case CSS_SHAPE: | 1304 case CSS_SHAPE: |
| 1305 return m_value.shape && other.m_value.shape && m_value.shape->equals(*ot
her.m_value.shape); | 1305 return m_value.shape && other.m_value.shape && m_value.shape->equals(*ot
her.m_value.shape); |
| 1306 } | 1306 } |
| 1307 return false; | 1307 return false; |
| 1308 } | 1308 } |
| 1309 | 1309 |
| 1310 } // namespace blink | 1310 } // namespace blink |
| OLD | NEW |