8e04137605f155dba50bf5508b88dc186a6275b7
[situare] / src / map / mapscroller.cpp
1 /*
2     Situare - A location system for Facebook
3     Copyright (C) 2010  Ixonos Plc. Authors:
4
5         Sami Rämö - sami.ramo@ixonos.com
6
7     Situare is free software; you can redistribute it and/or
8     modify it under the terms of the GNU General Public License
9     version 2 as published by the Free Software Foundation.
10
11     Situare is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15
16     You should have received a copy of the GNU General Public License
17     along with Situare; if not, write to the Free Software
18     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
19     USA.
20 */
21
22 #include <QDebug>
23 #include <QVariantAnimation>
24
25 #include "coordinates/scenecoordinate.h"
26
27 #include "mapscroller.h"
28
29 // scene coordinate interpolator function is not part of this class namespace
30 QVariant sceneCoordinateInterpolator(const SceneCoordinate &start,
31                                      const SceneCoordinate &end,
32                                      qreal progress);
33
34 MapScroller& MapScroller::getInstance()
35 {
36     qDebug() << __PRETTY_FUNCTION__;
37
38     qRegisterAnimationInterpolator<SceneCoordinate>(sceneCoordinateInterpolator);
39
40     static MapScroller instance;
41     return instance;
42 }
43
44 void MapScroller::updateCurrentValue(const QVariant &value)
45 {
46     qDebug() << __PRETTY_FUNCTION__;
47
48     if ((state() == QAbstractAnimation::Running) && (value.canConvert<SceneCoordinate>()))
49         emit coordinateUpdated(value.value<SceneCoordinate>());
50 }
51
52 // scene coordinate interpolator function is not part of this class namespace
53 QVariant sceneCoordinateInterpolator(const SceneCoordinate &start,
54                                                   const SceneCoordinate &end,
55                                                   qreal progress)
56 {
57     return SceneCoordinate(start + progress * (end - start));
58 }