#include "mapengine.h"
+const int SMOOTH_CENTERING_TIME_MS = 1000;
+
MapEngine::MapEngine(QObject *parent)
: QObject(parent),
m_autoCenteringEnabled(false),
m_scroller = &MapScroller::getInstance();
connect(m_scroller, SIGNAL(coordinateUpdated(QPoint)),
- this, SLOT(setLocation(QPoint)));
+ this, SLOT(setCenterPosition(QPoint)));
}
MapEngine::~MapEngine()
return convertSceneCoordinateToLatLon(m_zoomLevel, m_sceneCoordinate);
}
+void MapEngine::centerToCoordinates(QPointF latLonCoordinate)
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ QPoint scenePosition = convertLatLonToSceneCoordinate(latLonCoordinate);
+
+ m_lastManualPosition = scenePosition;
+
+ scrollToPosition(scenePosition);
+}
+
QPoint MapEngine::convertLatLonToSceneCoordinate(QPointF latLonCoordinate)
{
qDebug() << __PRETTY_FUNCTION__;
m_mapScene->spanItems(m_zoomLevel, m_sceneCoordinate, m_viewSize);
if (m_autoCenteringEnabled)
- setViewLocation(position);
+ centerToCoordinates(position);
}
qreal MapEngine::greatCircleDistance(QPointF firstLocation, QPointF secondLocation)
}
emit zoomLevelChanged(m_zoomLevel);
- setViewLocation(QPointF(startLocation.x(), startLocation.y()));
+ centerToCoordinates(QPointF(startLocation.x(), startLocation.y()));
}
bool MapEngine::isAutoCenteringEnabled()
return m_mapScene;
}
+void MapEngine::scrollToPosition(QPoint scenePosition)
+{
+ m_scroller->stop();
+ m_scroller->setEasingCurve(QEasingCurve::InOutQuart);
+ m_scroller->setDuration(SMOOTH_CENTERING_TIME_MS);
+ m_scroller->setStartValue(m_sceneCoordinate);
+ m_scroller->setEndValue(scenePosition);
+ m_scroller->start();
+}
+
void MapEngine::setAutoCentering(bool enabled)
{
m_autoCenteringEnabled = enabled;
m_gpsLocationItem->setEnabled(enabled);
}
-void MapEngine::setLocation(QPoint sceneCoordinate)
+void MapEngine::setCenterPosition(QPoint scenePosition)
{
qDebug() << __PRETTY_FUNCTION__;
// jump to opposite side of the world if world horizontal limit is exceeded
- sceneCoordinate.setX(normalize(sceneCoordinate.x(), MAP_MIN_PIXEL_X, MAP_MAX_PIXEL_X));
+ scenePosition.setX(normalize(scenePosition.x(), MAP_MIN_PIXEL_X, MAP_MAX_PIXEL_X));
// don't allow vertical scene coordinates go out of the map
- sceneCoordinate.setY(qBound(MAP_MIN_PIXEL_Y, sceneCoordinate.y(), MAP_MAX_PIXEL_Y));
+ scenePosition.setY(qBound(MAP_MIN_PIXEL_Y, scenePosition.y(), MAP_MAX_PIXEL_Y));
- if (disableAutoCentering(sceneCoordinate))
+ if (disableAutoCentering(scenePosition))
emit mapScrolledManually();
- m_sceneCoordinate = sceneCoordinate;
+ m_sceneCoordinate = scenePosition;
emit locationChanged(m_sceneCoordinate);
- if (isCenterTileChanged(sceneCoordinate)) {
- getTiles(sceneCoordinate);
+ if (isCenterTileChanged(scenePosition)) {
+ getTiles(scenePosition);
m_mapScene->removeOutOfViewTiles(m_viewTilesGrid, m_zoomLevel);
}
m_tilesGridSize.setWidth(gridWidth);
}
-void MapEngine::setViewLocation(QPointF latLonCoordinate)
-{
- qDebug() << __PRETTY_FUNCTION__;
-
- QPoint sceneCoordinate = convertLatLonToSceneCoordinate(latLonCoordinate);
-
- m_lastManualPosition = sceneCoordinate;
-
- setLocation(sceneCoordinate);
-}
-
int MapEngine::tileMaxIndex(int zoomLevel)
{
qDebug() << __PRETTY_FUNCTION__;