diff options
Diffstat (limited to 'WebCore/css')
-rw-r--r-- | WebCore/css/AndroidCSSPropertyNames.in | 34 | ||||
-rw-r--r-- | WebCore/css/CSSComputedStyleDeclaration.cpp | 35 | ||||
-rw-r--r-- | WebCore/css/CSSMutableStyleDeclaration.cpp | 14 | ||||
-rw-r--r-- | WebCore/css/CSSParser.cpp | 30 | ||||
-rw-r--r-- | WebCore/css/CSSPropertyNames.in | 3 | ||||
-rw-r--r-- | WebCore/css/CSSStyleSelector.cpp | 132 |
6 files changed, 245 insertions, 3 deletions
diff --git a/WebCore/css/AndroidCSSPropertyNames.in b/WebCore/css/AndroidCSSPropertyNames.in new file mode 100644 index 0000000..ef67d6b --- /dev/null +++ b/WebCore/css/AndroidCSSPropertyNames.in @@ -0,0 +1,34 @@ +# Copyright 2010, The Android Open Source Project +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +-webkit-ring +-webkit-ring-fill-color +-webkit-ring-inner-width +-webkit-ring-outer-width +-webkit-ring-outset +-webkit-ring-pressed-inner-color +-webkit-ring-pressed-outer-color +-webkit-ring-radius +-webkit-ring-selected-inner-color +-webkit-ring-selected-outer-color +-webkit-tap-highlight-color diff --git a/WebCore/css/CSSComputedStyleDeclaration.cpp b/WebCore/css/CSSComputedStyleDeclaration.cpp index 6bb025d..418251f 100644 --- a/WebCore/css/CSSComputedStyleDeclaration.cpp +++ b/WebCore/css/CSSComputedStyleDeclaration.cpp @@ -271,6 +271,18 @@ static const int computedProperties[] = { CSSPropertyWebkitSvgShadow, CSSPropertyVectorEffect #endif +#ifdef ANDROID_CSS_RING + , + CSSPropertyWebkitRingFillColor, + CSSPropertyWebkitRingInnerWidth, + CSSPropertyWebkitRingOuterWidth, + CSSPropertyWebkitRingOutset, + CSSPropertyWebkitRingPressedInnerColor, + CSSPropertyWebkitRingPressedOuterColor, + CSSPropertyWebkitRingRadius, + CSSPropertyWebkitRingSelectedInnerColor, + CSSPropertyWebkitRingSelectedOuterColor +#endif #ifdef ANDROID_CSS_TAP_HIGHLIGHT_COLOR , CSSPropertyWebkitTapHighlightColor @@ -1540,6 +1552,29 @@ PassRefPtr<CSSValue> CSSComputedStyleDeclaration::getPropertyCSSValue(int proper case CSSPropertyWebkitTransition: case CSSPropertyWebkitVariableDeclarationBlock: break; +#ifdef ANDROID_CSS_RING + case CSSPropertyWebkitRing: + // shorthand property currently not supported see bug 13658 + break; + case CSSPropertyWebkitRingFillColor: + return CSSPrimitiveValue::createColor(style->ringFillColor().rgb()); + case CSSPropertyWebkitRingInnerWidth: + return CSSPrimitiveValue::create(style->ringInnerWidth()); + case CSSPropertyWebkitRingOuterWidth: + return CSSPrimitiveValue::create(style->ringOuterWidth()); + case CSSPropertyWebkitRingOutset: + return CSSPrimitiveValue::create(style->ringOutset()); + case CSSPropertyWebkitRingPressedInnerColor: + return CSSPrimitiveValue::createColor(style->ringPressedInnerColor().rgb()); + case CSSPropertyWebkitRingPressedOuterColor: + return CSSPrimitiveValue::createColor(style->ringPressedOuterColor().rgb()); + case CSSPropertyWebkitRingRadius: + return CSSPrimitiveValue::create(style->ringRadius()); + case CSSPropertyWebkitRingSelectedInnerColor: + return CSSPrimitiveValue::createColor(style->ringSelectedInnerColor().rgb()); + case CSSPropertyWebkitRingSelectedOuterColor: + return CSSPrimitiveValue::createColor(style->ringSelectedOuterColor().rgb()); +#endif #ifdef ANDROID_CSS_TAP_HIGHLIGHT_COLOR case CSSPropertyWebkitTapHighlightColor: return CSSPrimitiveValue::createColor(style->tapHighlightColor().rgb()); diff --git a/WebCore/css/CSSMutableStyleDeclaration.cpp b/WebCore/css/CSSMutableStyleDeclaration.cpp index 8d37a2e..e3fed35 100644 --- a/WebCore/css/CSSMutableStyleDeclaration.cpp +++ b/WebCore/css/CSSMutableStyleDeclaration.cpp @@ -258,6 +258,20 @@ String CSSMutableStyleDeclaration::getPropertyValue(int propertyID) const return value->cssText(); } #endif +#ifdef ANDROID_CSS_RING + case CSSPropertyWebkitRing: { + const int properties[9] = { CSSPropertyWebkitRingFillColor, + CSSPropertyWebkitRingInnerWidth, + CSSPropertyWebkitRingOuterWidth, + CSSPropertyWebkitRingOutset, + CSSPropertyWebkitRingPressedInnerColor, + CSSPropertyWebkitRingPressedOuterColor, + CSSPropertyWebkitRingRadius, + CSSPropertyWebkitRingSelectedInnerColor, + CSSPropertyWebkitRingSelectedOuterColor }; + return getLayeredShorthandValue(properties, 9); + } +#endif } return String(); } diff --git a/WebCore/css/CSSParser.cpp b/WebCore/css/CSSParser.cpp index a084474..cdd6294 100644 --- a/WebCore/css/CSSParser.cpp +++ b/WebCore/css/CSSParser.cpp @@ -1816,6 +1816,36 @@ bool CSSParser::parseValue(int propId, bool important) break; #endif +#ifdef ANDROID_CSS_RING + case CSSPropertyWebkitRing: + { + const int properties[9] = { CSSPropertyWebkitRingFillColor, + CSSPropertyWebkitRingInnerWidth, + CSSPropertyWebkitRingOuterWidth, + CSSPropertyWebkitRingOutset, + CSSPropertyWebkitRingPressedInnerColor, + CSSPropertyWebkitRingPressedOuterColor, + CSSPropertyWebkitRingRadius, + CSSPropertyWebkitRingSelectedInnerColor, + CSSPropertyWebkitRingSelectedOuterColor }; + return parseShorthand(propId, properties, 9, important); + } + case CSSPropertyWebkitRingFillColor: + case CSSPropertyWebkitRingPressedInnerColor: + case CSSPropertyWebkitRingPressedOuterColor: + case CSSPropertyWebkitRingSelectedInnerColor: + case CSSPropertyWebkitRingSelectedOuterColor: + parsedValue = parseColor(); + if (parsedValue) + m_valueList->next(); + break; + case CSSPropertyWebkitRingInnerWidth: + case CSSPropertyWebkitRingOuterWidth: + case CSSPropertyWebkitRingOutset: + case CSSPropertyWebkitRingRadius: + validPrimitive = validUnit(value, FLength | FNonNeg, m_strict); + break; +#endif #ifdef ANDROID_CSS_TAP_HIGHLIGHT_COLOR case CSSPropertyWebkitTapHighlightColor: parsedValue = parseColor(); diff --git a/WebCore/css/CSSPropertyNames.in b/WebCore/css/CSSPropertyNames.in index 1a79602..d236b45 100644 --- a/WebCore/css/CSSPropertyNames.in +++ b/WebCore/css/CSSPropertyNames.in @@ -255,9 +255,6 @@ z-index -webkit-perspective-origin-x -webkit-perspective-origin-y -webkit-rtl-ordering -# ANDROID_CSS_TAP_HIGHLIGHT_COLOR: added CSS property (also in iPhone) --webkit-tap-highlight-color -# end ANDROID_CSS_TAP_HIGHLIGHT_COLOR -webkit-text-decorations-in-effect -webkit-text-fill-color -webkit-text-security diff --git a/WebCore/css/CSSStyleSelector.cpp b/WebCore/css/CSSStyleSelector.cpp index 40b11d9..bd94b68 100644 --- a/WebCore/css/CSSStyleSelector.cpp +++ b/WebCore/css/CSSStyleSelector.cpp @@ -5556,6 +5556,138 @@ void CSSStyleSelector::applyProperty(int id, CSSValue *value) return; #endif +#ifdef ANDROID_CSS_RING + case CSSPropertyWebkitRing: + if (valueType != CSSValue::CSS_INHERIT || !m_parentNode) return; + m_style->setRingFillColor(m_parentStyle->ringFillColor()); + m_style->setRingInnerWidth(m_parentStyle->ringInnerWidth()); + m_style->setRingOuterWidth(m_parentStyle->ringOuterWidth()); + m_style->setRingOutset(m_parentStyle->ringOutset()); + m_style->setRingPressedInnerColor(m_parentStyle->ringPressedInnerColor()); + m_style->setRingPressedOuterColor(m_parentStyle->ringPressedOuterColor()); + m_style->setRingRadius(m_parentStyle->ringRadius()); + m_style->setRingSelectedInnerColor(m_parentStyle->ringSelectedInnerColor()); + m_style->setRingSelectedOuterColor(m_parentStyle->ringSelectedOuterColor()); + return; + case CSSPropertyWebkitRingFillColor: { + HANDLE_INHERIT_AND_INITIAL(ringFillColor, RingFillColor); + if (!primitiveValue) + break; + Color col = getColorFromPrimitiveValue(primitiveValue).blendWithWhite(); + m_style->setRingFillColor(col); + return; + } + case CSSPropertyWebkitRingInnerWidth: { + HANDLE_INHERIT_AND_INITIAL(ringInnerWidth, RingInnerWidth) + if (!primitiveValue) + break; + Length l; + int type = primitiveValue->primitiveType(); + if (CSSPrimitiveValue::isUnitTypeLength(type)) { + // width can be specified with fractional px + // scale by 16 here (and unscale in android_graphics) to keep + // 4 bits of fraction + RefPtr<CSSPrimitiveValue> scaledValue = CSSPrimitiveValue::create( + primitiveValue->getFloatValue() * 16, + (CSSPrimitiveValue::UnitTypes) type); + l = Length(scaledValue->computeLengthIntForLength(style(), + m_rootElementStyle, zoomFactor), Fixed); + scaledValue.release(); + } else if (type == CSSPrimitiveValue::CSS_PERCENTAGE) + l = Length(primitiveValue->getDoubleValue(), Percent); + else + return; + m_style->setRingInnerWidth(l); + return; + } + case CSSPropertyWebkitRingOuterWidth: { + HANDLE_INHERIT_AND_INITIAL(ringOuterWidth, RingOuterWidth) + if (!primitiveValue) + break; + Length l; + int type = primitiveValue->primitiveType(); + if (CSSPrimitiveValue::isUnitTypeLength(type)) { + // width can be specified with fractional px + // scale by 16 here (and unscale in android_graphics) to keep + // 4 bits of fraction + RefPtr<CSSPrimitiveValue> scaledValue = CSSPrimitiveValue::create( + primitiveValue->getFloatValue() * 16, + (CSSPrimitiveValue::UnitTypes) type); + l = Length(scaledValue->computeLengthIntForLength(style(), + m_rootElementStyle, zoomFactor), Fixed); + scaledValue.release(); + } else if (type == CSSPrimitiveValue::CSS_PERCENTAGE) + l = Length(primitiveValue->getDoubleValue(), Percent); + else + return; + m_style->setRingOuterWidth(l); + return; + } + case CSSPropertyWebkitRingOutset: { + HANDLE_INHERIT_AND_INITIAL(ringOutset, RingOutset) + if (!primitiveValue) + break; + Length l; + int type = primitiveValue->primitiveType(); + if (CSSPrimitiveValue::isUnitTypeLength(type)) + l = Length(primitiveValue->computeLengthIntForLength(style(), + m_rootElementStyle, zoomFactor), Fixed); + else if (type == CSSPrimitiveValue::CSS_PERCENTAGE) + l = Length(primitiveValue->getDoubleValue(), Percent); + else + return; + m_style->setRingOutset(l); + return; + } + case CSSPropertyWebkitRingPressedInnerColor: { + HANDLE_INHERIT_AND_INITIAL(ringPressedInnerColor, RingPressedInnerColor); + if (!primitiveValue) + break; + Color col = getColorFromPrimitiveValue(primitiveValue).blendWithWhite(); + m_style->setRingPressedInnerColor(col); + return; + } + case CSSPropertyWebkitRingPressedOuterColor: { + HANDLE_INHERIT_AND_INITIAL(ringPressedOuterColor, RingPressedOuterColor); + if (!primitiveValue) + break; + Color col = getColorFromPrimitiveValue(primitiveValue).blendWithWhite(); + m_style->setRingPressedOuterColor(col); + return; + } + case CSSPropertyWebkitRingRadius: { + HANDLE_INHERIT_AND_INITIAL(ringRadius, RingRadius) + if (!primitiveValue) + break; + Length l; + int type = primitiveValue->primitiveType(); + if (CSSPrimitiveValue::isUnitTypeLength(type)) + l = Length(primitiveValue->computeLengthIntForLength(style(), + m_rootElementStyle, zoomFactor), Fixed); + else if (type == CSSPrimitiveValue::CSS_PERCENTAGE) + l = Length(primitiveValue->getDoubleValue(), Percent); + else + return; + m_style->setRingRadius(l); + return; + } + case CSSPropertyWebkitRingSelectedInnerColor: { + HANDLE_INHERIT_AND_INITIAL(ringSelectedInnerColor, RingSelectedInnerColor); + if (!primitiveValue) + break; + Color col = getColorFromPrimitiveValue(primitiveValue).blendWithWhite(); + m_style->setRingSelectedInnerColor(col); + return; + } + case CSSPropertyWebkitRingSelectedOuterColor: { + HANDLE_INHERIT_AND_INITIAL(ringSelectedOuterColor, RingSelectedOuterColor); + if (!primitiveValue) + break; + Color col = getColorFromPrimitiveValue(primitiveValue).blendWithWhite(); + m_style->setRingSelectedOuterColor(col); + return; + } +#endif #ifdef ANDROID_CSS_TAP_HIGHLIGHT_COLOR case CSSPropertyWebkitTapHighlightColor: { HANDLE_INHERIT_AND_INITIAL(tapHighlightColor, TapHighlightColor); |