78 lines
1.8 KiB
C++
78 lines
1.8 KiB
C++
/*
|
||
* © Copyright 2014 – Urheberrechtshinweis
|
||
* Alle Rechte vorbehalten / All Rights Reserved
|
||
*
|
||
* Programmcode ist urheberrechtlich geschuetzt.
|
||
* Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner.
|
||
* Keine Verwendung ohne explizite Genehmigung.
|
||
* (vgl. § 106 ff UrhG / § 97 UrhG)
|
||
*/
|
||
|
||
#ifndef TOOLMAPZOOM_H
|
||
#define TOOLMAPZOOM_H
|
||
|
||
#include "Tool.h"
|
||
#include "../MapView2D.h"
|
||
|
||
/**
|
||
* this tool allows zooming in and out of the map
|
||
*/
|
||
class ToolMapZoom : public Tool {
|
||
|
||
float startScale = NAN;
|
||
|
||
public:
|
||
|
||
const std::string getName() const override {
|
||
return "MapZoom";
|
||
}
|
||
|
||
virtual bool wheelEvent(MapView2D* m, QWheelEvent* e) override {
|
||
|
||
Scaler& s = m->getScaler();
|
||
|
||
if (e->delta() < 0) {
|
||
s.setScale(s.getScale() * 0.75);
|
||
} else {
|
||
s.setScale(s.getScale() / 0.75);
|
||
}
|
||
|
||
if (s.getScale() > 1000) {s.setScale(1000);}
|
||
if (s.getScale() < 5) {s.setScale(5);}
|
||
|
||
return true;
|
||
|
||
}
|
||
|
||
virtual bool pinchTriggered(MapView2D *m, QPinchGesture* g) override {
|
||
|
||
Scaler& s = m->getScaler();
|
||
// https://doc.qt.io/qt-5/qtwidgets-gestures-imagegestures-example.html
|
||
|
||
QPinchGesture::ChangeFlags changeFlags = g->changeFlags();
|
||
if (changeFlags & QPinchGesture::RotationAngleChanged) {
|
||
// qreal rotationDelta = gesture->rotationAngle() - gesture->lastRotationAngle();
|
||
// rotationAngle += rotationDelta;
|
||
// qCDebug(lcExample) << "pinchTriggered(): rotate by" <<
|
||
// rotationDelta << "->" << rotationAngle;
|
||
}
|
||
if (changeFlags & QPinchGesture::ScaleFactorChanged) {
|
||
if (startScale != startScale) {startScale = s.getScale();}
|
||
s.setScale(startScale * g->totalScaleFactor());
|
||
}
|
||
if (g->state() == Qt::GestureFinished) {
|
||
startScale = NAN;
|
||
}
|
||
|
||
if (s.getScale() > 1000) {s.setScale(1000);}
|
||
if (s.getScale() < 5) {s.setScale(5);}
|
||
|
||
return true;
|
||
|
||
|
||
}
|
||
|
||
};
|
||
|
||
#endif // TOOLMAPZOOM_H
|