1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef DefaultStyleInterpolation_h
6#define DefaultStyleInterpolation_h
7
8#include "core/animation/StyleInterpolation.h"
9#include "core/css/resolver/StyleBuilder.h"
10
11namespace blink {
12
13class DefaultStyleInterpolation : public StyleInterpolation {
14public:
15    static PassRefPtrWillBeRawPtr<DefaultStyleInterpolation> create(CSSValue* start, CSSValue* end, CSSPropertyID id)
16    {
17        return adoptRefWillBeNoop(new DefaultStyleInterpolation(start, end, id));
18    }
19
20    virtual void apply(StyleResolverState& state) const
21    {
22        StyleBuilder::applyProperty(m_id, state, toInterpolableBool(m_cachedValue.get())->value() ? m_endCSSValue.get() : m_startCSSValue.get());
23    }
24
25    virtual void trace(Visitor* visitor) OVERRIDE
26    {
27        StyleInterpolation::trace(visitor);
28        visitor->trace(m_startCSSValue);
29        visitor->trace(m_endCSSValue);
30    }
31
32private:
33    DefaultStyleInterpolation(CSSValue* start, CSSValue* end, CSSPropertyID id)
34        : StyleInterpolation(InterpolableBool::create(false), InterpolableBool::create(true), id)
35        , m_startCSSValue(start)
36        , m_endCSSValue(end)
37    {
38    }
39
40    RefPtrWillBeMember<CSSValue> m_startCSSValue;
41    RefPtrWillBeMember<CSSValue> m_endCSSValue;
42};
43
44}
45
46#endif
47