{
qDebug() << __PRETTY_FUNCTION__;
- if (m_zoomLevel >= MAX_MAP_ZOOM_LEVEL)
- /// @todo Sami: return only to end
- return;
+ if (m_zoomLevel < MAX_MAP_ZOOM_LEVEL) {
+ m_zoomLevel++;
+ emit zoomLevelChanged(m_zoomLevel);
- m_zoomLevel++;
- emit zoomLevelChanged(m_zoomLevel);
+ setTilesDrawingLevels();
- setTilesDrawingLevels();
+ calculateNewTiles(m_sceneCoordinate);
- calculateNewTiles(m_sceneCoordinate);
- QTimer::singleShot(500, this, SLOT(removeOldTiles()));
+ // remove unused tiles after zooming is done
+ QTimer::singleShot(ZOOM_TIME, this, SLOT(removeOldTiles()));
+ }
+ /// @todo DONE: Sami: return only to end
}
void MapEngine::zoomOut()
{
qDebug() << __PRETTY_FUNCTION__;
- if (m_zoomLevel <= MIN_MAP_ZOOM_LEVEL)
- /// @todo Sami: return
- return;
+ if (m_zoomLevel > MIN_MAP_ZOOM_LEVEL) {
+ m_zoomLevel--;
+ emit zoomLevelChanged(m_zoomLevel);
- m_zoomLevel--;
- emit zoomLevelChanged(m_zoomLevel);
-
- setTilesDrawingLevels();
+ setTilesDrawingLevels();
- calculateNewTiles(m_sceneCoordinate);
+ calculateNewTiles(m_sceneCoordinate);
+ }
+ /// @todo DONE: Sami: return
}
void MapEngine::setTilesDrawingLevels()
void MapTile::setSceneLevel(int currentZoomLevel)
{
- /// @todo Sami: bbb
+ /// @todo DONE Sami: bbb
if (currentZoomLevel < m_zoomLevel) {
- qreal aaa = static_cast<qreal>(MIN_MAP_SCENE_NORMAL_LEVEL + currentZoomLevel - (m_zoomLevel - currentZoomLevel)) + 0.5;
- setZValue(aaa);
+ qreal z = static_cast<qreal>(MIN_MAP_SCENE_NORMAL_LEVEL + currentZoomLevel
+ - (m_zoomLevel - currentZoomLevel)) + 0.5;
+ setZValue(z);
}
else
setZValue(static_cast<qreal>(MIN_MAP_SCENE_NORMAL_LEVEL + m_zoomLevel));
(m_tileNumber.y() >= 0) && (m_tileNumber.y() <= maxTileNumber)) {
setPos(MapEngine::convertTileNumberToSceneCoordinate(m_zoomLevel, m_tileNumber));
//qDebug() << __PRETTY_FUNCTION__ << "tile position:" << pos();
- /// @todo Sami: return
- return; // done
+ /// @todo DONE Sami: return
+ }
+ else {
+ setPos(UNDEFINED, UNDEFINED);
}
- // else
- setPos(UNDEFINED, UNDEFINED);
- //Q_ASSERT_X(false, __PRETTY_FUNCTION__, "m_zoomLevel and/or m_tileNumber is undefined");
}
#include "mapcommon.h"
#include "mapview.h"
-MapView::MapView(QWidget *parent) : QGraphicsView(parent)
+MapView::MapView(QWidget *parent)
+ : QGraphicsView(parent)
+ , m_timerID(NULL)
{
/**
* Use OpenGL for desktop to gain some performance in map view.
{
m_zoomTargetScale = pow(2, zoomLevel - MAX_MAP_ZOOM_LEVEL);
m_zoomScaleDelta = (m_zoomTargetScale - currentScale()) / (ZOOM_FPS * ZOOM_TIME);
-/// @todo Sami: starts new timer
- startTimer(1000/ZOOM_FPS);
+/// @todo DONE Sami: starts new timer
+ if (m_timerID)
+ killTimer(m_timerID);
+
+ m_timerID = startTimer(1000/ZOOM_FPS);
}
void MapView::timerEvent(QTimerEvent *event)
{
- qreal scaleFactor = currentScale();
-
-// qDebug() << __PRETTY_FUNCTION__
-// << "abs(m_zoomTargetScale - scaleFactor)" << fabs(m_zoomTargetScale - scaleFactor)
-// << "abs(m_zoomScaleDelta)" << fabs(m_zoomScaleDelta);
-
- if (fabs(m_zoomTargetScale - scaleFactor) <= fabs(m_zoomScaleDelta)) {
- scaleFactor = m_zoomTargetScale;
- killTimer(event->timerId());
+ if (event->timerId() == m_timerID) {
+ qreal scaleFactor = currentScale();
+
+// qDebug() << __PRETTY_FUNCTION__
+// << "abs(m_zoomTargetScale - scaleFactor)" << fabs(m_zoomTargetScale - scaleFactor)
+// << "abs(m_zoomScaleDelta)" << fabs(m_zoomScaleDelta);
+
+ if (fabs(m_zoomTargetScale - scaleFactor) <= fabs(m_zoomScaleDelta)) {
+ scaleFactor = m_zoomTargetScale;
+ killTimer(event->timerId());
+ }
+ else {
+ scaleFactor += m_zoomScaleDelta;
+ }
+
+// qDebug() << __PRETTY_FUNCTION__ << "currentScale:" << currentScale()
+// << "m_zoomScaleDelta" << m_zoomScaleDelta
+// << "scaleFactor:" << scaleFactor;
+
+ QTransform transform;
+ transform.scale(scaleFactor, scaleFactor);
+ emit scalingFactorChanged(scaleFactor);
+ setTransform(transform);
}
- else {
- scaleFactor += m_zoomScaleDelta;
- }
-
-// qDebug() << __PRETTY_FUNCTION__ << "currentScale:" << currentScale()
-// << "m_zoomScaleDelta" << m_zoomScaleDelta
-// << "scaleFactor:" << scaleFactor;
-
- QTransform transform;
- transform.scale(scaleFactor, scaleFactor);
- emit scalingFactorChanged(scaleFactor);
- setTransform(transform);
}
qreal MapView::currentScale()
private:
QPoint m_mousePosition; ///< Previous mouse event position
QPoint m_scenePosition; ///< New center position
+ int m_timerID; ///< ID number of the timer used for smooth zoom effect
qreal m_zoomScaleDelta; ///< Scaling factor delta for smooth zoom transition effect
qreal m_zoomTargetScale; ///< Scaling factor of the target zoom level
};