| Index: third_party/WebKit/Source/core/animation/CSSTransformInterpolationType.cpp
|
| diff --git a/third_party/WebKit/Source/core/animation/CSSTransformInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSTransformInterpolationType.cpp
|
| index 12ec3a503119ffdbc25d7b6fa82de8fa1d00fc3d..33019b66467eeef965980b9eb273c382ced87ff0 100644
|
| --- a/third_party/WebKit/Source/core/animation/CSSTransformInterpolationType.cpp
|
| +++ b/third_party/WebKit/Source/core/animation/CSSTransformInterpolationType.cpp
|
| @@ -27,10 +27,13 @@ class CSSTransformNonInterpolableValue : public NonInterpolableValue {
|
|
|
| static PassRefPtr<CSSTransformNonInterpolableValue> create(
|
| CSSTransformNonInterpolableValue&& start,
|
| - CSSTransformNonInterpolableValue&& end) {
|
| + double startFraction,
|
| + CSSTransformNonInterpolableValue&& end,
|
| + double endFraction) {
|
| return adoptRef(new CSSTransformNonInterpolableValue(
|
| - false, std::move(start.transform()), std::move(end.transform()),
|
| - start.isAdditive(), end.isAdditive()));
|
| + false, start.getInterpolatedTransform(startFraction),
|
| + end.getInterpolatedTransform(endFraction), start.isAdditive(),
|
| + end.isAdditive()));
|
| }
|
|
|
| PassRefPtr<CSSTransformNonInterpolableValue> composite(
|
| @@ -59,15 +62,15 @@ class CSSTransformNonInterpolableValue : public NonInterpolableValue {
|
| void setSingleAdditive() {
|
| DCHECK(m_isSingle);
|
| m_isStartAdditive = true;
|
| + m_isEndAdditive = true;
|
| }
|
|
|
| TransformOperations getInterpolatedTransform(double progress) const {
|
| - DCHECK(!m_isStartAdditive && !m_isEndAdditive);
|
| - DCHECK(!m_isSingle || progress == 0);
|
| if (progress == 0)
|
| return m_start;
|
| if (progress == 1)
|
| return m_end;
|
| + DCHECK(!isAdditive());
|
| return m_end.blend(m_start, progress);
|
| }
|
|
|
| @@ -89,13 +92,10 @@ class CSSTransformNonInterpolableValue : public NonInterpolableValue {
|
| DCHECK(m_isSingle);
|
| return m_start;
|
| }
|
| - TransformOperations& transform() {
|
| - DCHECK(m_isSingle);
|
| - return m_start;
|
| - }
|
| bool isAdditive() const {
|
| - DCHECK(m_isSingle);
|
| - return m_isStartAdditive;
|
| + bool result = m_isStartAdditive || m_isEndAdditive;
|
| + DCHECK(!result || m_isSingle);
|
| + return result;
|
| }
|
|
|
| Vector<RefPtr<TransformOperation>> concat(const TransformOperations& a,
|
| @@ -217,13 +217,16 @@ void CSSTransformInterpolationType::additiveKeyframeHook(
|
| PairwiseInterpolationValue CSSTransformInterpolationType::maybeMergeSingles(
|
| InterpolationValue&& start,
|
| InterpolationValue&& end) const {
|
| + double startFraction = toInterpolableNumber(*start.interpolableValue).value();
|
| + double endFraction = toInterpolableNumber(*end.interpolableValue).value();
|
| return PairwiseInterpolationValue(
|
| InterpolableNumber::create(0), InterpolableNumber::create(1),
|
| CSSTransformNonInterpolableValue::create(
|
| std::move(
|
| toCSSTransformNonInterpolableValue(*start.nonInterpolableValue)),
|
| - std::move(
|
| - toCSSTransformNonInterpolableValue(*end.nonInterpolableValue))));
|
| + startFraction, std::move(toCSSTransformNonInterpolableValue(
|
| + *end.nonInterpolableValue)),
|
| + endFraction));
|
| }
|
|
|
| InterpolationValue
|
|
|