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)#include "config.h"
6d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/animation/InterpolationEffect.h"
7d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
8c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
9d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
1007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochPassOwnPtrWillBeRawPtr<WillBeHeapVector<RefPtrWillBeMember<Interpolation> > > InterpolationEffect::getActiveInterpolations(double fraction, double iterationDuration) const
11d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
12d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
1307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    WillBeHeapVector<RefPtrWillBeMember<Interpolation> >* result = new WillBeHeapVector<RefPtrWillBeMember<Interpolation> >();
14d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
15d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    for (size_t i = 0; i < m_interpolations.size(); ++i) {
16d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        const InterpolationRecord* record = m_interpolations[i].get();
17d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        if (fraction >= record->m_applyFrom && fraction < record->m_applyTo) {
1807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch            RefPtrWillBeRawPtr<Interpolation> interpolation = record->m_interpolation;
19d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            double localFraction = (fraction - record->m_start) / (record->m_end - record->m_start);
20d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            if (record->m_easing)
2107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch                localFraction = record->m_easing->evaluate(localFraction, accuracyForDuration(iterationDuration));
22d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            interpolation->interpolate(0, localFraction);
23d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            result->append(interpolation);
24d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        }
25d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    }
26d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
2707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    return adoptPtrWillBeNoop(result);
2807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch}
2907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch
3007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochvoid InterpolationEffect::InterpolationRecord::trace(Visitor* visitor)
3107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{
3207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    visitor->trace(m_interpolation);
3307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch}
3407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch
3507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochvoid InterpolationEffect::trace(Visitor* visitor)
3607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{
3707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch#if ENABLE_OILPAN
3807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    visitor->trace(m_interpolations);
3907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch#endif
40d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
41d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
42d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
43