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