| Index: third_party/WebKit/Source/core/animation/ColorInterpolationType.cpp
|
| diff --git a/third_party/WebKit/Source/core/animation/ColorInterpolationType.cpp b/third_party/WebKit/Source/core/animation/ColorInterpolationType.cpp
|
| deleted file mode 100644
|
| index 7c863c28b9b8dfb96001f31e817edc985538a3cf..0000000000000000000000000000000000000000
|
| --- a/third_party/WebKit/Source/core/animation/ColorInterpolationType.cpp
|
| +++ /dev/null
|
| @@ -1,231 +0,0 @@
|
| -// Copyright 2015 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "config.h"
|
| -#include "core/animation/ColorInterpolationType.h"
|
| -
|
| -#include "core/animation/ColorPropertyFunctions.h"
|
| -#include "core/css/parser/CSSPropertyParser.h"
|
| -#include "core/css/resolver/StyleResolverState.h"
|
| -#include "core/layout/LayoutTheme.h"
|
| -
|
| -namespace blink {
|
| -
|
| -enum InterpolableColorIndex {
|
| - Red,
|
| - Green,
|
| - Blue,
|
| - Alpha,
|
| - Currentcolor,
|
| - WebkitActivelink,
|
| - WebkitLink,
|
| - WebkitText,
|
| - InterpolableColorIndexCount,
|
| -};
|
| -
|
| -static PassOwnPtr<InterpolableValue> createInterpolableColorForIndex(InterpolableColorIndex index)
|
| -{
|
| - ASSERT(index < InterpolableColorIndexCount);
|
| - OwnPtr<InterpolableList> list = InterpolableList::create(InterpolableColorIndexCount);
|
| - for (int i = 0; i < InterpolableColorIndexCount; i++)
|
| - list->set(i, InterpolableNumber::create(i == index));
|
| - return list.release();
|
| -}
|
| -
|
| -PassOwnPtr<InterpolableValue> ColorInterpolationType::createInterpolableColor(const Color& color)
|
| -{
|
| - OwnPtr<InterpolableList> list = InterpolableList::create(InterpolableColorIndexCount);
|
| - list->set(Red, InterpolableNumber::create(color.red() * color.alpha()));
|
| - list->set(Green, InterpolableNumber::create(color.green() * color.alpha()));
|
| - list->set(Blue, InterpolableNumber::create(color.blue() * color.alpha()));
|
| - list->set(Alpha, InterpolableNumber::create(color.alpha()));
|
| - list->set(Currentcolor, InterpolableNumber::create(0));
|
| - list->set(WebkitActivelink, InterpolableNumber::create(0));
|
| - list->set(WebkitLink, InterpolableNumber::create(0));
|
| - list->set(WebkitText, InterpolableNumber::create(0));
|
| - return list.release();
|
| -}
|
| -
|
| -PassOwnPtr<InterpolableValue> ColorInterpolationType::createInterpolableColor(CSSValueID keyword)
|
| -{
|
| - switch (keyword) {
|
| - case CSSValueCurrentcolor:
|
| - return createInterpolableColorForIndex(Currentcolor);
|
| - case CSSValueWebkitActivelink:
|
| - return createInterpolableColorForIndex(WebkitActivelink);
|
| - case CSSValueWebkitLink:
|
| - return createInterpolableColorForIndex(WebkitLink);
|
| - case CSSValueWebkitText:
|
| - return createInterpolableColorForIndex(WebkitText);
|
| - case CSSValueWebkitFocusRingColor:
|
| - return createInterpolableColor(LayoutTheme::theme().focusRingColor());
|
| - default:
|
| - ASSERT(CSSPropertyParser::isColorKeyword(keyword));
|
| - return createInterpolableColor(StyleColor::colorFromKeyword(keyword));
|
| - }
|
| -}
|
| -
|
| -PassOwnPtr<InterpolableValue> ColorInterpolationType::createInterpolableColor(const StyleColor& color)
|
| -{
|
| - if (color.isCurrentColor())
|
| - return createInterpolableColorForIndex(Currentcolor);
|
| - return createInterpolableColor(color.color());
|
| -}
|
| -
|
| -PassOwnPtr<InterpolableValue> ColorInterpolationType::maybeCreateInterpolableColor(const CSSValue& value)
|
| -{
|
| - if (value.isColorValue())
|
| - return createInterpolableColor(toCSSColorValue(value).value());
|
| - if (!value.isPrimitiveValue())
|
| - return nullptr;
|
| - const CSSPrimitiveValue& primitive = toCSSPrimitiveValue(value);
|
| - if (!primitive.isValueID())
|
| - return nullptr;
|
| - if (!CSSPropertyParser::isColorKeyword(primitive.getValueID()))
|
| - return nullptr;
|
| - return createInterpolableColor(primitive.getValueID());
|
| -}
|
| -
|
| -static void addPremultipliedColor(double& red, double& green, double& blue, double& alpha, double fraction, const Color& color)
|
| -{
|
| - double colorAlpha = color.alpha();
|
| - red += fraction * color.red() * colorAlpha;
|
| - green += fraction * color.green() * colorAlpha;
|
| - blue += fraction * color.blue() * colorAlpha;
|
| - alpha += fraction * colorAlpha;
|
| -}
|
| -
|
| -Color ColorInterpolationType::resolveInterpolableColor(const InterpolableValue& interpolableColor, const StyleResolverState& state, bool isVisited, bool isTextDecoration)
|
| -{
|
| - const InterpolableList& list = toInterpolableList(interpolableColor);
|
| - ASSERT(list.length() == InterpolableColorIndexCount);
|
| -
|
| - double red = toInterpolableNumber(list.get(Red))->value();
|
| - double green = toInterpolableNumber(list.get(Green))->value();
|
| - double blue = toInterpolableNumber(list.get(Blue))->value();
|
| - double alpha = toInterpolableNumber(list.get(Alpha))->value();
|
| -
|
| - if (double currentcolorFraction = toInterpolableNumber(list.get(Currentcolor))->value()) {
|
| - auto currentColorGetter = isVisited ? ColorPropertyFunctions::getVisitedColor : ColorPropertyFunctions::getUnvisitedColor;
|
| - StyleColor currentStyleColor = StyleColor::currentColor();
|
| - if (isTextDecoration)
|
| - currentStyleColor = currentColorGetter(CSSPropertyWebkitTextFillColor, *state.style());
|
| - if (currentStyleColor.isCurrentColor())
|
| - currentStyleColor = currentColorGetter(CSSPropertyColor, *state.style());
|
| - addPremultipliedColor(red, green, blue, alpha, currentcolorFraction, currentStyleColor.color());
|
| - }
|
| - const TextLinkColors& colors = state.document().textLinkColors();
|
| - if (double webkitActivelinkFraction = toInterpolableNumber(list.get(WebkitActivelink))->value())
|
| - addPremultipliedColor(red, green, blue, alpha, webkitActivelinkFraction, colors.activeLinkColor());
|
| - if (double webkitLinkFraction = toInterpolableNumber(list.get(WebkitLink))->value())
|
| - addPremultipliedColor(red, green, blue, alpha, webkitLinkFraction, isVisited ? colors.visitedLinkColor() : colors.linkColor());
|
| - if (double webkitTextFraction = toInterpolableNumber(list.get(WebkitText))->value())
|
| - addPremultipliedColor(red, green, blue, alpha, webkitTextFraction, colors.textColor());
|
| -
|
| - alpha = clampTo<double>(alpha, 0, 255);
|
| - if (alpha == 0)
|
| - return Color::transparent;
|
| -
|
| - return makeRGBA(
|
| - round(red / alpha),
|
| - round(green / alpha),
|
| - round(blue / alpha),
|
| - round(alpha));
|
| -}
|
| -
|
| -class ParentColorChecker : public InterpolationType::ConversionChecker {
|
| -public:
|
| - static PassOwnPtr<ParentColorChecker> create(const InterpolationType& type, CSSPropertyID property, const StyleColor& color)
|
| - {
|
| - return adoptPtr(new ParentColorChecker(type, property, color));
|
| - }
|
| -
|
| -private:
|
| - ParentColorChecker(const InterpolationType& type, CSSPropertyID property, const StyleColor& color)
|
| - : ConversionChecker(type)
|
| - , m_property(property)
|
| - , m_color(color)
|
| - { }
|
| -
|
| - bool isValid(const InterpolationEnvironment& environment, const UnderlyingValue&) const final
|
| - {
|
| - return m_color == ColorPropertyFunctions::getUnvisitedColor(m_property, *environment.state().parentStyle());
|
| - }
|
| -
|
| - DEFINE_INLINE_VIRTUAL_TRACE()
|
| - {
|
| - ConversionChecker::trace(visitor);
|
| - }
|
| -
|
| - const CSSPropertyID m_property;
|
| - const StyleColor m_color;
|
| -};
|
| -
|
| -PassOwnPtr<InterpolationValue> ColorInterpolationType::maybeConvertNeutral(const UnderlyingValue&, ConversionCheckers&) const
|
| -{
|
| - return convertStyleColorPair(StyleColor(Color::transparent), StyleColor(Color::transparent));
|
| -}
|
| -
|
| -PassOwnPtr<InterpolationValue> ColorInterpolationType::maybeConvertInitial() const
|
| -{
|
| - const StyleColor initialColor = ColorPropertyFunctions::getInitialColor(cssProperty());
|
| - return convertStyleColorPair(initialColor, initialColor);
|
| -}
|
| -
|
| -PassOwnPtr<InterpolationValue> ColorInterpolationType::maybeConvertInherit(const StyleResolverState* state, ConversionCheckers& conversionCheckers) const
|
| -{
|
| - if (!state || !state->parentStyle())
|
| - return nullptr;
|
| - // Visited color can never explicitly inherit from parent visited color so only use the unvisited color.
|
| - const StyleColor inheritedColor = ColorPropertyFunctions::getUnvisitedColor(cssProperty(), *state->parentStyle());
|
| - conversionCheckers.append(ParentColorChecker::create(*this, cssProperty(), inheritedColor));
|
| - return convertStyleColorPair(inheritedColor, inheritedColor);
|
| -}
|
| -
|
| -enum InterpolableColorPairIndex {
|
| - Unvisited,
|
| - Visited,
|
| - InterpolableColorPairIndexCount,
|
| -};
|
| -
|
| -PassOwnPtr<InterpolationValue> ColorInterpolationType::maybeConvertValue(const CSSValue& value, const StyleResolverState* state, ConversionCheckers& conversionCheckers) const
|
| -{
|
| - if (cssProperty() == CSSPropertyColor && value.isPrimitiveValue() && toCSSPrimitiveValue(value).getValueID() == CSSValueCurrentcolor)
|
| - return maybeConvertInherit(state, conversionCheckers);
|
| -
|
| - OwnPtr<InterpolableValue> interpolableColor = maybeCreateInterpolableColor(value);
|
| - if (!interpolableColor)
|
| - return nullptr;
|
| - OwnPtr<InterpolableList> colorPair = InterpolableList::create(InterpolableColorPairIndexCount);
|
| - colorPair->set(Unvisited, interpolableColor->clone());
|
| - colorPair->set(Visited, interpolableColor.release());
|
| - return InterpolationValue::create(*this, colorPair.release());
|
| -}
|
| -
|
| -PassOwnPtr<InterpolationValue> ColorInterpolationType::convertStyleColorPair(const StyleColor& unvisitedColor, const StyleColor& visitedColor) const
|
| -{
|
| - OwnPtr<InterpolableList> colorPair = InterpolableList::create(InterpolableColorPairIndexCount);
|
| - colorPair->set(Unvisited, createInterpolableColor(unvisitedColor));
|
| - colorPair->set(Visited, createInterpolableColor(visitedColor));
|
| - return InterpolationValue::create(*this, colorPair.release());
|
| -}
|
| -
|
| -PassOwnPtr<InterpolationValue> ColorInterpolationType::maybeConvertUnderlyingValue(const InterpolationEnvironment& environment) const
|
| -{
|
| - return convertStyleColorPair(
|
| - ColorPropertyFunctions::getUnvisitedColor(cssProperty(), *environment.state().style()),
|
| - ColorPropertyFunctions::getVisitedColor(cssProperty(), *environment.state().style()));
|
| -}
|
| -
|
| -void ColorInterpolationType::apply(const InterpolableValue& interpolableValue, const NonInterpolableValue*, InterpolationEnvironment& environment) const
|
| -{
|
| - const InterpolableList& colorPair = toInterpolableList(interpolableValue);
|
| - ASSERT(colorPair.length() == InterpolableColorPairIndexCount);
|
| - ColorPropertyFunctions::setUnvisitedColor(cssProperty(), *environment.state().style(),
|
| - resolveInterpolableColor(*colorPair.get(Unvisited), environment.state(), false, cssProperty() == CSSPropertyTextDecorationColor));
|
| - ColorPropertyFunctions::setVisitedColor(cssProperty(), *environment.state().style(),
|
| - resolveInterpolableColor(*colorPair.get(Visited), environment.state(), true, cssProperty() == CSSPropertyTextDecorationColor));
|
| -}
|
| -
|
| -} // namespace blink
|
|
|