X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fmap%2Fmapview.cpp;h=37f8b81ebaa4ac5c7675c104ed0f06a8013c2188;hb=bc4bf2aeb597f39955ed8cbe3a3fdcd5914d7ec8;hp=62ba764a2e7327980fb75362ef3f12328faca1d5;hpb=b6a14e64b2b8331aa200c8b630e7af7d4288b127;p=situare diff --git a/src/map/mapview.cpp b/src/map/mapview.cpp index 62ba764..37f8b81 100644 --- a/src/map/mapview.cpp +++ b/src/map/mapview.cpp @@ -3,6 +3,7 @@ Copyright (C) 2010 Ixonos Plc. Authors: Sami Rämö - sami.ramo@ixonos.com + Pekka Nissinen - pekka.nissinen@ixonos.com Situare is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -24,131 +25,84 @@ #include #include -#ifndef Q_WS_MAEMO_5 - #include -#endif // Q_WS_MAEMO_5 - #include "mapcommon.h" #include "mapview.h" MapView::MapView(QWidget *parent) : QGraphicsView(parent) - , m_timerID(NULL) { -/** - * Use OpenGL for desktop to gain some performance in map view. - * OpenGL can't be used in scratchbox. - */ -#ifndef Q_WS_MAEMO_5 - setViewport(new QGLWidget(QGLFormat(QGL::DoubleBuffer))); -#endif // !Q_WS_MAEMO_5 + qDebug() << __PRETTY_FUNCTION__; setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - m_zoomAnimation = new QPropertyAnimation(this, "viewScale"); - connect(m_zoomAnimation, SIGNAL(finished()), this, SIGNAL(viewZoomFinished())); + m_zoomAnimation = new QPropertyAnimation(this, "viewScale", this); + connect(m_zoomAnimation, SIGNAL(finished()), + this, SIGNAL(viewZoomFinished())); } -void MapView::setZoomLevel(int zoomLevel) +void MapView::centerToSceneCoordinates(QPoint sceneCoordinate) { -// m_zoomTargetScale = pow(2, zoomLevel - MAX_MAP_ZOOM_LEVEL); -// m_zoomScaleDelta = (m_zoomTargetScale - currentScale()) / (ZOOM_FPS * (ZOOM_TIME / 1000)); -// -// if (m_timerID) -// killTimer(m_timerID); -// -// m_timerID = startTimer(1000/ZOOM_FPS); - - m_zoomAnimation->stop(); - m_zoomAnimation->setDuration(ZOOM_TIME); - m_zoomAnimation->setStartValue(viewScale()); - m_zoomAnimation->setEndValue(pow(2, zoomLevel - MAX_MAP_ZOOM_LEVEL)); - - m_zoomAnimation->start(); + qDebug() << __PRETTY_FUNCTION__ << "sceneCoordinate" << sceneCoordinate; + + centerOn(sceneCoordinate); } -void MapView::timerEvent(QTimerEvent *event) +void MapView::mouseMoveEvent(QMouseEvent *event) { - if (event->timerId() == m_timerID) { - bool finished = false; - 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()); - finished = true; - } - else { - scaleFactor += m_zoomScaleDelta; - } - -// qDebug() << __PRETTY_FUNCTION__ << "currentScale:" << currentScale() -// << "m_zoomScaleDelta" << m_zoomScaleDelta -// << "scaleFactor:" << scaleFactor; - - QTransform transform; - transform.scale(scaleFactor, scaleFactor); - setTransform(transform); - emit viewContentChanged(mapToScene(viewport()->x(), viewport()->y()).toPoint()); - - if (finished && m_zoomScaleDelta > 0) - emit viewZoomFinished(); - } + m_scenePosition += m_mousePosition - mapToScene(event->pos()).toPoint(); + + qDebug() << __PRETTY_FUNCTION__ << "m_scenePosition:" << m_scenePosition; + + emit viewScrolled(m_scenePosition); + + m_mousePosition = mapToScene(event->pos()).toPoint(); } -qreal MapView::currentScale() +void MapView::mousePressEvent(QMouseEvent *event) { - QTransform currentTransform = transform(); - return currentTransform.m11(); + qDebug() << __PRETTY_FUNCTION__; + + QGraphicsView::mousePressEvent(event); // Temporary solution + + m_mousePosition = mapToScene(event->pos()).toPoint(); + m_scenePosition = mapToScene(width() / 2 - 1, height() / 2 - 1).toPoint(); } -qreal MapView::viewScale() +void MapView::resizeEvent(QResizeEvent *event) { - QTransform currentTransform = transform(); - return currentTransform.m11(); + qDebug() << __PRETTY_FUNCTION__ << "Resize:" << event->size(); + + emit viewResized(event->size()); + emit viewResizedNewSize(viewport()->width(), viewport()->height()); } void MapView::setViewScale(qreal viewScale) { + qDebug() << __PRETTY_FUNCTION__; + QTransform transform; transform.scale(viewScale, viewScale); setTransform(transform); - emit viewContentChanged(mapToScene(viewport()->x(), viewport()->y()).toPoint()); } -void MapView::mouseMoveEvent(QMouseEvent *event) +void MapView::setZoomLevel(int zoomLevel) { - m_scenePosition += m_mousePosition - mapToScene(event->pos()).toPoint(); - - emit viewScrolled(m_scenePosition); -// qDebug() << __PRETTY_FUNCTION__ << "m_scenePosition:" << m_scenePosition; + qDebug() << __PRETTY_FUNCTION__; - m_mousePosition = mapToScene(event->pos()).toPoint(); - emit viewContentChanged(mapToScene(viewport()->x(), viewport()->y()).toPoint()); -} - -void MapView::mousePressEvent(QMouseEvent *event) -{ - QGraphicsView::mousePressEvent(event); + if (m_zoomAnimation) { + m_zoomAnimation->stop(); + m_zoomAnimation->setDuration(ZOOM_TIME); + m_zoomAnimation->setStartValue(viewScale()); + m_zoomAnimation->setEndValue(pow(2, zoomLevel - MAX_MAP_ZOOM_LEVEL)); - m_mousePosition = mapToScene(event->pos()).toPoint(); - m_scenePosition = mapToScene(width() / 2 - 1, height() / 2 - 1).toPoint(); + m_zoomAnimation->start(); + } } -void MapView::centerToSceneCoordinates(QPoint sceneCoordinate) +qreal MapView::viewScale() { -// qDebug() << __PRETTY_FUNCTION__ << "sceneCoordinate" << sceneCoordinate; - centerOn(sceneCoordinate); -} + qDebug() << __PRETTY_FUNCTION__; -void MapView::resizeEvent(QResizeEvent *event) -{ -// qDebug() << "Resize event: " << event->size(); - emit viewResized(event->size()); - emit viewContentChanged(mapToScene(viewport()->x(), viewport()->y()).toPoint()); + return transform().m11(); }