X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fmap%2Fmapview.cpp;h=5019e22f25ce5f55ae3ddc9e6e2b50ab71436d7f;hb=a14de86b57ba6854a9b2578e98636344eea85e4c;hp=fb4b0e170771e6db8dafddd4176890b1049a022e;hpb=f6ada3bfd811206324915c147419650174f9534c;p=situare diff --git a/src/map/mapview.cpp b/src/map/mapview.cpp index fb4b0e1..5019e22 100644 --- a/src/map/mapview.cpp +++ b/src/map/mapview.cpp @@ -19,13 +19,13 @@ USA. */ -#include +#include #include #include -#ifdef Q_WS_MAEMO_51 - #include +#ifndef Q_WS_MAEMO_5 + #include #endif // Q_WS_MAEMO_5 #include "common.h" @@ -33,91 +33,80 @@ MapView::MapView(QWidget *parent) : QGraphicsView(parent) { +#ifndef Q_WS_MAEMO_5 + // use opengl for desktop to gain some performance in map view + // opengl can't be used in scrathbox + setViewport(new QGLWidget); +#endif // Q_WS_MAEMO_5 + setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); +} - startTimer(1000/60); - -#ifdef Q_WS_MAEMO_51 - qDebug() << __PRETTY_FUNCTION__ << "QAbstractKineticScroller built in"; - - QAbstractKineticScroller *scroller = this->property("kineticScroller") - .value(); +void MapView::setZoomLevel(int zoomLevel) +{ + m_zoomTargetScale = pow(2, zoomLevel - MAX_ZOOM_LEVEL); + m_zoomScaleDelta = (m_zoomTargetScale - currentScale()) / (ZOOM_FPS * ZOOM_TIME); - if (scroller) - scroller->setEnabled(true); -#endif // Q_WS_MAEMO_5 + startTimer(1000/ZOOM_FPS); } -void MapView::setZoomLevel(int zoomLevel) +void MapView::timerEvent(QTimerEvent *event) { - double scaleFactor = pow(2, zoomLevel - MAX_ZOOM_LEVEL); + 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); setTransform(transform); } -void MapView::mouseMoveEvent(QMouseEvent *event) +qreal MapView::currentScale() { -// qDebug() << __PRETTY_FUNCTION__ << "scene coordinate:" << mapToScene(event->pos()); -// if (event->buttons() & Qt::LeftButton) -// { -// QPointF delta = mapToScene(event->pos()) - m_mouseClickLocation; -// qDebug() << __PRETTY_FUNCTION__ << "delta:" << delta; -// -// int x = size().width() / 2; -// int y = size().height() / 2; -// QPointF sceneCoordinate = mapToScene(QPoint(x, y)) + delta; -// centerToSceneCoordinates(sceneCoordinate); -// } - m_scenePosition += m_mousePressPosition - event->pos(); - centerToSceneCoordinates(m_scenePosition); - - if (m_mouseIsDown) - m_mouseSpeed = event->pos() - m_mousePressPosition; - - m_mousePressPosition = event->pos(); + QTransform currentTransform = transform(); + return currentTransform.m11(); } -void MapView::mousePressEvent(QMouseEvent *event) +void MapView::mouseMoveEvent(QMouseEvent *event) { -// qDebug() << __PRETTY_FUNCTION__ << "scene coordinate:" << mapToScene(event->pos()); -// -// if (event->button() == Qt::LeftButton) -// m_mouseClickLocation = mapToScene(event->pos()); - m_mousePressPosition = event->pos(); - m_mouseIsDown = true; - m_mouseSpeed = QPointF(0, 0); + m_scenePosition += m_mousePosition - mapToScene(event->pos()); - m_scenePosition = mapToScene(width() / 2 - 1, height() / 2 - 1); -} + emit viewScrolled(m_scenePosition); + //qDebug() << __PRETTY_FUNCTION__ << "m_scenePosition" << m_scenePosition; -void MapView::mouseReleaseEvent(QMouseEvent *) { - m_mouseIsDown = false; + m_mousePosition = mapToScene(event->pos()); } -void MapView::timerEvent(QTimerEvent *event) { - if (!m_mouseIsDown) { - m_mouseSpeed *= 0.97; - if (m_mouseSpeed.manhattanLength() < 0.1) - m_mouseSpeed = QPointF(0, 0); - -// qDebug() << __PRETTY_FUNCTION__ << "m_mouseSpeed" << m_mouseSpeed; - - m_scenePosition -= m_mouseSpeed; - centerToSceneCoordinates(m_scenePosition); - } +void MapView::mousePressEvent(QMouseEvent *event) +{ + m_mousePosition = mapToScene(event->pos()); + m_scenePosition = mapToScene(width() / 2 - 1, height() / 2 - 1); } + void MapView::centerToSceneCoordinates(QPointF sceneCoordinate) { + //qDebug() << __PRETTY_FUNCTION__ << "sceneCoordinate" << sceneCoordinate; centerOn(sceneCoordinate); } -//bool MapView::event(QEvent *event) -//{ -// qDebug() << __PRETTY_FUNCTION__ << "event type:" << event->type(); -// event->ignore(); -// QObject::event(event); -// return false; -//} +void MapView::resizeEvent(QResizeEvent *event) +{ + qDebug() << "Resize event: " << event->size(); + emit viewResized(event->size()); +}