1d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// found in the LICENSE file.
4d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
5d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#ifndef InterpolationEffect_h
6d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#define InterpolationEffect_h
7d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
8c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#include "core/animation/Interpolation.h"
9d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "platform/animation/TimingFunction.h"
10d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "wtf/PassOwnPtr.h"
11d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "wtf/RefCounted.h"
12d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
13c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
14d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
1507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochclass InterpolationEffect : public RefCountedWillBeGarbageCollected<InterpolationEffect> {
16d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)public:
1707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    static PassRefPtrWillBeRawPtr<InterpolationEffect> create() { return adoptRefWillBeNoop(new InterpolationEffect()); }
18d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
1907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    PassOwnPtrWillBeRawPtr<WillBeHeapVector<RefPtrWillBeMember<Interpolation> > > getActiveInterpolations(double fraction, double iterationDuration) const;
20d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
2107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    void addInterpolation(PassRefPtrWillBeRawPtr<Interpolation> interpolation, PassRefPtr<TimingFunction> easing, double start, double end, double applyFrom, double applyTo)
22d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    {
23d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        m_interpolations.append(InterpolationRecord::create(interpolation, easing, start, end, applyFrom, applyTo));
24d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    }
25d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
2607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    void trace(Visitor*);
2707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch
28d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)private:
29d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    InterpolationEffect()
3007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    {
3107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    }
32d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
3307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    class InterpolationRecord : public NoBaseWillBeGarbageCollectedFinalized<InterpolationRecord> {
34d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    public:
3507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        RefPtrWillBeMember<Interpolation> m_interpolation;
36d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        RefPtr<TimingFunction> m_easing;
37d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        double m_start;
38d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        double m_end;
39d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        double m_applyFrom;
40d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        double m_applyTo;
4107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch
4207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        static PassOwnPtrWillBeRawPtr<InterpolationRecord> create(PassRefPtrWillBeRawPtr<Interpolation> interpolation, PassRefPtr<TimingFunction> easing, double start, double end, double applyFrom, double applyTo)
43d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        {
4407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch            return adoptPtrWillBeNoop(new InterpolationRecord(interpolation, easing, start, end, applyFrom, applyTo));
45d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        }
4607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch
4707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        void trace(Visitor*);
4807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch
49d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    private:
5007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        InterpolationRecord(PassRefPtrWillBeRawPtr<Interpolation> interpolation, PassRefPtr<TimingFunction> easing, double start, double end, double applyFrom, double applyTo)
51d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            : m_interpolation(interpolation)
52d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            , m_easing(easing)
53d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            , m_start(start)
54d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            , m_end(end)
55d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            , m_applyFrom(applyFrom)
56d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            , m_applyTo(applyTo)
5707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        {
5807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        }
59d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    };
60d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
6107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    WillBeHeapVector<OwnPtrWillBeMember<InterpolationRecord> > m_interpolations;
62d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)};
63d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
64d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
65d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
66d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#endif
67