| Index: third_party/WebKit/Source/core/css/resolver/AnimatedStyleBuilder.cpp
|
| diff --git a/third_party/WebKit/Source/core/css/resolver/AnimatedStyleBuilder.cpp b/third_party/WebKit/Source/core/css/resolver/AnimatedStyleBuilder.cpp
|
| index 5501d85711565728aaa27bedf0ffdce1dc2dfb32..8a7641c50aead52e7f7cbe61a37393bc6035a405 100644
|
| --- a/third_party/WebKit/Source/core/css/resolver/AnimatedStyleBuilder.cpp
|
| +++ b/third_party/WebKit/Source/core/css/resolver/AnimatedStyleBuilder.cpp
|
| @@ -64,680 +64,15 @@
|
|
|
| namespace blink {
|
|
|
| -namespace {
|
| -
|
| -Length animatableValueToLengthWithZoom(const AnimatableValue* value,
|
| - float zoom,
|
| - ValueRange range = ValueRangeAll) {
|
| - if (value->isLength())
|
| - return toAnimatableLength(value)->getLength(zoom, range);
|
| - ASSERT(toAnimatableUnknown(value)->toCSSValueID() == CSSValueAuto);
|
| - return Length(Auto);
|
| -}
|
| -
|
| -Length animatableValueToLength(const AnimatableValue* value,
|
| - const StyleResolverState& state,
|
| - ValueRange range = ValueRangeAll) {
|
| - return animatableValueToLengthWithZoom(value, state.style()->effectiveZoom(),
|
| - range);
|
| -}
|
| -
|
| -UnzoomedLength animatableValueToUnzoomedLength(
|
| - const AnimatableValue* value,
|
| - const StyleResolverState&,
|
| - ValueRange range = ValueRangeAll) {
|
| - return UnzoomedLength(animatableValueToLengthWithZoom(value, 1, range));
|
| -}
|
| -
|
| -BorderImageLength animatableValueToBorderImageLength(
|
| - const AnimatableValue* value,
|
| - const StyleResolverState& state) {
|
| - if (value->isLength())
|
| - return BorderImageLength(toAnimatableLength(value)->getLength(
|
| - state.style()->effectiveZoom(), ValueRangeNonNegative));
|
| - if (value->isDouble())
|
| - return BorderImageLength(
|
| - clampTo<double>(toAnimatableDouble(value)->toDouble(), 0));
|
| - ASSERT(toAnimatableUnknown(value)->toCSSValueID() == CSSValueAuto);
|
| - return Length(Auto);
|
| -}
|
| -
|
| -double animatableValueToPixels(const AnimatableValue* value,
|
| - const StyleResolverState& state) {
|
| - return toAnimatableLength(value)
|
| - ->getLength(state.style()->effectiveZoom(), ValueRangeAll)
|
| - .pixels();
|
| -}
|
| -
|
| -template <typename T>
|
| -T roundedClampTo(double value) {
|
| - static_assert(std::is_integral<T>::value,
|
| - "should use integral type T when rounding values");
|
| - return clampTo<T>(roundForImpreciseConversion<T>(value));
|
| -}
|
| -
|
| -template <typename T>
|
| -T animatableValueClampTo(const AnimatableValue* value) {
|
| - return roundedClampTo<T>(toAnimatableDouble(value)->toDouble());
|
| -}
|
| -
|
| -template <typename T>
|
| -T animatableLineWidthClamp(const AnimatableValue* value,
|
| - const StyleResolverState& state) {
|
| - double lineWidth = animatableValueToPixels(value, state);
|
| - // This matches StyleBuilderConverter::convertLineWidth().
|
| - return (lineWidth > 0 && lineWidth < 1) ? 1 : roundedClampTo<T>(lineWidth);
|
| -}
|
| -
|
| -float animatableLineWidth(const AnimatableValue* value,
|
| - const StyleResolverState& state) {
|
| - double lineWidth =
|
| - toAnimatableLength(value)
|
| - ->getLength(state.style()->effectiveZoom(), ValueRangeNonNegative)
|
| - .pixels();
|
| - // This matches StyleBuilderConverter::convertLineWidth().
|
| - return (lineWidth > 0 && lineWidth < 1) ? 1 : lineWidth;
|
| -}
|
| -
|
| -LengthBox animatableValueToLengthBox(const AnimatableValue* value,
|
| - const StyleResolverState& state,
|
| - ValueRange range = ValueRangeAll) {
|
| - const AnimatableLengthBox* animatableLengthBox = toAnimatableLengthBox(value);
|
| - return LengthBox(
|
| - animatableValueToLength(animatableLengthBox->top(), state, range),
|
| - animatableValueToLength(animatableLengthBox->right(), state, range),
|
| - animatableValueToLength(animatableLengthBox->bottom(), state, range),
|
| - animatableValueToLength(animatableLengthBox->left(), state, range));
|
| -}
|
| -
|
| -BorderImageLengthBox animatableValueToBorderImageLengthBox(
|
| - const AnimatableValue* value,
|
| - const StyleResolverState& state) {
|
| - const AnimatableLengthBox* animatableLengthBox = toAnimatableLengthBox(value);
|
| - return BorderImageLengthBox(
|
| - animatableValueToBorderImageLength(animatableLengthBox->top(), state),
|
| - animatableValueToBorderImageLength(animatableLengthBox->right(), state),
|
| - animatableValueToBorderImageLength(animatableLengthBox->bottom(), state),
|
| - animatableValueToBorderImageLength(animatableLengthBox->left(), state));
|
| -}
|
| -
|
| -LengthPoint animatableValueToLengthPoint(const AnimatableValue* value,
|
| - const StyleResolverState& state,
|
| - ValueRange range = ValueRangeAll) {
|
| - const AnimatableLengthPoint* animatableLengthPoint =
|
| - toAnimatableLengthPoint(value);
|
| - return LengthPoint(
|
| - animatableValueToLength(animatableLengthPoint->x(), state, range),
|
| - animatableValueToLength(animatableLengthPoint->y(), state, range));
|
| -}
|
| -
|
| -TransformOrigin animatableValueToTransformOrigin(
|
| - const AnimatableValue* value,
|
| - const StyleResolverState& state,
|
| - ValueRange range = ValueRangeAll) {
|
| - const AnimatableLengthPoint3D* animatableLengthPoint3D =
|
| - toAnimatableLengthPoint3D(value);
|
| - return TransformOrigin(
|
| - animatableValueToLength(animatableLengthPoint3D->x(), state),
|
| - animatableValueToLength(animatableLengthPoint3D->y(), state),
|
| - animatableValueToPixels(animatableLengthPoint3D->z(), state));
|
| -}
|
| -
|
| -LengthSize animatableValueToLengthSize(const AnimatableValue* value,
|
| - const StyleResolverState& state,
|
| - ValueRange range) {
|
| - const AnimatableLengthSize* animatableLengthSize =
|
| - toAnimatableLengthSize(value);
|
| - return LengthSize(
|
| - animatableValueToLength(animatableLengthSize->width(), state, range),
|
| - animatableValueToLength(animatableLengthSize->height(), state, range));
|
| -}
|
| -
|
| -void setFillSize(FillLayer* fillLayer,
|
| - const AnimatableValue* value,
|
| - StyleResolverState& state) {
|
| - if (value->isLengthSize())
|
| - fillLayer->setSize(FillSize(
|
| - SizeLength,
|
| - animatableValueToLengthSize(value, state, ValueRangeNonNegative)));
|
| - else
|
| - CSSToStyleMap::mapFillSize(state, fillLayer,
|
| - *toAnimatableUnknown(value)->toCSSValue());
|
| -}
|
| -
|
| -template <CSSPropertyID property>
|
| -void setOnFillLayers(FillLayer& fillLayers,
|
| - const AnimatableValue* value,
|
| - StyleResolverState& state) {
|
| - const Vector<RefPtr<AnimatableValue>>& values =
|
| - toAnimatableRepeatable(value)->values();
|
| - ASSERT(!values.isEmpty());
|
| - FillLayer* fillLayer = &fillLayers;
|
| - FillLayer* prev = 0;
|
| - for (size_t i = 0; i < values.size(); ++i) {
|
| - if (!fillLayer)
|
| - fillLayer = prev->ensureNext();
|
| - const AnimatableValue* layerValue = values[i].get();
|
| - switch (property) {
|
| - case CSSPropertyBackgroundImage:
|
| - case CSSPropertyWebkitMaskImage:
|
| - if (layerValue->isImage()) {
|
| - fillLayer->setImage(state.styleImage(
|
| - property, *toAnimatableImage(layerValue)->toCSSValue()));
|
| - } else {
|
| - ASSERT(toAnimatableUnknown(layerValue)->toCSSValueID() ==
|
| - CSSValueNone);
|
| - fillLayer->setImage(nullptr);
|
| - }
|
| - break;
|
| - case CSSPropertyBackgroundPositionX:
|
| - case CSSPropertyWebkitMaskPositionX:
|
| - fillLayer->setXPosition(animatableValueToLength(layerValue, state));
|
| - break;
|
| - case CSSPropertyBackgroundPositionY:
|
| - case CSSPropertyWebkitMaskPositionY:
|
| - fillLayer->setYPosition(animatableValueToLength(layerValue, state));
|
| - break;
|
| - case CSSPropertyBackgroundSize:
|
| - case CSSPropertyWebkitMaskSize:
|
| - setFillSize(fillLayer, layerValue, state);
|
| - break;
|
| - default:
|
| - ASSERT_NOT_REACHED();
|
| - }
|
| - prev = fillLayer;
|
| - fillLayer = fillLayer->next();
|
| - }
|
| - while (fillLayer) {
|
| - switch (property) {
|
| - case CSSPropertyBackgroundImage:
|
| - case CSSPropertyWebkitMaskImage:
|
| - fillLayer->clearImage();
|
| - break;
|
| - case CSSPropertyBackgroundPositionX:
|
| - case CSSPropertyWebkitMaskPositionX:
|
| - fillLayer->clearXPosition();
|
| - break;
|
| - case CSSPropertyBackgroundPositionY:
|
| - case CSSPropertyWebkitMaskPositionY:
|
| - fillLayer->clearYPosition();
|
| - break;
|
| - case CSSPropertyBackgroundSize:
|
| - case CSSPropertyWebkitMaskSize:
|
| - fillLayer->clearSize();
|
| - break;
|
| - default:
|
| - ASSERT_NOT_REACHED();
|
| - }
|
| - fillLayer = fillLayer->next();
|
| - }
|
| -}
|
| -
|
| -FontStretch animatableValueToFontStretch(const AnimatableValue* value) {
|
| - ASSERT(FontStretchUltraCondensed == 1 && FontStretchUltraExpanded == 9);
|
| - unsigned index = round(toAnimatableDouble(value)->toDouble()) - 1;
|
| - static const FontStretch stretchValues[] = {
|
| - FontStretchUltraCondensed, FontStretchExtraCondensed,
|
| - FontStretchCondensed, FontStretchSemiCondensed,
|
| - FontStretchNormal, FontStretchSemiExpanded,
|
| - FontStretchExpanded, FontStretchExtraExpanded,
|
| - FontStretchUltraExpanded};
|
| -
|
| - index = clampTo<unsigned>(index, 0, WTF_ARRAY_LENGTH(stretchValues) - 1);
|
| - return stretchValues[index];
|
| -}
|
| -
|
| -FontWeight animatableValueToFontWeight(const AnimatableValue* value) {
|
| - int index = round(toAnimatableDouble(value)->toDouble() / 100) - 1;
|
| -
|
| - static const FontWeight weights[] = {
|
| - FontWeight100, FontWeight200, FontWeight300, FontWeight400, FontWeight500,
|
| - FontWeight600, FontWeight700, FontWeight800, FontWeight900};
|
| -
|
| - index = clampTo<int>(index, 0, WTF_ARRAY_LENGTH(weights) - 1);
|
| -
|
| - return weights[index];
|
| -}
|
| -
|
| -FontDescription::Size animatableValueToFontSize(const AnimatableValue* value) {
|
| - float size = clampTo<float>(toAnimatableDouble(value)->toDouble(), 0);
|
| - return FontDescription::Size(0, size, true);
|
| -}
|
| -
|
| -TransformOperation* animatableValueToTransformOperation(
|
| - const AnimatableValue* value,
|
| - TransformOperation::OperationType type) {
|
| - const TransformOperations& transformList =
|
| - toAnimatableTransform(value)->transformOperations();
|
| - if (transformList.size() == 0)
|
| - return nullptr;
|
| - ASSERT(transformList.size() == 1);
|
| - ASSERT(transformList.operations()[0].get()->type() == type);
|
| - return transformList.operations()[0].get();
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -// FIXME: Generate this function.
|
| void AnimatedStyleBuilder::applyProperty(CSSPropertyID property,
|
| - StyleResolverState& state,
|
| + ComputedStyle& style,
|
| const AnimatableValue* value) {
|
| ASSERT(CSSPropertyMetadata::isInterpolableProperty(property));
|
| - if (value->isUnknown()) {
|
| - StyleBuilder::applyProperty(property, state,
|
| - *toAnimatableUnknown(value)->toCSSValue());
|
| - return;
|
| - }
|
| - ComputedStyle* style = state.style();
|
| switch (property) {
|
| - case CSSPropertyBackgroundColor:
|
| - style->setBackgroundColor(toAnimatableColor(value)->getColor());
|
| - style->setVisitedLinkBackgroundColor(
|
| - toAnimatableColor(value)->visitedLinkColor());
|
| - return;
|
| - case CSSPropertyBackgroundImage:
|
| - setOnFillLayers<CSSPropertyBackgroundImage>(
|
| - style->accessBackgroundLayers(), value, state);
|
| - return;
|
| - case CSSPropertyBackgroundPositionX:
|
| - setOnFillLayers<CSSPropertyBackgroundPositionX>(
|
| - style->accessBackgroundLayers(), value, state);
|
| - return;
|
| - case CSSPropertyBackgroundPositionY:
|
| - setOnFillLayers<CSSPropertyBackgroundPositionY>(
|
| - style->accessBackgroundLayers(), value, state);
|
| - return;
|
| - case CSSPropertyBackgroundSize:
|
| - setOnFillLayers<CSSPropertyBackgroundSize>(
|
| - style->accessBackgroundLayers(), value, state);
|
| - return;
|
| - case CSSPropertyBaselineShift:
|
| - style->accessSVGStyle().setBaselineShift(BS_LENGTH);
|
| - style->accessSVGStyle().setBaselineShiftValue(
|
| - animatableValueToLength(value, state));
|
| - return;
|
| - case CSSPropertyBorderBottomColor:
|
| - style->setBorderBottomColor(toAnimatableColor(value)->getColor());
|
| - style->setVisitedLinkBorderBottomColor(
|
| - toAnimatableColor(value)->visitedLinkColor());
|
| - return;
|
| - case CSSPropertyBorderBottomLeftRadius:
|
| - style->setBorderBottomLeftRadius(
|
| - animatableValueToLengthSize(value, state, ValueRangeNonNegative));
|
| - return;
|
| - case CSSPropertyBorderBottomRightRadius:
|
| - style->setBorderBottomRightRadius(
|
| - animatableValueToLengthSize(value, state, ValueRangeNonNegative));
|
| - return;
|
| - case CSSPropertyBorderBottomWidth:
|
| - style->setBorderBottomWidth(animatableLineWidth(value, state));
|
| - return;
|
| - case CSSPropertyBorderImageOutset:
|
| - style->setBorderImageOutset(
|
| - animatableValueToBorderImageLengthBox(value, state));
|
| - return;
|
| - case CSSPropertyBorderImageSlice:
|
| - style->setBorderImageSlices(
|
| - animatableValueToLengthBox(toAnimatableLengthBoxAndBool(value)->box(),
|
| - state, ValueRangeNonNegative));
|
| - style->setBorderImageSlicesFill(
|
| - toAnimatableLengthBoxAndBool(value)->flag());
|
| - return;
|
| - case CSSPropertyBorderImageSource:
|
| - style->setBorderImageSource(
|
| - state.styleImage(property, *toAnimatableImage(value)->toCSSValue()));
|
| - return;
|
| - case CSSPropertyBorderImageWidth:
|
| - style->setBorderImageWidth(
|
| - animatableValueToBorderImageLengthBox(value, state));
|
| - return;
|
| - case CSSPropertyBorderLeftColor:
|
| - style->setBorderLeftColor(toAnimatableColor(value)->getColor());
|
| - style->setVisitedLinkBorderLeftColor(
|
| - toAnimatableColor(value)->visitedLinkColor());
|
| - return;
|
| - case CSSPropertyBorderLeftWidth:
|
| - style->setBorderLeftWidth(animatableLineWidth(value, state));
|
| - return;
|
| - case CSSPropertyBorderRightColor:
|
| - style->setBorderRightColor(toAnimatableColor(value)->getColor());
|
| - style->setVisitedLinkBorderRightColor(
|
| - toAnimatableColor(value)->visitedLinkColor());
|
| - return;
|
| - case CSSPropertyBorderRightWidth:
|
| - style->setBorderRightWidth(animatableLineWidth(value, state));
|
| - return;
|
| - case CSSPropertyBorderTopColor:
|
| - style->setBorderTopColor(toAnimatableColor(value)->getColor());
|
| - style->setVisitedLinkBorderTopColor(
|
| - toAnimatableColor(value)->visitedLinkColor());
|
| - return;
|
| - case CSSPropertyBorderTopLeftRadius:
|
| - style->setBorderTopLeftRadius(
|
| - animatableValueToLengthSize(value, state, ValueRangeNonNegative));
|
| - return;
|
| - case CSSPropertyBorderTopRightRadius:
|
| - style->setBorderTopRightRadius(
|
| - animatableValueToLengthSize(value, state, ValueRangeNonNegative));
|
| - return;
|
| - case CSSPropertyBorderTopWidth:
|
| - style->setBorderTopWidth(animatableLineWidth(value, state));
|
| - return;
|
| - case CSSPropertyBottom:
|
| - style->setBottom(animatableValueToLength(value, state));
|
| - return;
|
| - case CSSPropertyBoxShadow:
|
| - style->setBoxShadow(toAnimatableShadow(value)->getShadowList());
|
| - return;
|
| - case CSSPropertyCaretColor:
|
| - style->setCaretColor(toAnimatableColor(value)->getColor());
|
| - style->setVisitedLinkCaretColor(
|
| - toAnimatableColor(value)->visitedLinkColor());
|
| - return;
|
| - case CSSPropertyClip:
|
| - style->setClip(animatableValueToLengthBox(value, state));
|
| - return;
|
| - case CSSPropertyColor:
|
| - style->setColor(toAnimatableColor(value)->getColor());
|
| - style->setVisitedLinkColor(toAnimatableColor(value)->visitedLinkColor());
|
| - return;
|
| - case CSSPropertyFillOpacity:
|
| - style->setFillOpacity(
|
| - clampTo<float>(toAnimatableDouble(value)->toDouble(), 0, 1));
|
| - return;
|
| - case CSSPropertyFill: {
|
| - const AnimatableSVGPaint* svgPaint = toAnimatableSVGPaint(value);
|
| - style->accessSVGStyle().setFillPaint(svgPaint->paintType(),
|
| - svgPaint->getColor(),
|
| - svgPaint->uri(), true, false);
|
| - style->accessSVGStyle().setFillPaint(
|
| - svgPaint->visitedLinkPaintType(), svgPaint->visitedLinkColor(),
|
| - svgPaint->visitedLinkURI(), false, true);
|
| - }
|
| - return;
|
| - case CSSPropertyFlexGrow:
|
| - style->setFlexGrow(
|
| - clampTo<float>(toAnimatableDouble(value)->toDouble(), 0));
|
| - return;
|
| - case CSSPropertyFlexShrink:
|
| - style->setFlexShrink(
|
| - clampTo<float>(toAnimatableDouble(value)->toDouble(), 0));
|
| - return;
|
| - case CSSPropertyFlexBasis:
|
| - style->setFlexBasis(
|
| - animatableValueToLength(value, state, ValueRangeNonNegative));
|
| - return;
|
| - case CSSPropertyFloodColor:
|
| - style->setFloodColor(toAnimatableColor(value)->getColor());
|
| - return;
|
| - case CSSPropertyFloodOpacity:
|
| - style->setFloodOpacity(
|
| - clampTo<float>(toAnimatableDouble(value)->toDouble(), 0, 1));
|
| - return;
|
| - case CSSPropertyFontSize:
|
| - state.fontBuilder().setSize(animatableValueToFontSize(value));
|
| - return;
|
| - case CSSPropertyFontSizeAdjust:
|
| - state.fontBuilder().setSizeAdjust(
|
| - clampTo<float>(toAnimatableDouble(value)->toDouble(), 0));
|
| - return;
|
| - case CSSPropertyFontStretch:
|
| - state.fontBuilder().setStretch(animatableValueToFontStretch(value));
|
| - return;
|
| - case CSSPropertyFontWeight:
|
| - state.fontBuilder().setWeight(animatableValueToFontWeight(value));
|
| - return;
|
| - case CSSPropertyHeight:
|
| - style->setHeight(
|
| - animatableValueToLength(value, state, ValueRangeNonNegative));
|
| - return;
|
| - case CSSPropertyLeft:
|
| - style->setLeft(animatableValueToLength(value, state));
|
| - return;
|
| - case CSSPropertyLightingColor:
|
| - style->setLightingColor(toAnimatableColor(value)->getColor());
|
| - return;
|
| - case CSSPropertyLineHeight:
|
| - if (value->isLength())
|
| - style->setLineHeight(
|
| - animatableValueToLength(value, state, ValueRangeNonNegative));
|
| - else
|
| - style->setLineHeight(Length(
|
| - clampTo<float>(toAnimatableDouble(value)->toDouble(), 0), Percent));
|
| - return;
|
| - case CSSPropertyListStyleImage:
|
| - style->setListStyleImage(
|
| - state.styleImage(property, *toAnimatableImage(value)->toCSSValue()));
|
| - return;
|
| - case CSSPropertyLetterSpacing:
|
| - style->setLetterSpacing(
|
| - clampTo<float>(animatableValueToPixels(value, state)));
|
| - return;
|
| - case CSSPropertyMarginBottom:
|
| - style->setMarginBottom(animatableValueToLength(value, state));
|
| - return;
|
| - case CSSPropertyMarginLeft:
|
| - style->setMarginLeft(animatableValueToLength(value, state));
|
| - return;
|
| - case CSSPropertyMarginRight:
|
| - style->setMarginRight(animatableValueToLength(value, state));
|
| - return;
|
| - case CSSPropertyMarginTop:
|
| - style->setMarginTop(animatableValueToLength(value, state));
|
| - return;
|
| - case CSSPropertyMaxHeight:
|
| - style->setMaxHeight(
|
| - animatableValueToLength(value, state, ValueRangeNonNegative));
|
| - return;
|
| - case CSSPropertyMaxWidth:
|
| - style->setMaxWidth(
|
| - animatableValueToLength(value, state, ValueRangeNonNegative));
|
| - return;
|
| - case CSSPropertyMinHeight:
|
| - style->setMinHeight(
|
| - animatableValueToLength(value, state, ValueRangeNonNegative));
|
| - return;
|
| - case CSSPropertyMinWidth:
|
| - style->setMinWidth(
|
| - animatableValueToLength(value, state, ValueRangeNonNegative));
|
| - return;
|
| - case CSSPropertyObjectPosition:
|
| - style->setObjectPosition(animatableValueToLengthPoint(value, state));
|
| - return;
|
| case CSSPropertyOpacity:
|
| // Avoiding a value of 1 forces a layer to be created.
|
| - style->setOpacity(clampTo<float>(toAnimatableDouble(value)->toDouble(), 0,
|
| - nextafterf(1, 0)));
|
| - return;
|
| - case CSSPropertyOrder:
|
| - style->setOrder(
|
| - clampTo<int>(round(toAnimatableDouble(value)->toDouble())));
|
| - return;
|
| - case CSSPropertyOrphans:
|
| - style->setOrphans(
|
| - clampTo<short>(round(toAnimatableDouble(value)->toDouble()), 1));
|
| - return;
|
| - case CSSPropertyOutlineColor:
|
| - style->setOutlineColor(toAnimatableColor(value)->getColor());
|
| - style->setVisitedLinkOutlineColor(
|
| - toAnimatableColor(value)->visitedLinkColor());
|
| - return;
|
| - case CSSPropertyOutlineOffset:
|
| - style->setOutlineOffset(
|
| - roundedClampTo<int>(animatableValueToPixels(value, state)));
|
| - return;
|
| - case CSSPropertyOutlineWidth:
|
| - style->setOutlineWidth(
|
| - animatableLineWidthClamp<unsigned short>(value, state));
|
| - return;
|
| - case CSSPropertyPaddingBottom:
|
| - style->setPaddingBottom(
|
| - animatableValueToLength(value, state, ValueRangeNonNegative));
|
| - return;
|
| - case CSSPropertyPaddingLeft:
|
| - style->setPaddingLeft(
|
| - animatableValueToLength(value, state, ValueRangeNonNegative));
|
| - return;
|
| - case CSSPropertyPaddingRight:
|
| - style->setPaddingRight(
|
| - animatableValueToLength(value, state, ValueRangeNonNegative));
|
| - return;
|
| - case CSSPropertyPaddingTop:
|
| - style->setPaddingTop(
|
| - animatableValueToLength(value, state, ValueRangeNonNegative));
|
| - return;
|
| - case CSSPropertyRight:
|
| - style->setRight(animatableValueToLength(value, state));
|
| - return;
|
| - case CSSPropertyStrokeWidth:
|
| - style->setStrokeWidth(
|
| - animatableValueToUnzoomedLength(value, state, ValueRangeNonNegative));
|
| - return;
|
| - case CSSPropertyStopColor:
|
| - style->setStopColor(toAnimatableColor(value)->getColor());
|
| - return;
|
| - case CSSPropertyStopOpacity:
|
| - style->setStopOpacity(
|
| - clampTo<float>(toAnimatableDouble(value)->toDouble(), 0, 1));
|
| - return;
|
| - case CSSPropertyStrokeDasharray:
|
| - style->setStrokeDashArray(
|
| - toAnimatableStrokeDasharrayList(value)->toSVGDashArray(
|
| - style->effectiveZoom()));
|
| - return;
|
| - case CSSPropertyStrokeDashoffset:
|
| - style->setStrokeDashOffset(animatableValueToLength(value, state));
|
| - return;
|
| - case CSSPropertyStrokeMiterlimit:
|
| - style->setStrokeMiterLimit(
|
| - clampTo<float>(toAnimatableDouble(value)->toDouble(), 1));
|
| - return;
|
| - case CSSPropertyStrokeOpacity:
|
| - style->setStrokeOpacity(
|
| - clampTo<float>(toAnimatableDouble(value)->toDouble(), 0, 1));
|
| - return;
|
| - case CSSPropertyStroke: {
|
| - const AnimatableSVGPaint* svgPaint = toAnimatableSVGPaint(value);
|
| - style->accessSVGStyle().setStrokePaint(svgPaint->paintType(),
|
| - svgPaint->getColor(),
|
| - svgPaint->uri(), true, false);
|
| - style->accessSVGStyle().setStrokePaint(
|
| - svgPaint->visitedLinkPaintType(), svgPaint->visitedLinkColor(),
|
| - svgPaint->visitedLinkURI(), false, true);
|
| - }
|
| - return;
|
| - case CSSPropertyTextDecorationColor:
|
| - style->setTextDecorationColor(toAnimatableColor(value)->getColor());
|
| - style->setVisitedLinkTextDecorationColor(
|
| - toAnimatableColor(value)->visitedLinkColor());
|
| - return;
|
| - case CSSPropertyTextIndent:
|
| - style->setTextIndent(animatableValueToLength(value, state));
|
| - return;
|
| - case CSSPropertyTextShadow:
|
| - style->setTextShadow(toAnimatableShadow(value)->getShadowList());
|
| - return;
|
| - case CSSPropertyTop:
|
| - style->setTop(animatableValueToLength(value, state));
|
| - return;
|
| - case CSSPropertyWebkitBorderHorizontalSpacing:
|
| - style->setHorizontalBorderSpacing(roundedClampTo<unsigned short>(
|
| - animatableValueToPixels(value, state)));
|
| - return;
|
| - case CSSPropertyWebkitBorderVerticalSpacing:
|
| - style->setVerticalBorderSpacing(roundedClampTo<unsigned short>(
|
| - animatableValueToPixels(value, state)));
|
| - return;
|
| - case CSSPropertyClipPath:
|
| - style->setClipPath(
|
| - toAnimatableClipPathOperation(value)->getClipPathOperation());
|
| - return;
|
| - case CSSPropertyColumnCount:
|
| - style->setColumnCount(clampTo<unsigned short>(
|
| - round(toAnimatableDouble(value)->toDouble()), 1));
|
| - return;
|
| - case CSSPropertyColumnGap:
|
| - style->setColumnGap(clampTo(animatableValueToPixels(value, state), 0));
|
| - return;
|
| - case CSSPropertyColumnRuleColor:
|
| - style->setColumnRuleColor(toAnimatableColor(value)->getColor());
|
| - style->setVisitedLinkColumnRuleColor(
|
| - toAnimatableColor(value)->visitedLinkColor());
|
| - return;
|
| - case CSSPropertyColumnWidth:
|
| - style->setColumnWidth(clampTo(animatableValueToPixels(value, state),
|
| - std::numeric_limits<float>::epsilon()));
|
| - return;
|
| - case CSSPropertyColumnRuleWidth:
|
| - style->setColumnRuleWidth(
|
| - animatableLineWidthClamp<unsigned short>(value, state));
|
| - return;
|
| - case CSSPropertyFilter:
|
| - style->setFilter(toAnimatableFilterOperations(value)->operations());
|
| - return;
|
| - case CSSPropertyBackdropFilter:
|
| - style->setBackdropFilter(
|
| - toAnimatableFilterOperations(value)->operations());
|
| - return;
|
| - case CSSPropertyWebkitMaskBoxImageOutset:
|
| - style->setMaskBoxImageOutset(
|
| - animatableValueToBorderImageLengthBox(value, state));
|
| - return;
|
| - case CSSPropertyWebkitMaskBoxImageSlice:
|
| - style->setMaskBoxImageSlices(
|
| - animatableValueToLengthBox(toAnimatableLengthBoxAndBool(value)->box(),
|
| - state, ValueRangeNonNegative));
|
| - style->setMaskBoxImageSlicesFill(
|
| - toAnimatableLengthBoxAndBool(value)->flag());
|
| - return;
|
| - case CSSPropertyWebkitMaskBoxImageSource:
|
| - style->setMaskBoxImageSource(
|
| - state.styleImage(property, *toAnimatableImage(value)->toCSSValue()));
|
| - return;
|
| - case CSSPropertyWebkitMaskBoxImageWidth:
|
| - style->setMaskBoxImageWidth(
|
| - animatableValueToBorderImageLengthBox(value, state));
|
| - return;
|
| - case CSSPropertyWebkitMaskImage:
|
| - setOnFillLayers<CSSPropertyWebkitMaskImage>(style->accessMaskLayers(),
|
| - value, state);
|
| - return;
|
| - case CSSPropertyWebkitMaskPositionX:
|
| - setOnFillLayers<CSSPropertyWebkitMaskPositionX>(style->accessMaskLayers(),
|
| - value, state);
|
| - return;
|
| - case CSSPropertyWebkitMaskPositionY:
|
| - setOnFillLayers<CSSPropertyWebkitMaskPositionY>(style->accessMaskLayers(),
|
| - value, state);
|
| - return;
|
| - case CSSPropertyWebkitMaskSize:
|
| - setOnFillLayers<CSSPropertyWebkitMaskSize>(style->accessMaskLayers(),
|
| - value, state);
|
| - return;
|
| - case CSSPropertyPerspective:
|
| - style->setPerspective(
|
| - value->isLength()
|
| - ? clampTo<float>(animatableValueToPixels(value, state))
|
| - : 0);
|
| - return;
|
| - case CSSPropertyPerspectiveOrigin:
|
| - style->setPerspectiveOrigin(animatableValueToLengthPoint(value, state));
|
| - return;
|
| - case CSSPropertyShapeOutside:
|
| - style->setShapeOutside(toAnimatableShapeValue(value)->getShapeValue());
|
| - return;
|
| - case CSSPropertyShapeMargin:
|
| - style->setShapeMargin(
|
| - animatableValueToLength(value, state, ValueRangeNonNegative));
|
| - return;
|
| - case CSSPropertyShapeImageThreshold:
|
| - style->setShapeImageThreshold(
|
| - clampTo<float>(toAnimatableDouble(value)->toDouble(), 0, 1));
|
| - return;
|
| - case CSSPropertyWebkitTextStrokeColor:
|
| - style->setTextStrokeColor(toAnimatableColor(value)->getColor());
|
| - style->setVisitedLinkTextStrokeColor(
|
| - toAnimatableColor(value)->visitedLinkColor());
|
| + style.setOpacity(clampTo<float>(toAnimatableDouble(value)->toDouble(), 0,
|
| + nextafterf(1, 0)));
|
| return;
|
| case CSSPropertyTransform: {
|
| const TransformOperations& operations =
|
| @@ -745,129 +80,22 @@ void AnimatedStyleBuilder::applyProperty(CSSPropertyID property,
|
| // FIXME: This normalization (handling of 'none') should be performed at
|
| // input in AnimatableValueFactory.
|
| if (operations.size() == 0) {
|
| - style->setTransform(TransformOperations(true));
|
| - return;
|
| - }
|
| - double sourceZoom = toAnimatableTransform(value)->zoom();
|
| - double destinationZoom = style->effectiveZoom();
|
| - style->setTransform(sourceZoom == destinationZoom
|
| - ? operations
|
| - : operations.zoom(destinationZoom / sourceZoom));
|
| - return;
|
| - }
|
| - case CSSPropertyTranslate: {
|
| - TranslateTransformOperation* translate =
|
| - toTranslateTransformOperation(animatableValueToTransformOperation(
|
| - value, TransformOperation::Translate3D));
|
| - if (!translate) {
|
| - style->setTranslate(nullptr);
|
| + style.setTransform(TransformOperations(true));
|
| return;
|
| }
|
| double sourceZoom = toAnimatableTransform(value)->zoom();
|
| - double destinationZoom = style->effectiveZoom();
|
| - style->setTranslate(
|
| - sourceZoom == destinationZoom
|
| - ? translate
|
| - : translate->zoomTranslate(destinationZoom / sourceZoom));
|
| + double destinationZoom = style.effectiveZoom();
|
| + style.setTransform(sourceZoom == destinationZoom
|
| + ? operations
|
| + : operations.zoom(destinationZoom / sourceZoom));
|
| return;
|
| }
|
| - case CSSPropertyRotate: {
|
| - style->setRotate(
|
| - toRotateTransformOperation(animatableValueToTransformOperation(
|
| - value, TransformOperation::Rotate3D)));
|
| - return;
|
| - }
|
| - case CSSPropertyScale: {
|
| - style->setScale(
|
| - toScaleTransformOperation(animatableValueToTransformOperation(
|
| - value, TransformOperation::Scale3D)));
|
| - return;
|
| - }
|
| - case CSSPropertyTransformOrigin:
|
| - style->setTransformOrigin(animatableValueToTransformOrigin(value, state));
|
| - return;
|
| - case CSSPropertyOffsetAnchor:
|
| - style->setOffsetAnchor(animatableValueToLengthPoint(value, state));
|
| - return;
|
| - case CSSPropertyOffsetDistance:
|
| - style->setOffsetDistance(animatableValueToLength(value, state));
|
| - return;
|
| - case CSSPropertyOffsetPosition:
|
| - style->setOffsetPosition(animatableValueToLengthPoint(value, state));
|
| - return;
|
| - case CSSPropertyOffsetRotate:
|
| - case CSSPropertyOffsetRotation:
|
| - style->setOffsetRotation(StyleOffsetRotation(
|
| - toAnimatableDoubleAndBool(value)->toDouble(),
|
| - toAnimatableDoubleAndBool(value)->flag() ? OffsetRotationAuto
|
| - : OffsetRotationFixed));
|
| - return;
|
| - case CSSPropertyWebkitPerspectiveOriginX:
|
| - style->setPerspectiveOriginX(animatableValueToLength(value, state));
|
| - return;
|
| - case CSSPropertyWebkitPerspectiveOriginY:
|
| - style->setPerspectiveOriginY(animatableValueToLength(value, state));
|
| - return;
|
| - case CSSPropertyWebkitTransformOriginX:
|
| - style->setTransformOriginX(animatableValueToLength(value, state));
|
| - return;
|
| - case CSSPropertyWebkitTransformOriginY:
|
| - style->setTransformOriginY(animatableValueToLength(value, state));
|
| - return;
|
| - case CSSPropertyWebkitTransformOriginZ:
|
| - style->setTransformOriginZ(animatableValueToPixels(value, state));
|
| - return;
|
| - case CSSPropertyWidows:
|
| - style->setWidows(
|
| - clampTo<short>(round(toAnimatableDouble(value)->toDouble()), 1));
|
| - return;
|
| - case CSSPropertyWidth:
|
| - style->setWidth(
|
| - animatableValueToLength(value, state, ValueRangeNonNegative));
|
| - return;
|
| - case CSSPropertyWordSpacing:
|
| - style->setWordSpacing(
|
| - clampTo<float>(animatableValueToPixels(value, state)));
|
| - return;
|
| - case CSSPropertyVerticalAlign:
|
| - style->setVerticalAlignLength(animatableValueToLength(value, state));
|
| - return;
|
| - case CSSPropertyVisibility:
|
| - style->setVisibility(toAnimatableVisibility(value)->visibility());
|
| - return;
|
| - case CSSPropertyZIndex:
|
| - style->setZIndex(
|
| - clampTo<int>(round(toAnimatableDouble(value)->toDouble())));
|
| - return;
|
| - case CSSPropertyD:
|
| - style->setD(toAnimatablePath(value)->path());
|
| - return;
|
| - case CSSPropertyCx:
|
| - style->setCx(animatableValueToLength(value, state));
|
| - return;
|
| - case CSSPropertyCy:
|
| - style->setCy(animatableValueToLength(value, state));
|
| - return;
|
| - case CSSPropertyX:
|
| - style->setX(animatableValueToLength(value, state));
|
| - return;
|
| - case CSSPropertyY:
|
| - style->setY(animatableValueToLength(value, state));
|
| - return;
|
| - case CSSPropertyR:
|
| - style->setR(animatableValueToLength(value, state, ValueRangeNonNegative));
|
| - return;
|
| - case CSSPropertyRx:
|
| - style->setRx(
|
| - animatableValueToLength(value, state, ValueRangeNonNegative));
|
| - return;
|
| - case CSSPropertyRy:
|
| - style->setRy(
|
| - animatableValueToLength(value, state, ValueRangeNonNegative));
|
| + case CSSPropertyFilter:
|
| + style.setFilter(toAnimatableFilterOperations(value)->operations());
|
| return;
|
|
|
| default:
|
| - ASSERT_NOT_REACHED();
|
| + NOTREACHED();
|
| }
|
| }
|
|
|
|
|