blob: 4996158d7cdc8665d889500394e1af2be4222844 [file] [log] [blame]
// Copyright 2014 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/LengthPairStyleInterpolation.h"
#include "core/animation/LengthStyleInterpolation.h"
#include "core/css/Pair.h"
#include "core/css/resolver/StyleBuilder.h"
namespace blink {
bool LengthPairStyleInterpolation::canCreateFrom(const CSSValue& value)
{
return value.isPrimitiveValue() && toCSSPrimitiveValue(value).getPairValue();
}
PassOwnPtrWillBeRawPtr<InterpolableValue> LengthPairStyleInterpolation::lengthPairToInterpolableValue(const CSSValue& value)
{
OwnPtrWillBeRawPtr<InterpolableList> result = InterpolableList::create(2);
Pair* pair = toCSSPrimitiveValue(value).getPairValue();
ASSERT(pair);
result->set(0, LengthStyleInterpolation::toInterpolableValue(*pair->first()));
result->set(1, LengthStyleInterpolation::toInterpolableValue(*pair->second()));
return result.release();
}
PassRefPtrWillBeRawPtr<CSSValue> LengthPairStyleInterpolation::interpolableValueToLengthPair(InterpolableValue* value, InterpolationRange range)
{
InterpolableList* lengthPair = toInterpolableList(value);
RefPtrWillBeRawPtr<CSSPrimitiveValue> first = LengthStyleInterpolation::fromInterpolableValue(*lengthPair->get(0), range);
RefPtrWillBeRawPtr<CSSPrimitiveValue> second = LengthStyleInterpolation::fromInterpolableValue(*lengthPair->get(1), range);
RefPtrWillBeRawPtr<Pair> result = Pair::create(first, second, Pair::KeepIdenticalValues);
return CSSPrimitiveValue::create(result.release());
}
void LengthPairStyleInterpolation::apply(StyleResolverState& state) const
{
StyleBuilder::applyProperty(m_id, state, interpolableValueToLengthPair(m_cachedValue.get(), m_range).get());
}
} // namespace blink