css/CSSStyleRule.cpp
css/CSSStyleSheet.cpp
css/CSSTimingFunctionValue.cpp
+ css/CSSToStyleMap.cpp
css/CSSUnicodeRangeValue.cpp
css/CSSValue.cpp
css/CSSValueList.cpp
+2012-06-25 Eric Seidel <eric@webkit.org>
+
+ Split map* functions out of StyleResolver into a helper object
+ https://bugs.webkit.org/show_bug.cgi?id=89881
+
+ Reviewed by Daniel Bates.
+
+ These map* functions are completely independent of the rest of StyleResolver
+ and only exist to serve StyleBuilder.
+ CSSToStyleMap doesn't even want to have a StyleResolver pointer, but
+ currently needs one to access the resolve-lifetime caches for the
+ current resolve. Once we split out that per-resolve state into
+ some sort of ResolveState/ResolveInfo object (akin to PaintInfo/LayoutState)
+ then this object will be even simpler.
+
+ No behavioral change, thus no tests.
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * WebCore.gypi:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * css/CSSToStyleMap.cpp: Added.
+ (WebCore):
+ (WebCore::CSSToStyleMap::style):
+ (WebCore::CSSToStyleMap::rootElementStyle):
+ (WebCore::CSSToStyleMap::useSVGZoomRules):
+ (WebCore::CSSToStyleMap::styleImage):
+ (WebCore::CSSToStyleMap::mapFillAttachment):
+ (WebCore::CSSToStyleMap::mapFillClip):
+ (WebCore::CSSToStyleMap::mapFillComposite):
+ (WebCore::CSSToStyleMap::mapFillOrigin):
+ (WebCore::CSSToStyleMap::mapFillImage):
+ (WebCore::CSSToStyleMap::mapFillRepeatX):
+ (WebCore::CSSToStyleMap::mapFillRepeatY):
+ (WebCore::CSSToStyleMap::mapFillSize):
+ (WebCore::CSSToStyleMap::mapFillXPosition):
+ (WebCore::CSSToStyleMap::mapFillYPosition):
+ (WebCore::CSSToStyleMap::mapAnimationDelay):
+ (WebCore::CSSToStyleMap::mapAnimationDirection):
+ (WebCore::CSSToStyleMap::mapAnimationDuration):
+ (WebCore::CSSToStyleMap::mapAnimationFillMode):
+ (WebCore::CSSToStyleMap::mapAnimationIterationCount):
+ (WebCore::CSSToStyleMap::mapAnimationName):
+ (WebCore::CSSToStyleMap::mapAnimationPlayState):
+ (WebCore::CSSToStyleMap::mapAnimationProperty):
+ (WebCore::CSSToStyleMap::mapAnimationTimingFunction):
+ (WebCore::CSSToStyleMap::mapNinePieceImage):
+ (WebCore::CSSToStyleMap::mapNinePieceImageSlice):
+ (WebCore::CSSToStyleMap::mapNinePieceImageQuad):
+ (WebCore::CSSToStyleMap::mapNinePieceImageRepeat):
+ * css/CSSToStyleMap.h: Added.
+ (WebCore):
+ (CSSToStyleMap):
+ (WebCore::CSSToStyleMap::CSSToStyleMap):
+ * css/StyleBuilder.cpp:
+ (WebCore::ApplyPropertyFillLayer::applyValue):
+ (WebCore::ApplyPropertyBorderImage::applyValue):
+ (WebCore::ApplyPropertyBorderImageModifier::applyValue):
+ (WebCore):
+ (WebCore::ApplyPropertyAnimation::map):
+ (WebCore::StyleBuilder::StyleBuilder):
+ * css/StyleResolver.cpp:
+ (WebCore::StyleResolver::StyleResolver):
+ (WebCore::StyleResolver::collectMatchingRulesForList):
+ * css/StyleResolver.h:
+ (WebCore::StyleResolver::styleMap):
+ (StyleResolver):
+
2012-06-25 Gyuyoung Kim <gyuyoung.kim@samsung.com>
[EFL] Support screenDepth() functionality.
Source/WebCore/css/CSSStyleSheet.h \
Source/WebCore/css/CSSTimingFunctionValue.cpp \
Source/WebCore/css/CSSTimingFunctionValue.h \
+ Source/WebCore/css/CSSToStyleMap.cpp \
+ Source/WebCore/css/CSSToStyleMap.h \
Source/WebCore/css/CSSWrapShapes.cpp \
Source/WebCore/css/CSSWrapShapes.h \
Source/WebCore/css/CSSUnicodeRangeValue.cpp \
css/CSSStyleRule.cpp \
css/CSSStyleSheet.cpp \
css/CSSTimingFunctionValue.cpp \
+ css/CSSToStyleMap.cpp \
css/CSSUnicodeRangeValue.cpp \
css/CSSValue.cpp \
css/CSSValueList.cpp \
css/CSSStyleRule.h \
css/CSSStyleSheet.h \
css/CSSTimingFunctionValue.h \
+ css/CSSToStyleMap.h \
css/CSSUnicodeRangeValue.h \
css/CSSValue.cpp \
css/CSSValue.h \
'css/CSSStyleSheet.h',
'css/CSSTimingFunctionValue.cpp',
'css/CSSTimingFunctionValue.h',
+ 'css/CSSToStyleMap.cpp',
+ 'css/CSSToStyleMap.h',
'css/CSSUnicodeRangeValue.cpp',
'css/CSSUnicodeRangeValue.h',
'css/CSSUnknownRule.h',
>
</File>
<File
+ RelativePath="..\css\CSSToStyleMap.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\css\CSSToStyleMap.h"
+ >
+ </File>
+ <File
RelativePath="..\css\CSSUnicodeRangeValue.cpp"
>
<FileConfiguration
A871DFE40A15376B00B12A68 /* RenderWidget.h in Headers */ = {isa = PBXBuildFile; fileRef = A871DFE00A15376B00B12A68 /* RenderWidget.h */; settings = {ATTRIBUTES = (Private, ); }; };
A871DFE50A15376B00B12A68 /* RenderWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A871DFE10A15376B00B12A68 /* RenderWidget.cpp */; };
A8748BE012CBF2DC001FBA41 /* HashTools.h in Headers */ = {isa = PBXBuildFile; fileRef = A8748BDF12CBF2DC001FBA41 /* HashTools.h */; };
+ A882DA201593846A000115ED /* CSSToStyleMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A882DA1F1593846A000115ED /* CSSToStyleMap.cpp */; };
+ A882DA231593848D000115ED /* CSSToStyleMap.h in Headers */ = {isa = PBXBuildFile; fileRef = A882DA221593848D000115ED /* CSSToStyleMap.h */; };
A883DF270F3D045D00F19BF6 /* VisibleSelection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A883DF250F3D045D00F19BF6 /* VisibleSelection.cpp */; };
A883DF280F3D045D00F19BF6 /* VisibleSelection.h in Headers */ = {isa = PBXBuildFile; fileRef = A883DF260F3D045D00F19BF6 /* VisibleSelection.h */; settings = {ATTRIBUTES = (Private, ); }; };
A88AD52F09524B92001DD196 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A85D7A2F0879EBA9006A9172 /* QuartzCore.framework */; };
A8748BDF12CBF2DC001FBA41 /* HashTools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HashTools.h; sourceTree = "<group>"; };
A8748D6612CC3763001FBA41 /* ImageOrientation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageOrientation.h; sourceTree = "<group>"; };
A8748D7412CC3F89001FBA41 /* ImageOrientation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageOrientation.cpp; sourceTree = "<group>"; };
+ A882DA1F1593846A000115ED /* CSSToStyleMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSSToStyleMap.cpp; sourceTree = "<group>"; };
+ A882DA221593848D000115ED /* CSSToStyleMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSSToStyleMap.h; sourceTree = "<group>"; };
A883DF250F3D045D00F19BF6 /* VisibleSelection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VisibleSelection.cpp; sourceTree = "<group>"; };
A883DF260F3D045D00F19BF6 /* VisibleSelection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VisibleSelection.h; sourceTree = "<group>"; };
A886CDC214FBBAA300D279F4 /* WorkerContextWebSocket.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = WorkerContextWebSocket.idl; path = Modules/websockets/WorkerContextWebSocket.idl; sourceTree = "<group>"; };
BC9ADD7F0CC4092200098C4C /* WebKitCSSTransformValue.cpp */,
BC9ADD220CC4032600098C4C /* WebKitCSSTransformValue.h */,
31611E540E1C4D4A00F6A579 /* WebKitCSSTransformValue.idl */,
+ A882DA1F1593846A000115ED /* CSSToStyleMap.cpp */,
+ A882DA221593848D000115ED /* CSSToStyleMap.h */,
);
path = css;
sourceTree = "<group>";
CE7B2DB51586ABAD0098B3FA /* TextAlternativeWithRange.h in Headers */,
50987C27157D676D00BDA835 /* CustomFilterGlobalContext.h in Headers */,
4F32BB1B14FA85E800F6C1A3 /* MemoryInstrumentation.h in Headers */,
+ A882DA231593848D000115ED /* CSSToStyleMap.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
CE7B2DB41586ABAD0098B3FA /* AlternativeTextUIController.mm in Sources */,
CE7B2DB61586ABAD0098B3FA /* TextAlternativeWithRange.mm in Sources */,
50987C26157D676D00BDA835 /* CustomFilterGlobalContext.cpp in Sources */,
+ A882DA201593846A000115ED /* CSSToStyleMap.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
--- /dev/null
+/*
+ * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
+ * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com)
+ * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com)
+ * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved.
+ * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org>
+ * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org>
+ * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
+ * Copyright (c) 2011, Code Aurora Forum. All rights reserved.
+ * Copyright (C) Research In Motion Limited 2011. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include "CSSToStyleMap.h"
+
+#include "Animation.h"
+#include "CSSBorderImageSliceValue.h"
+#include "CSSPrimitiveValue.h"
+#include "CSSPrimitiveValueMappings.h"
+#include "CSSTimingFunctionValue.h"
+#include "CSSValueKeywords.h"
+#include "FillLayer.h"
+#include "Pair.h"
+#include "Rect.h"
+#include "StyleResolver.h"
+
+namespace WebCore {
+
+RenderStyle* CSSToStyleMap::style() const
+{
+ return m_resolver->style();
+}
+
+RenderStyle* CSSToStyleMap::rootElementStyle() const
+{
+ return m_resolver->rootElementStyle();
+}
+
+bool CSSToStyleMap::useSVGZoomRules() const
+{
+ return m_resolver->useSVGZoomRules();
+}
+
+PassRefPtr<StyleImage> CSSToStyleMap::styleImage(CSSPropertyID propertyId, CSSValue* value)
+{
+ return m_resolver->styleImage(propertyId, value);
+}
+
+void CSSToStyleMap::mapFillAttachment(CSSPropertyID, FillLayer* layer, CSSValue* value)
+{
+ if (value->isInitialValue()) {
+ layer->setAttachment(FillLayer::initialFillAttachment(layer->type()));
+ return;
+ }
+
+ if (!value->isPrimitiveValue())
+ return;
+
+ CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+ switch (primitiveValue->getIdent()) {
+ case CSSValueFixed:
+ layer->setAttachment(FixedBackgroundAttachment);
+ break;
+ case CSSValueScroll:
+ layer->setAttachment(ScrollBackgroundAttachment);
+ break;
+ case CSSValueLocal:
+ layer->setAttachment(LocalBackgroundAttachment);
+ break;
+ default:
+ return;
+ }
+}
+
+void CSSToStyleMap::mapFillClip(CSSPropertyID, FillLayer* layer, CSSValue* value)
+{
+ if (value->isInitialValue()) {
+ layer->setClip(FillLayer::initialFillClip(layer->type()));
+ return;
+ }
+
+ if (!value->isPrimitiveValue())
+ return;
+
+ CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+ layer->setClip(*primitiveValue);
+}
+
+void CSSToStyleMap::mapFillComposite(CSSPropertyID, FillLayer* layer, CSSValue* value)
+{
+ if (value->isInitialValue()) {
+ layer->setComposite(FillLayer::initialFillComposite(layer->type()));
+ return;
+ }
+
+ if (!value->isPrimitiveValue())
+ return;
+
+ CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+ layer->setComposite(*primitiveValue);
+}
+
+void CSSToStyleMap::mapFillOrigin(CSSPropertyID, FillLayer* layer, CSSValue* value)
+{
+ if (value->isInitialValue()) {
+ layer->setOrigin(FillLayer::initialFillOrigin(layer->type()));
+ return;
+ }
+
+ if (!value->isPrimitiveValue())
+ return;
+
+ CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+ layer->setOrigin(*primitiveValue);
+}
+
+
+void CSSToStyleMap::mapFillImage(CSSPropertyID property, FillLayer* layer, CSSValue* value)
+{
+ if (value->isInitialValue()) {
+ layer->setImage(FillLayer::initialFillImage(layer->type()));
+ return;
+ }
+
+ layer->setImage(styleImage(property, value));
+}
+
+void CSSToStyleMap::mapFillRepeatX(CSSPropertyID, FillLayer* layer, CSSValue* value)
+{
+ if (value->isInitialValue()) {
+ layer->setRepeatX(FillLayer::initialFillRepeatX(layer->type()));
+ return;
+ }
+
+ if (!value->isPrimitiveValue())
+ return;
+
+ CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+ layer->setRepeatX(*primitiveValue);
+}
+
+void CSSToStyleMap::mapFillRepeatY(CSSPropertyID, FillLayer* layer, CSSValue* value)
+{
+ if (value->isInitialValue()) {
+ layer->setRepeatY(FillLayer::initialFillRepeatY(layer->type()));
+ return;
+ }
+
+ if (!value->isPrimitiveValue())
+ return;
+
+ CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+ layer->setRepeatY(*primitiveValue);
+}
+
+void CSSToStyleMap::mapFillSize(CSSPropertyID, FillLayer* layer, CSSValue* value)
+{
+ if (!value->isPrimitiveValue()) {
+ layer->setSizeType(SizeNone);
+ return;
+ }
+
+ CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+ if (primitiveValue->getIdent() == CSSValueContain)
+ layer->setSizeType(Contain);
+ else if (primitiveValue->getIdent() == CSSValueCover)
+ layer->setSizeType(Cover);
+ else
+ layer->setSizeType(SizeLength);
+
+ LengthSize b = FillLayer::initialFillSizeLength(layer->type());
+
+ if (value->isInitialValue() || primitiveValue->getIdent() == CSSValueContain || primitiveValue->getIdent() == CSSValueCover) {
+ layer->setSizeLength(b);
+ return;
+ }
+
+ float zoomFactor = style()->effectiveZoom();
+
+ Length firstLength;
+ Length secondLength;
+
+ if (Pair* pair = primitiveValue->getPairValue()) {
+ CSSPrimitiveValue* first = static_cast<CSSPrimitiveValue*>(pair->first());
+ CSSPrimitiveValue* second = static_cast<CSSPrimitiveValue*>(pair->second());
+ firstLength = first->convertToLength<AnyConversion>(style(), rootElementStyle(), zoomFactor);
+ secondLength = second->convertToLength<AnyConversion>(style(), rootElementStyle(), zoomFactor);
+ } else {
+ firstLength = primitiveValue->convertToLength<AnyConversion>(style(), rootElementStyle(), zoomFactor);
+ secondLength = Length();
+ }
+
+ if (firstLength.isUndefined() || secondLength.isUndefined())
+ return;
+
+ b.setWidth(firstLength);
+ b.setHeight(secondLength);
+ layer->setSizeLength(b);
+}
+
+void CSSToStyleMap::mapFillXPosition(CSSPropertyID, FillLayer* layer, CSSValue* value)
+{
+ if (value->isInitialValue()) {
+ layer->setXPosition(FillLayer::initialFillXPosition(layer->type()));
+ return;
+ }
+
+ if (!value->isPrimitiveValue())
+ return;
+
+ float zoomFactor = style()->effectiveZoom();
+
+ CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+ Length length;
+ if (primitiveValue->isLength())
+ length = primitiveValue->computeLength<Length>(style(), rootElementStyle(), zoomFactor);
+ else if (primitiveValue->isPercentage())
+ length = Length(primitiveValue->getDoubleValue(), Percent);
+ else if (primitiveValue->isCalculatedPercentageWithLength())
+ length = Length(primitiveValue->cssCalcValue()->toCalcValue(style(), rootElementStyle(), zoomFactor));
+ else if (primitiveValue->isViewportPercentageLength())
+ length = primitiveValue->viewportPercentageLength();
+ else
+ return;
+ layer->setXPosition(length);
+}
+
+void CSSToStyleMap::mapFillYPosition(CSSPropertyID, FillLayer* layer, CSSValue* value)
+{
+ if (value->isInitialValue()) {
+ layer->setYPosition(FillLayer::initialFillYPosition(layer->type()));
+ return;
+ }
+
+ if (!value->isPrimitiveValue())
+ return;
+
+ float zoomFactor = style()->effectiveZoom();
+
+ CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+ Length length;
+ if (primitiveValue->isLength())
+ length = primitiveValue->computeLength<Length>(style(), rootElementStyle(), zoomFactor);
+ else if (primitiveValue->isPercentage())
+ length = Length(primitiveValue->getDoubleValue(), Percent);
+ else if (primitiveValue->isCalculatedPercentageWithLength())
+ length = Length(primitiveValue->cssCalcValue()->toCalcValue(style(), rootElementStyle(), zoomFactor));
+ else if (primitiveValue->isViewportPercentageLength())
+ length = primitiveValue->viewportPercentageLength();
+ else
+ return;
+ layer->setYPosition(length);
+}
+
+void CSSToStyleMap::mapAnimationDelay(Animation* animation, CSSValue* value)
+{
+ if (value->isInitialValue()) {
+ animation->setDelay(Animation::initialAnimationDelay());
+ return;
+ }
+
+ if (!value->isPrimitiveValue())
+ return;
+
+ CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+ animation->setDelay(primitiveValue->computeTime<float, CSSPrimitiveValue::Seconds>());
+}
+
+void CSSToStyleMap::mapAnimationDirection(Animation* layer, CSSValue* value)
+{
+ if (value->isInitialValue()) {
+ layer->setDirection(Animation::initialAnimationDirection());
+ return;
+ }
+
+ if (!value->isPrimitiveValue())
+ return;
+
+ CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+ switch (primitiveValue->getIdent()) {
+ case CSSValueNormal:
+ layer->setDirection(Animation::AnimationDirectionNormal);
+ break;
+ case CSSValueAlternate:
+ layer->setDirection(Animation::AnimationDirectionAlternate);
+ break;
+ case CSSValueReverse:
+ layer->setDirection(Animation::AnimationDirectionReverse);
+ break;
+ case CSSValueAlternateReverse:
+ layer->setDirection(Animation::AnimationDirectionAlternateReverse);
+ break;
+ }
+}
+
+void CSSToStyleMap::mapAnimationDuration(Animation* animation, CSSValue* value)
+{
+ if (value->isInitialValue()) {
+ animation->setDuration(Animation::initialAnimationDuration());
+ return;
+ }
+
+ if (!value->isPrimitiveValue())
+ return;
+
+ CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+ animation->setDuration(primitiveValue->computeTime<float, CSSPrimitiveValue::Seconds>());
+}
+
+void CSSToStyleMap::mapAnimationFillMode(Animation* layer, CSSValue* value)
+{
+ if (value->isInitialValue()) {
+ layer->setFillMode(Animation::initialAnimationFillMode());
+ return;
+ }
+
+ if (!value->isPrimitiveValue())
+ return;
+
+ CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+ switch (primitiveValue->getIdent()) {
+ case CSSValueNone:
+ layer->setFillMode(AnimationFillModeNone);
+ break;
+ case CSSValueForwards:
+ layer->setFillMode(AnimationFillModeForwards);
+ break;
+ case CSSValueBackwards:
+ layer->setFillMode(AnimationFillModeBackwards);
+ break;
+ case CSSValueBoth:
+ layer->setFillMode(AnimationFillModeBoth);
+ break;
+ }
+}
+
+void CSSToStyleMap::mapAnimationIterationCount(Animation* animation, CSSValue* value)
+{
+ if (value->isInitialValue()) {
+ animation->setIterationCount(Animation::initialAnimationIterationCount());
+ return;
+ }
+
+ if (!value->isPrimitiveValue())
+ return;
+
+ CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+ if (primitiveValue->getIdent() == CSSValueInfinite)
+ animation->setIterationCount(-1);
+ else
+ animation->setIterationCount(primitiveValue->getFloatValue());
+}
+
+void CSSToStyleMap::mapAnimationName(Animation* layer, CSSValue* value)
+{
+ if (value->isInitialValue()) {
+ layer->setName(Animation::initialAnimationName());
+ return;
+ }
+
+ if (!value->isPrimitiveValue())
+ return;
+
+ CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+ if (primitiveValue->getIdent() == CSSValueNone)
+ layer->setIsNoneAnimation(true);
+ else
+ layer->setName(primitiveValue->getStringValue());
+}
+
+void CSSToStyleMap::mapAnimationPlayState(Animation* layer, CSSValue* value)
+{
+ if (value->isInitialValue()) {
+ layer->setPlayState(Animation::initialAnimationPlayState());
+ return;
+ }
+
+ if (!value->isPrimitiveValue())
+ return;
+
+ CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+ EAnimPlayState playState = (primitiveValue->getIdent() == CSSValuePaused) ? AnimPlayStatePaused : AnimPlayStatePlaying;
+ layer->setPlayState(playState);
+}
+
+void CSSToStyleMap::mapAnimationProperty(Animation* animation, CSSValue* value)
+{
+ if (value->isInitialValue()) {
+ animation->setAnimationMode(Animation::AnimateAll);
+ animation->setProperty(CSSPropertyInvalid);
+ return;
+ }
+
+ if (!value->isPrimitiveValue())
+ return;
+
+ CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+ if (primitiveValue->getIdent() == CSSValueAll) {
+ animation->setAnimationMode(Animation::AnimateAll);
+ animation->setProperty(CSSPropertyInvalid);
+ } else if (primitiveValue->getIdent() == CSSValueNone) {
+ animation->setAnimationMode(Animation::AnimateNone);
+ animation->setProperty(CSSPropertyInvalid);
+ } else {
+ animation->setAnimationMode(Animation::AnimateSingleProperty);
+ animation->setProperty(static_cast<CSSPropertyID>(primitiveValue->getIdent()));
+ }
+}
+
+void CSSToStyleMap::mapAnimationTimingFunction(Animation* animation, CSSValue* value)
+{
+ if (value->isInitialValue()) {
+ animation->setTimingFunction(Animation::initialAnimationTimingFunction());
+ return;
+ }
+
+ if (value->isPrimitiveValue()) {
+ CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+ switch (primitiveValue->getIdent()) {
+ case CSSValueLinear:
+ animation->setTimingFunction(LinearTimingFunction::create());
+ break;
+ case CSSValueEase:
+ animation->setTimingFunction(CubicBezierTimingFunction::create());
+ break;
+ case CSSValueEaseIn:
+ animation->setTimingFunction(CubicBezierTimingFunction::create(0.42, 0.0, 1.0, 1.0));
+ break;
+ case CSSValueEaseOut:
+ animation->setTimingFunction(CubicBezierTimingFunction::create(0.0, 0.0, 0.58, 1.0));
+ break;
+ case CSSValueEaseInOut:
+ animation->setTimingFunction(CubicBezierTimingFunction::create(0.42, 0.0, 0.58, 1.0));
+ break;
+ case CSSValueStepStart:
+ animation->setTimingFunction(StepsTimingFunction::create(1, true));
+ break;
+ case CSSValueStepEnd:
+ animation->setTimingFunction(StepsTimingFunction::create(1, false));
+ break;
+ }
+ return;
+ }
+
+ if (value->isCubicBezierTimingFunctionValue()) {
+ CSSCubicBezierTimingFunctionValue* cubicTimingFunction = static_cast<CSSCubicBezierTimingFunctionValue*>(value);
+ animation->setTimingFunction(CubicBezierTimingFunction::create(cubicTimingFunction->x1(), cubicTimingFunction->y1(), cubicTimingFunction->x2(), cubicTimingFunction->y2()));
+ } else if (value->isStepsTimingFunctionValue()) {
+ CSSStepsTimingFunctionValue* stepsTimingFunction = static_cast<CSSStepsTimingFunctionValue*>(value);
+ animation->setTimingFunction(StepsTimingFunction::create(stepsTimingFunction->numberOfSteps(), stepsTimingFunction->stepAtStart()));
+ } else if (value->isLinearTimingFunctionValue())
+ animation->setTimingFunction(LinearTimingFunction::create());
+}
+
+void CSSToStyleMap::mapNinePieceImage(CSSPropertyID property, CSSValue* value, NinePieceImage& image)
+{
+ // If we're not a value list, then we are "none" and don't need to alter the empty image at all.
+ if (!value || !value->isValueList())
+ return;
+
+ // Retrieve the border image value.
+ CSSValueList* borderImage = static_cast<CSSValueList*>(value);
+
+ // Set the image (this kicks off the load).
+ CSSPropertyID imageProperty;
+ if (property == CSSPropertyWebkitBorderImage)
+ imageProperty = CSSPropertyBorderImageSource;
+ else if (property == CSSPropertyWebkitMaskBoxImage)
+ imageProperty = CSSPropertyWebkitMaskBoxImageSource;
+ else
+ imageProperty = property;
+
+ for (unsigned i = 0 ; i < borderImage->length() ; ++i) {
+ CSSValue* current = borderImage->item(i);
+
+ if (current->isImageValue() || current->isImageGeneratorValue()
+#if ENABLE(CSS_IMAGE_SET)
+ || current->isImageSetValue()
+#endif
+ )
+ image.setImage(styleImage(imageProperty, current));
+ else if (current->isBorderImageSliceValue())
+ mapNinePieceImageSlice(current, image);
+ else if (current->isValueList()) {
+ CSSValueList* slashList = static_cast<CSSValueList*>(current);
+ // Map in the image slices.
+ if (slashList->item(0) && slashList->item(0)->isBorderImageSliceValue())
+ mapNinePieceImageSlice(slashList->item(0), image);
+
+ // Map in the border slices.
+ if (slashList->item(1))
+ image.setBorderSlices(mapNinePieceImageQuad(slashList->item(1)));
+
+ // Map in the outset.
+ if (slashList->item(2))
+ image.setOutset(mapNinePieceImageQuad(slashList->item(2)));
+ } else if (current->isPrimitiveValue()) {
+ // Set the appropriate rules for stretch/round/repeat of the slices.
+ mapNinePieceImageRepeat(current, image);
+ }
+ }
+
+ if (property == CSSPropertyWebkitBorderImage) {
+ // We have to preserve the legacy behavior of -webkit-border-image and make the border slices
+ // also set the border widths. We don't need to worry about percentages, since we don't even support
+ // those on real borders yet.
+ if (image.borderSlices().top().isFixed())
+ style()->setBorderTopWidth(image.borderSlices().top().value());
+ if (image.borderSlices().right().isFixed())
+ style()->setBorderRightWidth(image.borderSlices().right().value());
+ if (image.borderSlices().bottom().isFixed())
+ style()->setBorderBottomWidth(image.borderSlices().bottom().value());
+ if (image.borderSlices().left().isFixed())
+ style()->setBorderLeftWidth(image.borderSlices().left().value());
+ }
+}
+
+void CSSToStyleMap::mapNinePieceImageSlice(CSSValue* value, NinePieceImage& image)
+{
+ if (!value || !value->isBorderImageSliceValue())
+ return;
+
+ // Retrieve the border image value.
+ CSSBorderImageSliceValue* borderImageSlice = static_cast<CSSBorderImageSliceValue*>(value);
+
+ // Set up a length box to represent our image slices.
+ LengthBox box;
+ Quad* slices = borderImageSlice->slices();
+ if (slices->top()->isPercentage())
+ box.m_top = Length(slices->top()->getDoubleValue(), Percent);
+ else
+ box.m_top = Length(slices->top()->getIntValue(CSSPrimitiveValue::CSS_NUMBER), Fixed);
+ if (slices->bottom()->isPercentage())
+ box.m_bottom = Length(slices->bottom()->getDoubleValue(), Percent);
+ else
+ box.m_bottom = Length((int)slices->bottom()->getFloatValue(CSSPrimitiveValue::CSS_NUMBER), Fixed);
+ if (slices->left()->isPercentage())
+ box.m_left = Length(slices->left()->getDoubleValue(), Percent);
+ else
+ box.m_left = Length(slices->left()->getIntValue(CSSPrimitiveValue::CSS_NUMBER), Fixed);
+ if (slices->right()->isPercentage())
+ box.m_right = Length(slices->right()->getDoubleValue(), Percent);
+ else
+ box.m_right = Length(slices->right()->getIntValue(CSSPrimitiveValue::CSS_NUMBER), Fixed);
+ image.setImageSlices(box);
+
+ // Set our fill mode.
+ image.setFill(borderImageSlice->m_fill);
+}
+
+LengthBox CSSToStyleMap::mapNinePieceImageQuad(CSSValue* value)
+{
+ if (!value || !value->isPrimitiveValue())
+ return LengthBox();
+
+ // Get our zoom value.
+ float zoom = useSVGZoomRules() ? 1.0f : style()->effectiveZoom();
+
+ // Retrieve the primitive value.
+ CSSPrimitiveValue* borderWidths = static_cast<CSSPrimitiveValue*>(value);
+
+ // Set up a length box to represent our image slices.
+ LengthBox box; // Defaults to 'auto' so we don't have to handle that explicitly below.
+ Quad* slices = borderWidths->getQuadValue();
+ if (slices->top()->isNumber())
+ box.m_top = Length(slices->top()->getIntValue(), Relative);
+ else if (slices->top()->isPercentage())
+ box.m_top = Length(slices->top()->getDoubleValue(CSSPrimitiveValue::CSS_PERCENTAGE), Percent);
+ else if (slices->top()->getIdent() != CSSValueAuto)
+ box.m_top = slices->top()->computeLength<Length>(style(), rootElementStyle(), zoom);
+
+ if (slices->right()->isNumber())
+ box.m_right = Length(slices->right()->getIntValue(), Relative);
+ else if (slices->right()->isPercentage())
+ box.m_right = Length(slices->right()->getDoubleValue(CSSPrimitiveValue::CSS_PERCENTAGE), Percent);
+ else if (slices->right()->getIdent() != CSSValueAuto)
+ box.m_right = slices->right()->computeLength<Length>(style(), rootElementStyle(), zoom);
+
+ if (slices->bottom()->isNumber())
+ box.m_bottom = Length(slices->bottom()->getIntValue(), Relative);
+ else if (slices->bottom()->isPercentage())
+ box.m_bottom = Length(slices->bottom()->getDoubleValue(CSSPrimitiveValue::CSS_PERCENTAGE), Percent);
+ else if (slices->bottom()->getIdent() != CSSValueAuto)
+ box.m_bottom = slices->bottom()->computeLength<Length>(style(), rootElementStyle(), zoom);
+
+ if (slices->left()->isNumber())
+ box.m_left = Length(slices->left()->getIntValue(), Relative);
+ else if (slices->left()->isPercentage())
+ box.m_left = Length(slices->left()->getDoubleValue(CSSPrimitiveValue::CSS_PERCENTAGE), Percent);
+ else if (slices->left()->getIdent() != CSSValueAuto)
+ box.m_left = slices->left()->computeLength<Length>(style(), rootElementStyle(), zoom);
+
+ return box;
+}
+
+void CSSToStyleMap::mapNinePieceImageRepeat(CSSValue* value, NinePieceImage& image)
+{
+ if (!value || !value->isPrimitiveValue())
+ return;
+
+ CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+ Pair* pair = primitiveValue->getPairValue();
+ if (!pair || !pair->first() || !pair->second())
+ return;
+
+ int firstIdentifier = pair->first()->getIdent();
+ int secondIdentifier = pair->second()->getIdent();
+
+ ENinePieceImageRule horizontalRule;
+ switch (firstIdentifier) {
+ case CSSValueStretch:
+ horizontalRule = StretchImageRule;
+ break;
+ case CSSValueRound:
+ horizontalRule = RoundImageRule;
+ break;
+ case CSSValueSpace:
+ horizontalRule = SpaceImageRule;
+ break;
+ default: // CSSValueRepeat
+ horizontalRule = RepeatImageRule;
+ break;
+ }
+ image.setHorizontalRule(horizontalRule);
+
+ ENinePieceImageRule verticalRule;
+ switch (secondIdentifier) {
+ case CSSValueStretch:
+ verticalRule = StretchImageRule;
+ break;
+ case CSSValueRound:
+ verticalRule = RoundImageRule;
+ break;
+ case CSSValueSpace:
+ verticalRule = SpaceImageRule;
+ break;
+ default: // CSSValueRepeat
+ verticalRule = RepeatImageRule;
+ break;
+ }
+ image.setVerticalRule(verticalRule);
+}
+
+};
--- /dev/null
+/*
+ * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
+ * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
+ * Copyright (C) 2012 Google Inc. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef CSSToStyleMap_h
+#define CSSToStyleMap_h
+
+#include "CSSPropertyNames.h"
+#include "LengthBox.h"
+
+namespace WebCore {
+
+class FillLayer;
+class CSSValue;
+class Animation;
+class StyleImage;
+class StyleResolver;
+class NinePieceImage;
+
+class CSSToStyleMap {
+ WTF_MAKE_NONCOPYABLE(CSSToStyleMap);
+ WTF_MAKE_FAST_ALLOCATED;
+
+public:
+ CSSToStyleMap(StyleResolver* resolver) : m_resolver(resolver) { }
+
+ void mapFillAttachment(CSSPropertyID, FillLayer*, CSSValue*);
+ void mapFillClip(CSSPropertyID, FillLayer*, CSSValue*);
+ void mapFillComposite(CSSPropertyID, FillLayer*, CSSValue*);
+ void mapFillOrigin(CSSPropertyID, FillLayer*, CSSValue*);
+ void mapFillImage(CSSPropertyID, FillLayer*, CSSValue*);
+ void mapFillRepeatX(CSSPropertyID, FillLayer*, CSSValue*);
+ void mapFillRepeatY(CSSPropertyID, FillLayer*, CSSValue*);
+ void mapFillSize(CSSPropertyID, FillLayer*, CSSValue*);
+ void mapFillXPosition(CSSPropertyID, FillLayer*, CSSValue*);
+ void mapFillYPosition(CSSPropertyID, FillLayer*, CSSValue*);
+
+ void mapAnimationDelay(Animation*, CSSValue*);
+ void mapAnimationDirection(Animation*, CSSValue*);
+ void mapAnimationDuration(Animation*, CSSValue*);
+ void mapAnimationFillMode(Animation*, CSSValue*);
+ void mapAnimationIterationCount(Animation*, CSSValue*);
+ void mapAnimationName(Animation*, CSSValue*);
+ void mapAnimationPlayState(Animation*, CSSValue*);
+ void mapAnimationProperty(Animation*, CSSValue*);
+ void mapAnimationTimingFunction(Animation*, CSSValue*);
+
+ void mapNinePieceImage(CSSPropertyID, CSSValue*, NinePieceImage&);
+ void mapNinePieceImageSlice(CSSValue*, NinePieceImage&);
+ LengthBox mapNinePieceImageQuad(CSSValue*);
+ void mapNinePieceImageRepeat(CSSValue*, NinePieceImage&);
+
+private:
+ // FIXME: These accessors should be replaced by a ResolveState object
+ // similar to how PaintInfo/LayoutState cache values needed for
+ // the current paint/layout.
+ RenderStyle* style() const;
+ RenderStyle* rootElementStyle() const;
+ bool useSVGZoomRules() const;
+
+ // FIXME: This should be part of some sort of StyleImageCache object which
+ // is held by the StyleResolver, and likely provided to this object
+ // during the resolve.
+ PassRefPtr<StyleImage> styleImage(CSSPropertyID, CSSValue*);
+
+ StyleResolver* m_resolver;
+};
+
+}
+
+#endif
#include "CSSCalculationValue.h"
#include "CSSCursorImageValue.h"
#include "CSSPrimitiveValueMappings.h"
+#include "CSSToStyleMap.h"
#include "CSSValueList.h"
#include "CursorList.h"
#include "Document.h"
void (FillLayer::*setFunction)(typename FillLayerAccessorTypes<T>::Setter),
void (FillLayer::*clearFunction)(),
typename FillLayerAccessorTypes<T>::Getter (*initialFunction)(EFillLayerType),
- void (StyleResolver::*mapFillFunction)(CSSPropertyID, FillLayer*, CSSValue*)>
+ void (CSSToStyleMap::*mapFillFunction)(CSSPropertyID, FillLayer*, CSSValue*)>
class ApplyPropertyFillLayer {
public:
static void applyInheritValue(StyleResolver* styleResolver)
currChild = new FillLayer(fillLayerType);
prevChild->setNext(currChild);
}
- (styleResolver->*mapFillFunction)(propertyId, currChild, valueList->itemWithoutBoundsCheck(i));
+ (styleResolver->styleMap()->*mapFillFunction)(propertyId, currChild, valueList->itemWithoutBoundsCheck(i));
prevChild = currChild;
currChild = currChild->next();
}
} else {
- (styleResolver->*mapFillFunction)(propertyId, currChild, value);
+ (styleResolver->styleMap()->*mapFillFunction)(propertyId, currChild, value);
currChild = currChild->next();
}
while (currChild) {
NinePieceImage image;
if (borderImageType == Mask)
image.setMaskDefaults();
- styleResolver->mapNinePieceImage(property, value, image);
+ styleResolver->styleMap()->mapNinePieceImage(property, value, image);
(styleResolver->style()->*setterFunction)(image);
}
NinePieceImage image(getValue(styleResolver->style()));
switch (modifier) {
case Outset:
- image.setOutset(styleResolver->mapNinePieceImageQuad(value));
+ image.setOutset(styleResolver->styleMap()->mapNinePieceImageQuad(value));
break;
case Repeat:
- styleResolver->mapNinePieceImageRepeat(value, image);
+ styleResolver->styleMap()->mapNinePieceImageRepeat(value, image);
break;
case Slice:
- styleResolver->mapNinePieceImageSlice(value, image);
+ styleResolver->styleMap()->mapNinePieceImageSlice(value, image);
break;
case Width:
- image.setBorderSlices(styleResolver->mapNinePieceImageQuad(value));
+ image.setBorderSlices(styleResolver->styleMap()->mapNinePieceImageQuad(value));
break;
}
setValue(styleResolver->style(), image);
bool (Animation::*testFunction)() const,
void (Animation::*clearFunction)(),
T (*initialFunction)(),
- void (StyleResolver::*mapFunction)(Animation*, CSSValue*),
+ void (CSSToStyleMap::*mapFunction)(Animation*, CSSValue*),
AnimationList* (RenderStyle::*animationGetterFunction)(),
const AnimationList* (RenderStyle::*immutableAnimationGetterFunction)() const>
class ApplyPropertyAnimation {
static bool test(const Animation* animation) { return (animation->*testFunction)(); }
static void clear(Animation* animation) { (animation->*clearFunction)(); }
static T initial() { return (*initialFunction)(); }
- static void map(StyleResolver* styleResolver, Animation* animation, CSSValue* value) { (styleResolver->*mapFunction)(animation, value); }
+ static void map(StyleResolver* styleResolver, Animation* animation, CSSValue* value) { (styleResolver->styleMap()->*mapFunction)(animation, value); }
static AnimationList* accessAnimations(RenderStyle* style) { return (style->*animationGetterFunction)(); }
static const AnimationList* animations(RenderStyle* style) { return (style->*immutableAnimationGetterFunction)(); }
m_propertyMap[i] = PropertyHandler();
// Please keep CSS property list in alphabetical order.
- setPropertyHandler(CSSPropertyBackgroundAttachment, ApplyPropertyFillLayer<EFillAttachment, CSSPropertyBackgroundAttachment, BackgroundFillLayer, &RenderStyle::accessBackgroundLayers, &RenderStyle::backgroundLayers, &FillLayer::isAttachmentSet, &FillLayer::attachment, &FillLayer::setAttachment, &FillLayer::clearAttachment, &FillLayer::initialFillAttachment, &StyleResolver::mapFillAttachment>::createHandler());
- setPropertyHandler(CSSPropertyBackgroundClip, ApplyPropertyFillLayer<EFillBox, CSSPropertyBackgroundClip, BackgroundFillLayer, &RenderStyle::accessBackgroundLayers, &RenderStyle::backgroundLayers, &FillLayer::isClipSet, &FillLayer::clip, &FillLayer::setClip, &FillLayer::clearClip, &FillLayer::initialFillClip, &StyleResolver::mapFillClip>::createHandler());
+ setPropertyHandler(CSSPropertyBackgroundAttachment, ApplyPropertyFillLayer<EFillAttachment, CSSPropertyBackgroundAttachment, BackgroundFillLayer, &RenderStyle::accessBackgroundLayers, &RenderStyle::backgroundLayers, &FillLayer::isAttachmentSet, &FillLayer::attachment, &FillLayer::setAttachment, &FillLayer::clearAttachment, &FillLayer::initialFillAttachment, &CSSToStyleMap::mapFillAttachment>::createHandler());
+ setPropertyHandler(CSSPropertyBackgroundClip, ApplyPropertyFillLayer<EFillBox, CSSPropertyBackgroundClip, BackgroundFillLayer, &RenderStyle::accessBackgroundLayers, &RenderStyle::backgroundLayers, &FillLayer::isClipSet, &FillLayer::clip, &FillLayer::setClip, &FillLayer::clearClip, &FillLayer::initialFillClip, &CSSToStyleMap::mapFillClip>::createHandler());
setPropertyHandler(CSSPropertyBackgroundColor, ApplyPropertyColor<NoInheritFromParent, &RenderStyle::backgroundColor, &RenderStyle::setBackgroundColor, &RenderStyle::setVisitedLinkBackgroundColor, &RenderStyle::invalidColor>::createHandler());
- setPropertyHandler(CSSPropertyBackgroundImage, ApplyPropertyFillLayer<StyleImage*, CSSPropertyBackgroundImage, BackgroundFillLayer, &RenderStyle::accessBackgroundLayers, &RenderStyle::backgroundLayers, &FillLayer::isImageSet, &FillLayer::image, &FillLayer::setImage, &FillLayer::clearImage, &FillLayer::initialFillImage, &StyleResolver::mapFillImage>::createHandler());
- setPropertyHandler(CSSPropertyBackgroundOrigin, ApplyPropertyFillLayer<EFillBox, CSSPropertyBackgroundOrigin, BackgroundFillLayer, &RenderStyle::accessBackgroundLayers, &RenderStyle::backgroundLayers, &FillLayer::isOriginSet, &FillLayer::origin, &FillLayer::setOrigin, &FillLayer::clearOrigin, &FillLayer::initialFillOrigin, &StyleResolver::mapFillOrigin>::createHandler());
+ setPropertyHandler(CSSPropertyBackgroundImage, ApplyPropertyFillLayer<StyleImage*, CSSPropertyBackgroundImage, BackgroundFillLayer, &RenderStyle::accessBackgroundLayers, &RenderStyle::backgroundLayers, &FillLayer::isImageSet, &FillLayer::image, &FillLayer::setImage, &FillLayer::clearImage, &FillLayer::initialFillImage, &CSSToStyleMap::mapFillImage>::createHandler());
+ setPropertyHandler(CSSPropertyBackgroundOrigin, ApplyPropertyFillLayer<EFillBox, CSSPropertyBackgroundOrigin, BackgroundFillLayer, &RenderStyle::accessBackgroundLayers, &RenderStyle::backgroundLayers, &FillLayer::isOriginSet, &FillLayer::origin, &FillLayer::setOrigin, &FillLayer::clearOrigin, &FillLayer::initialFillOrigin, &CSSToStyleMap::mapFillOrigin>::createHandler());
setPropertyHandler(CSSPropertyBackgroundPosition, ApplyPropertyExpanding<SuppressValue, CSSPropertyBackgroundPositionX, CSSPropertyBackgroundPositionY>::createHandler());
- setPropertyHandler(CSSPropertyBackgroundPositionX, ApplyPropertyFillLayer<Length, CSSPropertyBackgroundPositionX, BackgroundFillLayer, &RenderStyle::accessBackgroundLayers, &RenderStyle::backgroundLayers, &FillLayer::isXPositionSet, &FillLayer::xPosition, &FillLayer::setXPosition, &FillLayer::clearXPosition, &FillLayer::initialFillXPosition, &StyleResolver::mapFillXPosition>::createHandler());
- setPropertyHandler(CSSPropertyBackgroundPositionY, ApplyPropertyFillLayer<Length, CSSPropertyBackgroundPositionY, BackgroundFillLayer, &RenderStyle::accessBackgroundLayers, &RenderStyle::backgroundLayers, &FillLayer::isYPositionSet, &FillLayer::yPosition, &FillLayer::setYPosition, &FillLayer::clearYPosition, &FillLayer::initialFillYPosition, &StyleResolver::mapFillYPosition>::createHandler());
+ setPropertyHandler(CSSPropertyBackgroundPositionX, ApplyPropertyFillLayer<Length, CSSPropertyBackgroundPositionX, BackgroundFillLayer, &RenderStyle::accessBackgroundLayers, &RenderStyle::backgroundLayers, &FillLayer::isXPositionSet, &FillLayer::xPosition, &FillLayer::setXPosition, &FillLayer::clearXPosition, &FillLayer::initialFillXPosition, &CSSToStyleMap::mapFillXPosition>::createHandler());
+ setPropertyHandler(CSSPropertyBackgroundPositionY, ApplyPropertyFillLayer<Length, CSSPropertyBackgroundPositionY, BackgroundFillLayer, &RenderStyle::accessBackgroundLayers, &RenderStyle::backgroundLayers, &FillLayer::isYPositionSet, &FillLayer::yPosition, &FillLayer::setYPosition, &FillLayer::clearYPosition, &FillLayer::initialFillYPosition, &CSSToStyleMap::mapFillYPosition>::createHandler());
setPropertyHandler(CSSPropertyBackgroundRepeat, ApplyPropertyExpanding<SuppressValue, CSSPropertyBackgroundRepeatX, CSSPropertyBackgroundRepeatY>::createHandler());
- setPropertyHandler(CSSPropertyBackgroundRepeatX, ApplyPropertyFillLayer<EFillRepeat, CSSPropertyBackgroundRepeatX, BackgroundFillLayer, &RenderStyle::accessBackgroundLayers, &RenderStyle::backgroundLayers, &FillLayer::isRepeatXSet, &FillLayer::repeatX, &FillLayer::setRepeatX, &FillLayer::clearRepeatX, &FillLayer::initialFillRepeatX, &StyleResolver::mapFillRepeatX>::createHandler());
- setPropertyHandler(CSSPropertyBackgroundRepeatY, ApplyPropertyFillLayer<EFillRepeat, CSSPropertyBackgroundRepeatY, BackgroundFillLayer, &RenderStyle::accessBackgroundLayers, &RenderStyle::backgroundLayers, &FillLayer::isRepeatYSet, &FillLayer::repeatY, &FillLayer::setRepeatY, &FillLayer::clearRepeatY, &FillLayer::initialFillRepeatY, &StyleResolver::mapFillRepeatY>::createHandler());
- setPropertyHandler(CSSPropertyBackgroundSize, ApplyPropertyFillLayer<FillSize, CSSPropertyBackgroundSize, BackgroundFillLayer, &RenderStyle::accessBackgroundLayers, &RenderStyle::backgroundLayers, &FillLayer::isSizeSet, &FillLayer::size, &FillLayer::setSize, &FillLayer::clearSize, &FillLayer::initialFillSize, &StyleResolver::mapFillSize>::createHandler());
+ setPropertyHandler(CSSPropertyBackgroundRepeatX, ApplyPropertyFillLayer<EFillRepeat, CSSPropertyBackgroundRepeatX, BackgroundFillLayer, &RenderStyle::accessBackgroundLayers, &RenderStyle::backgroundLayers, &FillLayer::isRepeatXSet, &FillLayer::repeatX, &FillLayer::setRepeatX, &FillLayer::clearRepeatX, &FillLayer::initialFillRepeatX, &CSSToStyleMap::mapFillRepeatX>::createHandler());
+ setPropertyHandler(CSSPropertyBackgroundRepeatY, ApplyPropertyFillLayer<EFillRepeat, CSSPropertyBackgroundRepeatY, BackgroundFillLayer, &RenderStyle::accessBackgroundLayers, &RenderStyle::backgroundLayers, &FillLayer::isRepeatYSet, &FillLayer::repeatY, &FillLayer::setRepeatY, &FillLayer::clearRepeatY, &FillLayer::initialFillRepeatY, &CSSToStyleMap::mapFillRepeatY>::createHandler());
+ setPropertyHandler(CSSPropertyBackgroundSize, ApplyPropertyFillLayer<FillSize, CSSPropertyBackgroundSize, BackgroundFillLayer, &RenderStyle::accessBackgroundLayers, &RenderStyle::backgroundLayers, &FillLayer::isSizeSet, &FillLayer::size, &FillLayer::setSize, &FillLayer::clearSize, &FillLayer::initialFillSize, &CSSToStyleMap::mapFillSize>::createHandler());
setPropertyHandler(CSSPropertyBorder, ApplyPropertyExpanding<SuppressValue, CSSPropertyBorderStyle, CSSPropertyBorderWidth, CSSPropertyBorderColor>::createHandler());
setPropertyHandler(CSSPropertyBorderBottom, ApplyPropertyExpanding<SuppressValue, CSSPropertyBorderBottomColor, CSSPropertyBorderBottomStyle, CSSPropertyBorderBottomWidth>::createHandler());
setPropertyHandler(CSSPropertyBorderBottomColor, ApplyPropertyColor<NoInheritFromParent, &RenderStyle::borderBottomColor, &RenderStyle::setBorderBottomColor, &RenderStyle::setVisitedLinkBorderBottomColor, &RenderStyle::color>::createHandler());
setPropertyHandler(CSSPropertyUnicodeBidi, ApplyPropertyUnicodeBidi::createHandler());
setPropertyHandler(CSSPropertyVerticalAlign, ApplyPropertyVerticalAlign::createHandler());
setPropertyHandler(CSSPropertyVisibility, ApplyPropertyDefault<EVisibility, &RenderStyle::visibility, EVisibility, &RenderStyle::setVisibility, EVisibility, &RenderStyle::initialVisibility>::createHandler());
- setPropertyHandler(CSSPropertyWebkitAnimationDelay, ApplyPropertyAnimation<double, &Animation::delay, &Animation::setDelay, &Animation::isDelaySet, &Animation::clearDelay, &Animation::initialAnimationDelay, &StyleResolver::mapAnimationDelay, &RenderStyle::accessAnimations, &RenderStyle::animations>::createHandler());
- setPropertyHandler(CSSPropertyWebkitAnimationDirection, ApplyPropertyAnimation<Animation::AnimationDirection, &Animation::direction, &Animation::setDirection, &Animation::isDirectionSet, &Animation::clearDirection, &Animation::initialAnimationDirection, &StyleResolver::mapAnimationDirection, &RenderStyle::accessAnimations, &RenderStyle::animations>::createHandler());
- setPropertyHandler(CSSPropertyWebkitAnimationDuration, ApplyPropertyAnimation<double, &Animation::duration, &Animation::setDuration, &Animation::isDurationSet, &Animation::clearDuration, &Animation::initialAnimationDuration, &StyleResolver::mapAnimationDuration, &RenderStyle::accessAnimations, &RenderStyle::animations>::createHandler());
- setPropertyHandler(CSSPropertyWebkitAnimationFillMode, ApplyPropertyAnimation<unsigned, &Animation::fillMode, &Animation::setFillMode, &Animation::isFillModeSet, &Animation::clearFillMode, &Animation::initialAnimationFillMode, &StyleResolver::mapAnimationFillMode, &RenderStyle::accessAnimations, &RenderStyle::animations>::createHandler());
- setPropertyHandler(CSSPropertyWebkitAnimationIterationCount, ApplyPropertyAnimation<double, &Animation::iterationCount, &Animation::setIterationCount, &Animation::isIterationCountSet, &Animation::clearIterationCount, &Animation::initialAnimationIterationCount, &StyleResolver::mapAnimationIterationCount, &RenderStyle::accessAnimations, &RenderStyle::animations>::createHandler());
- setPropertyHandler(CSSPropertyWebkitAnimationName, ApplyPropertyAnimation<const String&, &Animation::name, &Animation::setName, &Animation::isNameSet, &Animation::clearName, &Animation::initialAnimationName, &StyleResolver::mapAnimationName, &RenderStyle::accessAnimations, &RenderStyle::animations>::createHandler());
- setPropertyHandler(CSSPropertyWebkitAnimationPlayState, ApplyPropertyAnimation<EAnimPlayState, &Animation::playState, &Animation::setPlayState, &Animation::isPlayStateSet, &Animation::clearPlayState, &Animation::initialAnimationPlayState, &StyleResolver::mapAnimationPlayState, &RenderStyle::accessAnimations, &RenderStyle::animations>::createHandler());
- setPropertyHandler(CSSPropertyWebkitAnimationTimingFunction, ApplyPropertyAnimation<const PassRefPtr<TimingFunction>, &Animation::timingFunction, &Animation::setTimingFunction, &Animation::isTimingFunctionSet, &Animation::clearTimingFunction, &Animation::initialAnimationTimingFunction, &StyleResolver::mapAnimationTimingFunction, &RenderStyle::accessAnimations, &RenderStyle::animations>::createHandler());
+ setPropertyHandler(CSSPropertyWebkitAnimationDelay, ApplyPropertyAnimation<double, &Animation::delay, &Animation::setDelay, &Animation::isDelaySet, &Animation::clearDelay, &Animation::initialAnimationDelay, &CSSToStyleMap::mapAnimationDelay, &RenderStyle::accessAnimations, &RenderStyle::animations>::createHandler());
+ setPropertyHandler(CSSPropertyWebkitAnimationDirection, ApplyPropertyAnimation<Animation::AnimationDirection, &Animation::direction, &Animation::setDirection, &Animation::isDirectionSet, &Animation::clearDirection, &Animation::initialAnimationDirection, &CSSToStyleMap::mapAnimationDirection, &RenderStyle::accessAnimations, &RenderStyle::animations>::createHandler());
+ setPropertyHandler(CSSPropertyWebkitAnimationDuration, ApplyPropertyAnimation<double, &Animation::duration, &Animation::setDuration, &Animation::isDurationSet, &Animation::clearDuration, &Animation::initialAnimationDuration, &CSSToStyleMap::mapAnimationDuration, &RenderStyle::accessAnimations, &RenderStyle::animations>::createHandler());
+ setPropertyHandler(CSSPropertyWebkitAnimationFillMode, ApplyPropertyAnimation<unsigned, &Animation::fillMode, &Animation::setFillMode, &Animation::isFillModeSet, &Animation::clearFillMode, &Animation::initialAnimationFillMode, &CSSToStyleMap::mapAnimationFillMode, &RenderStyle::accessAnimations, &RenderStyle::animations>::createHandler());
+ setPropertyHandler(CSSPropertyWebkitAnimationIterationCount, ApplyPropertyAnimation<double, &Animation::iterationCount, &Animation::setIterationCount, &Animation::isIterationCountSet, &Animation::clearIterationCount, &Animation::initialAnimationIterationCount, &CSSToStyleMap::mapAnimationIterationCount, &RenderStyle::accessAnimations, &RenderStyle::animations>::createHandler());
+ setPropertyHandler(CSSPropertyWebkitAnimationName, ApplyPropertyAnimation<const String&, &Animation::name, &Animation::setName, &Animation::isNameSet, &Animation::clearName, &Animation::initialAnimationName, &CSSToStyleMap::mapAnimationName, &RenderStyle::accessAnimations, &RenderStyle::animations>::createHandler());
+ setPropertyHandler(CSSPropertyWebkitAnimationPlayState, ApplyPropertyAnimation<EAnimPlayState, &Animation::playState, &Animation::setPlayState, &Animation::isPlayStateSet, &Animation::clearPlayState, &Animation::initialAnimationPlayState, &CSSToStyleMap::mapAnimationPlayState, &RenderStyle::accessAnimations, &RenderStyle::animations>::createHandler());
+ setPropertyHandler(CSSPropertyWebkitAnimationTimingFunction, ApplyPropertyAnimation<const PassRefPtr<TimingFunction>, &Animation::timingFunction, &Animation::setTimingFunction, &Animation::isTimingFunctionSet, &Animation::clearTimingFunction, &Animation::initialAnimationTimingFunction, &CSSToStyleMap::mapAnimationTimingFunction, &RenderStyle::accessAnimations, &RenderStyle::animations>::createHandler());
setPropertyHandler(CSSPropertyWebkitAppearance, ApplyPropertyDefault<ControlPart, &RenderStyle::appearance, ControlPart, &RenderStyle::setAppearance, ControlPart, &RenderStyle::initialAppearance>::createHandler());
setPropertyHandler(CSSPropertyWebkitAspectRatio, ApplyPropertyAspectRatio::createHandler());
setPropertyHandler(CSSPropertyWebkitBackfaceVisibility, ApplyPropertyDefault<EBackfaceVisibility, &RenderStyle::backfaceVisibility, EBackfaceVisibility, &RenderStyle::setBackfaceVisibility, EBackfaceVisibility, &RenderStyle::initialBackfaceVisibility>::createHandler());
setPropertyHandler(CSSPropertyWebkitBackgroundClip, CSSPropertyBackgroundClip);
- setPropertyHandler(CSSPropertyWebkitBackgroundComposite, ApplyPropertyFillLayer<CompositeOperator, CSSPropertyWebkitBackgroundComposite, BackgroundFillLayer, &RenderStyle::accessBackgroundLayers, &RenderStyle::backgroundLayers, &FillLayer::isCompositeSet, &FillLayer::composite, &FillLayer::setComposite, &FillLayer::clearComposite, &FillLayer::initialFillComposite, &StyleResolver::mapFillComposite>::createHandler());
+ setPropertyHandler(CSSPropertyWebkitBackgroundComposite, ApplyPropertyFillLayer<CompositeOperator, CSSPropertyWebkitBackgroundComposite, BackgroundFillLayer, &RenderStyle::accessBackgroundLayers, &RenderStyle::backgroundLayers, &FillLayer::isCompositeSet, &FillLayer::composite, &FillLayer::setComposite, &FillLayer::clearComposite, &FillLayer::initialFillComposite, &CSSToStyleMap::mapFillComposite>::createHandler());
setPropertyHandler(CSSPropertyWebkitBackgroundOrigin, CSSPropertyBackgroundOrigin);
setPropertyHandler(CSSPropertyWebkitBackgroundSize, CSSPropertyBackgroundSize);
setPropertyHandler(CSSPropertyWebkitBorderFit, ApplyPropertyDefault<EBorderFit, &RenderStyle::borderFit, EBorderFit, &RenderStyle::setBorderFit, EBorderFit, &RenderStyle::initialBorderFit>::createHandler());
setPropertyHandler(CSSPropertyWebkitMarginTopCollapse, CSSPropertyWebkitMarginBeforeCollapse);
setPropertyHandler(CSSPropertyWebkitMarqueeDirection, ApplyPropertyDefault<EMarqueeDirection, &RenderStyle::marqueeDirection, EMarqueeDirection, &RenderStyle::setMarqueeDirection, EMarqueeDirection, &RenderStyle::initialMarqueeDirection>::createHandler());
setPropertyHandler(CSSPropertyWebkitMarqueeStyle, ApplyPropertyDefault<EMarqueeBehavior, &RenderStyle::marqueeBehavior, EMarqueeBehavior, &RenderStyle::setMarqueeBehavior, EMarqueeBehavior, &RenderStyle::initialMarqueeBehavior>::createHandler());
- setPropertyHandler(CSSPropertyWebkitMaskAttachment, ApplyPropertyFillLayer<EFillAttachment, CSSPropertyWebkitMaskAttachment, MaskFillLayer, &RenderStyle::accessMaskLayers, &RenderStyle::maskLayers, &FillLayer::isAttachmentSet, &FillLayer::attachment, &FillLayer::setAttachment, &FillLayer::clearAttachment, &FillLayer::initialFillAttachment, &StyleResolver::mapFillAttachment>::createHandler());
+ setPropertyHandler(CSSPropertyWebkitMaskAttachment, ApplyPropertyFillLayer<EFillAttachment, CSSPropertyWebkitMaskAttachment, MaskFillLayer, &RenderStyle::accessMaskLayers, &RenderStyle::maskLayers, &FillLayer::isAttachmentSet, &FillLayer::attachment, &FillLayer::setAttachment, &FillLayer::clearAttachment, &FillLayer::initialFillAttachment, &CSSToStyleMap::mapFillAttachment>::createHandler());
setPropertyHandler(CSSPropertyWebkitMaskBoxImage, ApplyPropertyBorderImage<Mask, CSSPropertyWebkitMaskBoxImage, &RenderStyle::maskBoxImage, &RenderStyle::setMaskBoxImage>::createHandler());
setPropertyHandler(CSSPropertyWebkitMaskBoxImageOutset, ApplyPropertyBorderImageModifier<Mask, Outset>::createHandler());
setPropertyHandler(CSSPropertyWebkitMaskBoxImageRepeat, ApplyPropertyBorderImageModifier<Mask, Repeat>::createHandler());
setPropertyHandler(CSSPropertyWebkitMaskBoxImageSlice, ApplyPropertyBorderImageModifier<Mask, Slice>::createHandler());
setPropertyHandler(CSSPropertyWebkitMaskBoxImageSource, ApplyPropertyBorderImageSource<CSSPropertyWebkitMaskBoxImageSource, &RenderStyle::maskBoxImageSource, &RenderStyle::setMaskBoxImageSource, &RenderStyle::initialMaskBoxImageSource>::createHandler());
setPropertyHandler(CSSPropertyWebkitMaskBoxImageWidth, ApplyPropertyBorderImageModifier<Mask, Width>::createHandler());
- setPropertyHandler(CSSPropertyWebkitMaskClip, ApplyPropertyFillLayer<EFillBox, CSSPropertyWebkitMaskClip, MaskFillLayer, &RenderStyle::accessMaskLayers, &RenderStyle::maskLayers, &FillLayer::isClipSet, &FillLayer::clip, &FillLayer::setClip, &FillLayer::clearClip, &FillLayer::initialFillClip, &StyleResolver::mapFillClip>::createHandler());
- setPropertyHandler(CSSPropertyWebkitMaskComposite, ApplyPropertyFillLayer<CompositeOperator, CSSPropertyWebkitMaskComposite, MaskFillLayer, &RenderStyle::accessMaskLayers, &RenderStyle::maskLayers, &FillLayer::isCompositeSet, &FillLayer::composite, &FillLayer::setComposite, &FillLayer::clearComposite, &FillLayer::initialFillComposite, &StyleResolver::mapFillComposite>::createHandler());
- setPropertyHandler(CSSPropertyWebkitMaskImage, ApplyPropertyFillLayer<StyleImage*, CSSPropertyWebkitMaskImage, MaskFillLayer, &RenderStyle::accessMaskLayers, &RenderStyle::maskLayers, &FillLayer::isImageSet, &FillLayer::image, &FillLayer::setImage, &FillLayer::clearImage, &FillLayer::initialFillImage, &StyleResolver::mapFillImage>::createHandler());
- setPropertyHandler(CSSPropertyWebkitMaskOrigin, ApplyPropertyFillLayer<EFillBox, CSSPropertyWebkitMaskOrigin, MaskFillLayer, &RenderStyle::accessMaskLayers, &RenderStyle::maskLayers, &FillLayer::isOriginSet, &FillLayer::origin, &FillLayer::setOrigin, &FillLayer::clearOrigin, &FillLayer::initialFillOrigin, &StyleResolver::mapFillOrigin>::createHandler());
+ setPropertyHandler(CSSPropertyWebkitMaskClip, ApplyPropertyFillLayer<EFillBox, CSSPropertyWebkitMaskClip, MaskFillLayer, &RenderStyle::accessMaskLayers, &RenderStyle::maskLayers, &FillLayer::isClipSet, &FillLayer::clip, &FillLayer::setClip, &FillLayer::clearClip, &FillLayer::initialFillClip, &CSSToStyleMap::mapFillClip>::createHandler());
+ setPropertyHandler(CSSPropertyWebkitMaskComposite, ApplyPropertyFillLayer<CompositeOperator, CSSPropertyWebkitMaskComposite, MaskFillLayer, &RenderStyle::accessMaskLayers, &RenderStyle::maskLayers, &FillLayer::isCompositeSet, &FillLayer::composite, &FillLayer::setComposite, &FillLayer::clearComposite, &FillLayer::initialFillComposite, &CSSToStyleMap::mapFillComposite>::createHandler());
+ setPropertyHandler(CSSPropertyWebkitMaskImage, ApplyPropertyFillLayer<StyleImage*, CSSPropertyWebkitMaskImage, MaskFillLayer, &RenderStyle::accessMaskLayers, &RenderStyle::maskLayers, &FillLayer::isImageSet, &FillLayer::image, &FillLayer::setImage, &FillLayer::clearImage, &FillLayer::initialFillImage, &CSSToStyleMap::mapFillImage>::createHandler());
+ setPropertyHandler(CSSPropertyWebkitMaskOrigin, ApplyPropertyFillLayer<EFillBox, CSSPropertyWebkitMaskOrigin, MaskFillLayer, &RenderStyle::accessMaskLayers, &RenderStyle::maskLayers, &FillLayer::isOriginSet, &FillLayer::origin, &FillLayer::setOrigin, &FillLayer::clearOrigin, &FillLayer::initialFillOrigin, &CSSToStyleMap::mapFillOrigin>::createHandler());
setPropertyHandler(CSSPropertyWebkitMaskPosition, ApplyPropertyExpanding<SuppressValue, CSSPropertyWebkitMaskPositionX, CSSPropertyWebkitMaskPositionY>::createHandler());
- setPropertyHandler(CSSPropertyWebkitMaskPositionX, ApplyPropertyFillLayer<Length, CSSPropertyWebkitMaskPositionX, MaskFillLayer, &RenderStyle::accessMaskLayers, &RenderStyle::maskLayers, &FillLayer::isXPositionSet, &FillLayer::xPosition, &FillLayer::setXPosition, &FillLayer::clearXPosition, &FillLayer::initialFillXPosition, &StyleResolver::mapFillXPosition>::createHandler());
- setPropertyHandler(CSSPropertyWebkitMaskPositionY, ApplyPropertyFillLayer<Length, CSSPropertyWebkitMaskPositionY, MaskFillLayer, &RenderStyle::accessMaskLayers, &RenderStyle::maskLayers, &FillLayer::isYPositionSet, &FillLayer::yPosition, &FillLayer::setYPosition, &FillLayer::clearYPosition, &FillLayer::initialFillYPosition, &StyleResolver::mapFillYPosition>::createHandler());
+ setPropertyHandler(CSSPropertyWebkitMaskPositionX, ApplyPropertyFillLayer<Length, CSSPropertyWebkitMaskPositionX, MaskFillLayer, &RenderStyle::accessMaskLayers, &RenderStyle::maskLayers, &FillLayer::isXPositionSet, &FillLayer::xPosition, &FillLayer::setXPosition, &FillLayer::clearXPosition, &FillLayer::initialFillXPosition, &CSSToStyleMap::mapFillXPosition>::createHandler());
+ setPropertyHandler(CSSPropertyWebkitMaskPositionY, ApplyPropertyFillLayer<Length, CSSPropertyWebkitMaskPositionY, MaskFillLayer, &RenderStyle::accessMaskLayers, &RenderStyle::maskLayers, &FillLayer::isYPositionSet, &FillLayer::yPosition, &FillLayer::setYPosition, &FillLayer::clearYPosition, &FillLayer::initialFillYPosition, &CSSToStyleMap::mapFillYPosition>::createHandler());
setPropertyHandler(CSSPropertyWebkitMaskRepeat, ApplyPropertyExpanding<SuppressValue, CSSPropertyBackgroundRepeatX, CSSPropertyBackgroundRepeatY>::createHandler());
- setPropertyHandler(CSSPropertyWebkitMaskRepeatX, ApplyPropertyFillLayer<EFillRepeat, CSSPropertyWebkitMaskRepeatX, MaskFillLayer, &RenderStyle::accessMaskLayers, &RenderStyle::maskLayers, &FillLayer::isRepeatXSet, &FillLayer::repeatX, &FillLayer::setRepeatX, &FillLayer::clearRepeatX, &FillLayer::initialFillRepeatX, &StyleResolver::mapFillRepeatX>::createHandler());
- setPropertyHandler(CSSPropertyWebkitMaskRepeatY, ApplyPropertyFillLayer<EFillRepeat, CSSPropertyWebkitMaskRepeatY, MaskFillLayer, &RenderStyle::accessMaskLayers, &RenderStyle::maskLayers, &FillLayer::isRepeatYSet, &FillLayer::repeatY, &FillLayer::setRepeatY, &FillLayer::clearRepeatY, &FillLayer::initialFillRepeatY, &StyleResolver::mapFillRepeatY>::createHandler());
- setPropertyHandler(CSSPropertyWebkitMaskSize, ApplyPropertyFillLayer<FillSize, CSSPropertyWebkitMaskSize, MaskFillLayer, &RenderStyle::accessMaskLayers, &RenderStyle::maskLayers, &FillLayer::isSizeSet, &FillLayer::size, &FillLayer::setSize, &FillLayer::clearSize, &FillLayer::initialFillSize, &StyleResolver::mapFillSize>::createHandler());
+ setPropertyHandler(CSSPropertyWebkitMaskRepeatX, ApplyPropertyFillLayer<EFillRepeat, CSSPropertyWebkitMaskRepeatX, MaskFillLayer, &RenderStyle::accessMaskLayers, &RenderStyle::maskLayers, &FillLayer::isRepeatXSet, &FillLayer::repeatX, &FillLayer::setRepeatX, &FillLayer::clearRepeatX, &FillLayer::initialFillRepeatX, &CSSToStyleMap::mapFillRepeatX>::createHandler());
+ setPropertyHandler(CSSPropertyWebkitMaskRepeatY, ApplyPropertyFillLayer<EFillRepeat, CSSPropertyWebkitMaskRepeatY, MaskFillLayer, &RenderStyle::accessMaskLayers, &RenderStyle::maskLayers, &FillLayer::isRepeatYSet, &FillLayer::repeatY, &FillLayer::setRepeatY, &FillLayer::clearRepeatY, &FillLayer::initialFillRepeatY, &CSSToStyleMap::mapFillRepeatY>::createHandler());
+ setPropertyHandler(CSSPropertyWebkitMaskSize, ApplyPropertyFillLayer<FillSize, CSSPropertyWebkitMaskSize, MaskFillLayer, &RenderStyle::accessMaskLayers, &RenderStyle::maskLayers, &FillLayer::isSizeSet, &FillLayer::size, &FillLayer::setSize, &FillLayer::clearSize, &FillLayer::initialFillSize, &CSSToStyleMap::mapFillSize>::createHandler());
setPropertyHandler(CSSPropertyWebkitNbspMode, ApplyPropertyDefault<ENBSPMode, &RenderStyle::nbspMode, ENBSPMode, &RenderStyle::setNBSPMode, ENBSPMode, &RenderStyle::initialNBSPMode>::createHandler());
setPropertyHandler(CSSPropertyWebkitPerspectiveOrigin, ApplyPropertyExpanding<SuppressValue, CSSPropertyWebkitPerspectiveOriginX, CSSPropertyWebkitPerspectiveOriginY>::createHandler());
setPropertyHandler(CSSPropertyWebkitPerspectiveOriginX, ApplyPropertyLength<&RenderStyle::perspectiveOriginX, &RenderStyle::setPerspectiveOriginX, &RenderStyle::initialPerspectiveOriginX>::createHandler());
setPropertyHandler(CSSPropertyWebkitTransformOriginY, ApplyPropertyLength<&RenderStyle::transformOriginY, &RenderStyle::setTransformOriginY, &RenderStyle::initialTransformOriginY>::createHandler());
setPropertyHandler(CSSPropertyWebkitTransformOriginZ, ApplyPropertyComputeLength<float, &RenderStyle::transformOriginZ, &RenderStyle::setTransformOriginZ, &RenderStyle::initialTransformOriginZ>::createHandler());
setPropertyHandler(CSSPropertyWebkitTransformStyle, ApplyPropertyDefault<ETransformStyle3D, &RenderStyle::transformStyle3D, ETransformStyle3D, &RenderStyle::setTransformStyle3D, ETransformStyle3D, &RenderStyle::initialTransformStyle3D>::createHandler());
- setPropertyHandler(CSSPropertyWebkitTransitionDelay, ApplyPropertyAnimation<double, &Animation::delay, &Animation::setDelay, &Animation::isDelaySet, &Animation::clearDelay, &Animation::initialAnimationDelay, &StyleResolver::mapAnimationDelay, &RenderStyle::accessTransitions, &RenderStyle::transitions>::createHandler());
- setPropertyHandler(CSSPropertyWebkitTransitionDuration, ApplyPropertyAnimation<double, &Animation::duration, &Animation::setDuration, &Animation::isDurationSet, &Animation::clearDuration, &Animation::initialAnimationDuration, &StyleResolver::mapAnimationDuration, &RenderStyle::accessTransitions, &RenderStyle::transitions>::createHandler());
- setPropertyHandler(CSSPropertyWebkitTransitionProperty, ApplyPropertyAnimation<CSSPropertyID, &Animation::property, &Animation::setProperty, &Animation::isPropertySet, &Animation::clearProperty, &Animation::initialAnimationProperty, &StyleResolver::mapAnimationProperty, &RenderStyle::accessTransitions, &RenderStyle::transitions>::createHandler());
- setPropertyHandler(CSSPropertyWebkitTransitionTimingFunction, ApplyPropertyAnimation<const PassRefPtr<TimingFunction>, &Animation::timingFunction, &Animation::setTimingFunction, &Animation::isTimingFunctionSet, &Animation::clearTimingFunction, &Animation::initialAnimationTimingFunction, &StyleResolver::mapAnimationTimingFunction, &RenderStyle::accessTransitions, &RenderStyle::transitions>::createHandler());
+ setPropertyHandler(CSSPropertyWebkitTransitionDelay, ApplyPropertyAnimation<double, &Animation::delay, &Animation::setDelay, &Animation::isDelaySet, &Animation::clearDelay, &Animation::initialAnimationDelay, &CSSToStyleMap::mapAnimationDelay, &RenderStyle::accessTransitions, &RenderStyle::transitions>::createHandler());
+ setPropertyHandler(CSSPropertyWebkitTransitionDuration, ApplyPropertyAnimation<double, &Animation::duration, &Animation::setDuration, &Animation::isDurationSet, &Animation::clearDuration, &Animation::initialAnimationDuration, &CSSToStyleMap::mapAnimationDuration, &RenderStyle::accessTransitions, &RenderStyle::transitions>::createHandler());
+ setPropertyHandler(CSSPropertyWebkitTransitionProperty, ApplyPropertyAnimation<CSSPropertyID, &Animation::property, &Animation::setProperty, &Animation::isPropertySet, &Animation::clearProperty, &Animation::initialAnimationProperty, &CSSToStyleMap::mapAnimationProperty, &RenderStyle::accessTransitions, &RenderStyle::transitions>::createHandler());
+ setPropertyHandler(CSSPropertyWebkitTransitionTimingFunction, ApplyPropertyAnimation<const PassRefPtr<TimingFunction>, &Animation::timingFunction, &Animation::setTimingFunction, &Animation::isTimingFunctionSet, &Animation::clearTimingFunction, &Animation::initialAnimationTimingFunction, &CSSToStyleMap::mapAnimationTimingFunction, &RenderStyle::accessTransitions, &RenderStyle::transitions>::createHandler());
setPropertyHandler(CSSPropertyWebkitUserDrag, ApplyPropertyDefault<EUserDrag, &RenderStyle::userDrag, EUserDrag, &RenderStyle::setUserDrag, EUserDrag, &RenderStyle::initialUserDrag>::createHandler());
setPropertyHandler(CSSPropertyWebkitUserModify, ApplyPropertyDefault<EUserModify, &RenderStyle::userModify, EUserModify, &RenderStyle::setUserModify, EUserModify, &RenderStyle::initialUserModify>::createHandler());
setPropertyHandler(CSSPropertyWebkitUserSelect, ApplyPropertyDefault<EUserSelect, &RenderStyle::userSelect, EUserSelect, &RenderStyle::setUserSelect, EUserSelect, &RenderStyle::initialUserSelect>::createHandler());
* Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
* Copyright (c) 2011, Code Aurora Forum. All rights reserved.
* Copyright (C) Research In Motion Limited 2011. All rights reserved.
+ * Copyright (C) 2012 Google Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
, m_scopeStackParent(0)
, m_scopeStackParentBoundsIndex(0)
#endif
+ , m_styleMap(this)
{
Element* root = document->documentElement();
reflection->setOffset(reflectValue->offset()->convertToLength<FixedIntegerConversion | PercentConversion | CalculatedConversion>(style(), m_rootElementStyle, zoomFactor));
NinePieceImage mask;
mask.setMaskDefaults();
- mapNinePieceImage(id, reflectValue->mask(), mask);
+ m_styleMap.mapNinePieceImage(id, reflectValue->mask(), mask);
reflection->setMask(mask);
m_style->setBoxReflect(reflection.release());
}
}
-void StyleResolver::mapFillAttachment(CSSPropertyID, FillLayer* layer, CSSValue* value)
-{
- if (value->isInitialValue()) {
- layer->setAttachment(FillLayer::initialFillAttachment(layer->type()));
- return;
- }
-
- if (!value->isPrimitiveValue())
- return;
-
- CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
- switch (primitiveValue->getIdent()) {
- case CSSValueFixed:
- layer->setAttachment(FixedBackgroundAttachment);
- break;
- case CSSValueScroll:
- layer->setAttachment(ScrollBackgroundAttachment);
- break;
- case CSSValueLocal:
- layer->setAttachment(LocalBackgroundAttachment);
- break;
- default:
- return;
- }
-}
-
-void StyleResolver::mapFillClip(CSSPropertyID, FillLayer* layer, CSSValue* value)
-{
- if (value->isInitialValue()) {
- layer->setClip(FillLayer::initialFillClip(layer->type()));
- return;
- }
-
- if (!value->isPrimitiveValue())
- return;
-
- CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
- layer->setClip(*primitiveValue);
-}
-
-void StyleResolver::mapFillComposite(CSSPropertyID, FillLayer* layer, CSSValue* value)
-{
- if (value->isInitialValue()) {
- layer->setComposite(FillLayer::initialFillComposite(layer->type()));
- return;
- }
-
- if (!value->isPrimitiveValue())
- return;
-
- CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
- layer->setComposite(*primitiveValue);
-}
-
-void StyleResolver::mapFillOrigin(CSSPropertyID, FillLayer* layer, CSSValue* value)
-{
- if (value->isInitialValue()) {
- layer->setOrigin(FillLayer::initialFillOrigin(layer->type()));
- return;
- }
-
- if (!value->isPrimitiveValue())
- return;
-
- CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
- layer->setOrigin(*primitiveValue);
-}
-
PassRefPtr<StyleImage> StyleResolver::styleImage(CSSPropertyID property, CSSValue* value)
{
if (value->isImageValue())
}
#endif
-void StyleResolver::mapFillImage(CSSPropertyID property, FillLayer* layer, CSSValue* value)
-{
- if (value->isInitialValue()) {
- layer->setImage(FillLayer::initialFillImage(layer->type()));
- return;
- }
-
- layer->setImage(styleImage(property, value));
-}
-
-void StyleResolver::mapFillRepeatX(CSSPropertyID, FillLayer* layer, CSSValue* value)
-{
- if (value->isInitialValue()) {
- layer->setRepeatX(FillLayer::initialFillRepeatX(layer->type()));
- return;
- }
-
- if (!value->isPrimitiveValue())
- return;
-
- CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
- layer->setRepeatX(*primitiveValue);
-}
-
-void StyleResolver::mapFillRepeatY(CSSPropertyID, FillLayer* layer, CSSValue* value)
-{
- if (value->isInitialValue()) {
- layer->setRepeatY(FillLayer::initialFillRepeatY(layer->type()));
- return;
- }
-
- if (!value->isPrimitiveValue())
- return;
-
- CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
- layer->setRepeatY(*primitiveValue);
-}
-
-void StyleResolver::mapFillSize(CSSPropertyID, FillLayer* layer, CSSValue* value)
-{
- if (!value->isPrimitiveValue()) {
- layer->setSizeType(SizeNone);
- return;
- }
-
- CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
- if (primitiveValue->getIdent() == CSSValueContain)
- layer->setSizeType(Contain);
- else if (primitiveValue->getIdent() == CSSValueCover)
- layer->setSizeType(Cover);
- else
- layer->setSizeType(SizeLength);
-
- LengthSize b = FillLayer::initialFillSizeLength(layer->type());
-
- if (value->isInitialValue() || primitiveValue->getIdent() == CSSValueContain || primitiveValue->getIdent() == CSSValueCover) {
- layer->setSizeLength(b);
- return;
- }
-
- float zoomFactor = m_style->effectiveZoom();
-
- Length firstLength;
- Length secondLength;
-
- if (Pair* pair = primitiveValue->getPairValue()) {
- CSSPrimitiveValue* first = static_cast<CSSPrimitiveValue*>(pair->first());
- CSSPrimitiveValue* second = static_cast<CSSPrimitiveValue*>(pair->second());
- firstLength = first->convertToLength<AnyConversion>(style(), m_rootElementStyle, zoomFactor);
- secondLength = second->convertToLength<AnyConversion>(style(), m_rootElementStyle, zoomFactor);
- } else {
- firstLength = primitiveValue->convertToLength<AnyConversion>(style(), m_rootElementStyle, zoomFactor);
- secondLength = Length();
- }
-
- if (firstLength.isUndefined() || secondLength.isUndefined())
- return;
-
- b.setWidth(firstLength);
- b.setHeight(secondLength);
- layer->setSizeLength(b);
-}
-
-void StyleResolver::mapFillXPosition(CSSPropertyID, FillLayer* layer, CSSValue* value)
-{
- if (value->isInitialValue()) {
- layer->setXPosition(FillLayer::initialFillXPosition(layer->type()));
- return;
- }
-
- if (!value->isPrimitiveValue())
- return;
-
- float zoomFactor = m_style->effectiveZoom();
-
- CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
- Length length;
- if (primitiveValue->isLength())
- length = primitiveValue->computeLength<Length>(style(), m_rootElementStyle, zoomFactor);
- else if (primitiveValue->isPercentage())
- length = Length(primitiveValue->getDoubleValue(), Percent);
- else if (primitiveValue->isCalculatedPercentageWithLength())
- length = Length(primitiveValue->cssCalcValue()->toCalcValue(style(), m_rootElementStyle, zoomFactor));
- else if (primitiveValue->isViewportPercentageLength())
- length = primitiveValue->viewportPercentageLength();
- else
- return;
- layer->setXPosition(length);
-}
-
-void StyleResolver::mapFillYPosition(CSSPropertyID, FillLayer* layer, CSSValue* value)
-{
- if (value->isInitialValue()) {
- layer->setYPosition(FillLayer::initialFillYPosition(layer->type()));
- return;
- }
-
- if (!value->isPrimitiveValue())
- return;
-
- float zoomFactor = m_style->effectiveZoom();
-
- CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
- Length length;
- if (primitiveValue->isLength())
- length = primitiveValue->computeLength<Length>(style(), m_rootElementStyle, zoomFactor);
- else if (primitiveValue->isPercentage())
- length = Length(primitiveValue->getDoubleValue(), Percent);
- else if (primitiveValue->isCalculatedPercentageWithLength())
- length = Length(primitiveValue->cssCalcValue()->toCalcValue(style(), m_rootElementStyle, zoomFactor));
- else if (primitiveValue->isViewportPercentageLength())
- length = primitiveValue->viewportPercentageLength();
- else
- return;
- layer->setYPosition(length);
-}
-
-void StyleResolver::mapAnimationDelay(Animation* animation, CSSValue* value)
-{
- if (value->isInitialValue()) {
- animation->setDelay(Animation::initialAnimationDelay());
- return;
- }
-
- if (!value->isPrimitiveValue())
- return;
-
- CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
- animation->setDelay(primitiveValue->computeTime<float, CSSPrimitiveValue::Seconds>());
-}
-
-void StyleResolver::mapAnimationDirection(Animation* layer, CSSValue* value)
-{
- if (value->isInitialValue()) {
- layer->setDirection(Animation::initialAnimationDirection());
- return;
- }
-
- if (!value->isPrimitiveValue())
- return;
-
- CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
- switch (primitiveValue->getIdent()) {
- case CSSValueNormal:
- layer->setDirection(Animation::AnimationDirectionNormal);
- break;
- case CSSValueAlternate:
- layer->setDirection(Animation::AnimationDirectionAlternate);
- break;
- case CSSValueReverse:
- layer->setDirection(Animation::AnimationDirectionReverse);
- break;
- case CSSValueAlternateReverse:
- layer->setDirection(Animation::AnimationDirectionAlternateReverse);
- break;
- }
-}
-
-void StyleResolver::mapAnimationDuration(Animation* animation, CSSValue* value)
-{
- if (value->isInitialValue()) {
- animation->setDuration(Animation::initialAnimationDuration());
- return;
- }
-
- if (!value->isPrimitiveValue())
- return;
-
- CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
- animation->setDuration(primitiveValue->computeTime<float, CSSPrimitiveValue::Seconds>());
-}
-
-void StyleResolver::mapAnimationFillMode(Animation* layer, CSSValue* value)
-{
- if (value->isInitialValue()) {
- layer->setFillMode(Animation::initialAnimationFillMode());
- return;
- }
-
- if (!value->isPrimitiveValue())
- return;
-
- CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
- switch (primitiveValue->getIdent()) {
- case CSSValueNone:
- layer->setFillMode(AnimationFillModeNone);
- break;
- case CSSValueForwards:
- layer->setFillMode(AnimationFillModeForwards);
- break;
- case CSSValueBackwards:
- layer->setFillMode(AnimationFillModeBackwards);
- break;
- case CSSValueBoth:
- layer->setFillMode(AnimationFillModeBoth);
- break;
- }
-}
-
-void StyleResolver::mapAnimationIterationCount(Animation* animation, CSSValue* value)
-{
- if (value->isInitialValue()) {
- animation->setIterationCount(Animation::initialAnimationIterationCount());
- return;
- }
-
- if (!value->isPrimitiveValue())
- return;
-
- CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
- if (primitiveValue->getIdent() == CSSValueInfinite)
- animation->setIterationCount(-1);
- else
- animation->setIterationCount(primitiveValue->getFloatValue());
-}
-
-void StyleResolver::mapAnimationName(Animation* layer, CSSValue* value)
-{
- if (value->isInitialValue()) {
- layer->setName(Animation::initialAnimationName());
- return;
- }
-
- if (!value->isPrimitiveValue())
- return;
-
- CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
- if (primitiveValue->getIdent() == CSSValueNone)
- layer->setIsNoneAnimation(true);
- else
- layer->setName(primitiveValue->getStringValue());
-}
-
-void StyleResolver::mapAnimationPlayState(Animation* layer, CSSValue* value)
-{
- if (value->isInitialValue()) {
- layer->setPlayState(Animation::initialAnimationPlayState());
- return;
- }
-
- if (!value->isPrimitiveValue())
- return;
-
- CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
- EAnimPlayState playState = (primitiveValue->getIdent() == CSSValuePaused) ? AnimPlayStatePaused : AnimPlayStatePlaying;
- layer->setPlayState(playState);
-}
-
-void StyleResolver::mapAnimationProperty(Animation* animation, CSSValue* value)
-{
- if (value->isInitialValue()) {
- animation->setAnimationMode(Animation::AnimateAll);
- animation->setProperty(CSSPropertyInvalid);
- return;
- }
-
- if (!value->isPrimitiveValue())
- return;
-
- CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
- if (primitiveValue->getIdent() == CSSValueAll) {
- animation->setAnimationMode(Animation::AnimateAll);
- animation->setProperty(CSSPropertyInvalid);
- } else if (primitiveValue->getIdent() == CSSValueNone) {
- animation->setAnimationMode(Animation::AnimateNone);
- animation->setProperty(CSSPropertyInvalid);
- } else {
- animation->setAnimationMode(Animation::AnimateSingleProperty);
- animation->setProperty(static_cast<CSSPropertyID>(primitiveValue->getIdent()));
- }
-}
-
-void StyleResolver::mapAnimationTimingFunction(Animation* animation, CSSValue* value)
-{
- if (value->isInitialValue()) {
- animation->setTimingFunction(Animation::initialAnimationTimingFunction());
- return;
- }
-
- if (value->isPrimitiveValue()) {
- CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
- switch (primitiveValue->getIdent()) {
- case CSSValueLinear:
- animation->setTimingFunction(LinearTimingFunction::create());
- break;
- case CSSValueEase:
- animation->setTimingFunction(CubicBezierTimingFunction::create());
- break;
- case CSSValueEaseIn:
- animation->setTimingFunction(CubicBezierTimingFunction::create(0.42, 0.0, 1.0, 1.0));
- break;
- case CSSValueEaseOut:
- animation->setTimingFunction(CubicBezierTimingFunction::create(0.0, 0.0, 0.58, 1.0));
- break;
- case CSSValueEaseInOut:
- animation->setTimingFunction(CubicBezierTimingFunction::create(0.42, 0.0, 0.58, 1.0));
- break;
- case CSSValueStepStart:
- animation->setTimingFunction(StepsTimingFunction::create(1, true));
- break;
- case CSSValueStepEnd:
- animation->setTimingFunction(StepsTimingFunction::create(1, false));
- break;
- }
- return;
- }
-
- if (value->isCubicBezierTimingFunctionValue()) {
- CSSCubicBezierTimingFunctionValue* cubicTimingFunction = static_cast<CSSCubicBezierTimingFunctionValue*>(value);
- animation->setTimingFunction(CubicBezierTimingFunction::create(cubicTimingFunction->x1(), cubicTimingFunction->y1(), cubicTimingFunction->x2(), cubicTimingFunction->y2()));
- } else if (value->isStepsTimingFunctionValue()) {
- CSSStepsTimingFunctionValue* stepsTimingFunction = static_cast<CSSStepsTimingFunctionValue*>(value);
- animation->setTimingFunction(StepsTimingFunction::create(stepsTimingFunction->numberOfSteps(), stepsTimingFunction->stepAtStart()));
- } else if (value->isLinearTimingFunctionValue())
- animation->setTimingFunction(LinearTimingFunction::create());
-}
-
-void StyleResolver::mapNinePieceImage(CSSPropertyID property, CSSValue* value, NinePieceImage& image)
-{
- // If we're not a value list, then we are "none" and don't need to alter the empty image at all.
- if (!value || !value->isValueList())
- return;
-
- // Retrieve the border image value.
- CSSValueList* borderImage = static_cast<CSSValueList*>(value);
-
- // Set the image (this kicks off the load).
- CSSPropertyID imageProperty;
- if (property == CSSPropertyWebkitBorderImage)
- imageProperty = CSSPropertyBorderImageSource;
- else if (property == CSSPropertyWebkitMaskBoxImage)
- imageProperty = CSSPropertyWebkitMaskBoxImageSource;
- else
- imageProperty = property;
-
- for (unsigned i = 0 ; i < borderImage->length() ; ++i) {
- CSSValue* current = borderImage->item(i);
-
- if (current->isImageValue() || current->isImageGeneratorValue()
-#if ENABLE(CSS_IMAGE_SET)
- || current->isImageSetValue()
-#endif
- )
- image.setImage(styleImage(imageProperty, current));
- else if (current->isBorderImageSliceValue())
- mapNinePieceImageSlice(current, image);
- else if (current->isValueList()) {
- CSSValueList* slashList = static_cast<CSSValueList*>(current);
- // Map in the image slices.
- if (slashList->item(0) && slashList->item(0)->isBorderImageSliceValue())
- mapNinePieceImageSlice(slashList->item(0), image);
-
- // Map in the border slices.
- if (slashList->item(1))
- image.setBorderSlices(mapNinePieceImageQuad(slashList->item(1)));
-
- // Map in the outset.
- if (slashList->item(2))
- image.setOutset(mapNinePieceImageQuad(slashList->item(2)));
- } else if (current->isPrimitiveValue()) {
- // Set the appropriate rules for stretch/round/repeat of the slices.
- mapNinePieceImageRepeat(current, image);
- }
- }
-
- if (property == CSSPropertyWebkitBorderImage) {
- // We have to preserve the legacy behavior of -webkit-border-image and make the border slices
- // also set the border widths. We don't need to worry about percentages, since we don't even support
- // those on real borders yet.
- if (image.borderSlices().top().isFixed())
- style()->setBorderTopWidth(image.borderSlices().top().value());
- if (image.borderSlices().right().isFixed())
- style()->setBorderRightWidth(image.borderSlices().right().value());
- if (image.borderSlices().bottom().isFixed())
- style()->setBorderBottomWidth(image.borderSlices().bottom().value());
- if (image.borderSlices().left().isFixed())
- style()->setBorderLeftWidth(image.borderSlices().left().value());
- }
-}
-
-void StyleResolver::mapNinePieceImageSlice(CSSValue* value, NinePieceImage& image)
-{
- if (!value || !value->isBorderImageSliceValue())
- return;
-
- // Retrieve the border image value.
- CSSBorderImageSliceValue* borderImageSlice = static_cast<CSSBorderImageSliceValue*>(value);
-
- // Set up a length box to represent our image slices.
- LengthBox box;
- Quad* slices = borderImageSlice->slices();
- if (slices->top()->isPercentage())
- box.m_top = Length(slices->top()->getDoubleValue(), Percent);
- else
- box.m_top = Length(slices->top()->getIntValue(CSSPrimitiveValue::CSS_NUMBER), Fixed);
- if (slices->bottom()->isPercentage())
- box.m_bottom = Length(slices->bottom()->getDoubleValue(), Percent);
- else
- box.m_bottom = Length((int)slices->bottom()->getFloatValue(CSSPrimitiveValue::CSS_NUMBER), Fixed);
- if (slices->left()->isPercentage())
- box.m_left = Length(slices->left()->getDoubleValue(), Percent);
- else
- box.m_left = Length(slices->left()->getIntValue(CSSPrimitiveValue::CSS_NUMBER), Fixed);
- if (slices->right()->isPercentage())
- box.m_right = Length(slices->right()->getDoubleValue(), Percent);
- else
- box.m_right = Length(slices->right()->getIntValue(CSSPrimitiveValue::CSS_NUMBER), Fixed);
- image.setImageSlices(box);
-
- // Set our fill mode.
- image.setFill(borderImageSlice->m_fill);
-}
-
-LengthBox StyleResolver::mapNinePieceImageQuad(CSSValue* value)
-{
- if (!value || !value->isPrimitiveValue())
- return LengthBox();
-
- // Get our zoom value.
- float zoom = useSVGZoomRules() ? 1.0f : style()->effectiveZoom();
-
- // Retrieve the primitive value.
- CSSPrimitiveValue* borderWidths = static_cast<CSSPrimitiveValue*>(value);
-
- // Set up a length box to represent our image slices.
- LengthBox box; // Defaults to 'auto' so we don't have to handle that explicitly below.
- Quad* slices = borderWidths->getQuadValue();
- if (slices->top()->isNumber())
- box.m_top = Length(slices->top()->getIntValue(), Relative);
- else if (slices->top()->isPercentage())
- box.m_top = Length(slices->top()->getDoubleValue(CSSPrimitiveValue::CSS_PERCENTAGE), Percent);
- else if (slices->top()->getIdent() != CSSValueAuto)
- box.m_top = slices->top()->computeLength<Length>(style(), rootElementStyle(), zoom);
-
- if (slices->right()->isNumber())
- box.m_right = Length(slices->right()->getIntValue(), Relative);
- else if (slices->right()->isPercentage())
- box.m_right = Length(slices->right()->getDoubleValue(CSSPrimitiveValue::CSS_PERCENTAGE), Percent);
- else if (slices->right()->getIdent() != CSSValueAuto)
- box.m_right = slices->right()->computeLength<Length>(style(), rootElementStyle(), zoom);
-
- if (slices->bottom()->isNumber())
- box.m_bottom = Length(slices->bottom()->getIntValue(), Relative);
- else if (slices->bottom()->isPercentage())
- box.m_bottom = Length(slices->bottom()->getDoubleValue(CSSPrimitiveValue::CSS_PERCENTAGE), Percent);
- else if (slices->bottom()->getIdent() != CSSValueAuto)
- box.m_bottom = slices->bottom()->computeLength<Length>(style(), rootElementStyle(), zoom);
-
- if (slices->left()->isNumber())
- box.m_left = Length(slices->left()->getIntValue(), Relative);
- else if (slices->left()->isPercentage())
- box.m_left = Length(slices->left()->getDoubleValue(CSSPrimitiveValue::CSS_PERCENTAGE), Percent);
- else if (slices->left()->getIdent() != CSSValueAuto)
- box.m_left = slices->left()->computeLength<Length>(style(), rootElementStyle(), zoom);
-
- return box;
-}
-
-void StyleResolver::mapNinePieceImageRepeat(CSSValue* value, NinePieceImage& image)
-{
- if (!value || !value->isPrimitiveValue())
- return;
-
- CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
- Pair* pair = primitiveValue->getPairValue();
- if (!pair || !pair->first() || !pair->second())
- return;
-
- int firstIdentifier = pair->first()->getIdent();
- int secondIdentifier = pair->second()->getIdent();
-
- ENinePieceImageRule horizontalRule;
- switch (firstIdentifier) {
- case CSSValueStretch:
- horizontalRule = StretchImageRule;
- break;
- case CSSValueRound:
- horizontalRule = RoundImageRule;
- break;
- case CSSValueSpace:
- horizontalRule = SpaceImageRule;
- break;
- default: // CSSValueRepeat
- horizontalRule = RepeatImageRule;
- break;
- }
- image.setHorizontalRule(horizontalRule);
-
- ENinePieceImageRule verticalRule;
- switch (secondIdentifier) {
- case CSSValueStretch:
- verticalRule = StretchImageRule;
- break;
- case CSSValueRound:
- verticalRule = RoundImageRule;
- break;
- case CSSValueSpace:
- verticalRule = SpaceImageRule;
- break;
- default: // CSSValueRepeat
- verticalRule = RepeatImageRule;
- break;
- }
- image.setVerticalRule(verticalRule);
-}
-
void StyleResolver::checkForTextSizeAdjust()
{
if (m_style->textSizeAdjust())
#define StyleResolver_h
#include "CSSRule.h"
+#include "CSSToStyleMap.h"
#include "CSSValueList.h"
#include "LinkHash.h"
#include "MediaQueryExp.h"
static Length convertToIntLength(CSSPrimitiveValue*, RenderStyle*, RenderStyle* rootStyle, double multiplier = 1);
static Length convertToFloatLength(CSSPrimitiveValue*, RenderStyle*, RenderStyle* rootStyle, double multiplier = 1);
+ CSSToStyleMap* styleMap() { return &m_styleMap; }
+
private:
static RenderStyle* s_styleNotYetAvailable;
void cacheBorderAndBackground();
- void mapFillAttachment(CSSPropertyID, FillLayer*, CSSValue*);
- void mapFillClip(CSSPropertyID, FillLayer*, CSSValue*);
- void mapFillComposite(CSSPropertyID, FillLayer*, CSSValue*);
- void mapFillOrigin(CSSPropertyID, FillLayer*, CSSValue*);
- void mapFillImage(CSSPropertyID, FillLayer*, CSSValue*);
- void mapFillRepeatX(CSSPropertyID, FillLayer*, CSSValue*);
- void mapFillRepeatY(CSSPropertyID, FillLayer*, CSSValue*);
- void mapFillSize(CSSPropertyID, FillLayer*, CSSValue*);
- void mapFillXPosition(CSSPropertyID, FillLayer*, CSSValue*);
- void mapFillYPosition(CSSPropertyID, FillLayer*, CSSValue*);
-
- void mapAnimationDelay(Animation*, CSSValue*);
- void mapAnimationDirection(Animation*, CSSValue*);
- void mapAnimationDuration(Animation*, CSSValue*);
- void mapAnimationFillMode(Animation*, CSSValue*);
- void mapAnimationIterationCount(Animation*, CSSValue*);
- void mapAnimationName(Animation*, CSSValue*);
- void mapAnimationPlayState(Animation*, CSSValue*);
- void mapAnimationProperty(Animation*, CSSValue*);
- void mapAnimationTimingFunction(Animation*, CSSValue*);
-
-public:
- void mapNinePieceImage(CSSPropertyID, CSSValue*, NinePieceImage&);
- void mapNinePieceImageSlice(CSSValue*, NinePieceImage&);
- LengthBox mapNinePieceImageQuad(CSSValue*);
- void mapNinePieceImageRepeat(CSSValue*, NinePieceImage&);
private:
bool canShareStyleWithControl(StyledElement*) const;
int m_scopeStackParentBoundsIndex;
#endif
+ CSSToStyleMap m_styleMap;
+
friend class StyleBuilder;
friend bool operator==(const MatchedProperties&, const MatchedProperties&);
friend bool operator!=(const MatchedProperties&, const MatchedProperties&);