1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_slideshow.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski // must be first
28*b1cdbd2cSJim Jagielski #include <canvas/debug.hxx>
29*b1cdbd2cSJim Jagielski #include <tools/diagnose_ex.h>
30*b1cdbd2cSJim Jagielski #include <canvas/verbosetrace.hxx>
31*b1cdbd2cSJim Jagielski 
32*b1cdbd2cSJim Jagielski #include <continuouskeytimeactivitybase.hxx>
33*b1cdbd2cSJim Jagielski 
34*b1cdbd2cSJim Jagielski #include <boost/tuple/tuple.hpp>
35*b1cdbd2cSJim Jagielski #include <algorithm>
36*b1cdbd2cSJim Jagielski #include <iterator>
37*b1cdbd2cSJim Jagielski 
38*b1cdbd2cSJim Jagielski 
39*b1cdbd2cSJim Jagielski namespace slideshow
40*b1cdbd2cSJim Jagielski {
41*b1cdbd2cSJim Jagielski     namespace internal
42*b1cdbd2cSJim Jagielski     {
ContinuousKeyTimeActivityBase(const ActivityParameters & rParms)43*b1cdbd2cSJim Jagielski         ContinuousKeyTimeActivityBase::ContinuousKeyTimeActivityBase( const ActivityParameters& rParms ) :
44*b1cdbd2cSJim Jagielski             SimpleContinuousActivityBase( rParms ),
45*b1cdbd2cSJim Jagielski             maLerper( rParms.maDiscreteTimes )
46*b1cdbd2cSJim Jagielski         {
47*b1cdbd2cSJim Jagielski             ENSURE_OR_THROW( rParms.maDiscreteTimes.size() > 1,
48*b1cdbd2cSJim Jagielski                               "ContinuousKeyTimeActivityBase::ContinuousKeyTimeActivityBase(): key times vector must have two entries or more" );
49*b1cdbd2cSJim Jagielski             ENSURE_OR_THROW( rParms.maDiscreteTimes.front() == 0.0,
50*b1cdbd2cSJim Jagielski                               "ContinuousKeyTimeActivityBase::ContinuousKeyTimeActivityBase(): key times vector first entry must be zero" );
51*b1cdbd2cSJim Jagielski             ENSURE_OR_THROW( rParms.maDiscreteTimes.back() <= 1.0,
52*b1cdbd2cSJim Jagielski                               "ContinuousKeyTimeActivityBase::ContinuousKeyTimeActivityBase(): key times vector last entry must be less or equal 1" );
53*b1cdbd2cSJim Jagielski         }
54*b1cdbd2cSJim Jagielski 
simplePerform(double nSimpleTime,sal_uInt32 nRepeatCount) const55*b1cdbd2cSJim Jagielski         void ContinuousKeyTimeActivityBase::simplePerform( double 		nSimpleTime,
56*b1cdbd2cSJim Jagielski                                                            sal_uInt32 	nRepeatCount ) const
57*b1cdbd2cSJim Jagielski         {
58*b1cdbd2cSJim Jagielski             // calc simple time from global time - sweep through the
59*b1cdbd2cSJim Jagielski             // array multiple times for repeated animations (according to
60*b1cdbd2cSJim Jagielski             // SMIL spec).
61*b1cdbd2cSJim Jagielski             double fAlpha( calcAcceleratedTime( nSimpleTime ) );
62*b1cdbd2cSJim Jagielski             std::ptrdiff_t nIndex;
63*b1cdbd2cSJim Jagielski 
64*b1cdbd2cSJim Jagielski             boost::tuples::tie(nIndex,fAlpha) = maLerper.lerp(fAlpha);
65*b1cdbd2cSJim Jagielski 
66*b1cdbd2cSJim Jagielski             perform(
67*b1cdbd2cSJim Jagielski                 nIndex,
68*b1cdbd2cSJim Jagielski                 fAlpha,
69*b1cdbd2cSJim Jagielski                 nRepeatCount );
70*b1cdbd2cSJim Jagielski         }
71*b1cdbd2cSJim Jagielski     }
72*b1cdbd2cSJim Jagielski }
73