1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
bool MapItem::pinchAreaStarted(QPointF, QPointF startCenter, QPointF, qreal scale, qreal, qreal angle, qreal, qreal, QPointF, QPointF, QPointF, QPointF, int, bool accepted)
{
//qDebug() << "MapItem::PinchAreaStarted";
int x = (int)startCenter.x();
int y = (int)(height() - startCenter.y());
_.ui.pinch = true; _.ui.pinchStart = { x, y };
_.ui.press = false; _.ui.pressStart = { INT_MAX, INT_MAX };
_.ui.pressAndHold = false; _.ui.pressAndHoldStart = { INT_MAX, INT_MAX };
_.ui.dragging = false;
OnZoom(_.ui.pinchStart, scale, angle, true);
return accepted;
}
void MapItem::OnZoom(QPoint, qreal scale, qreal, bool first)
{
if (first) { Q_ASSERT(events.empty()); _.zoomStart = _.CurrentZoomLevel(); }
#if 0
qreal factor = scale < 1 ? 2 : 0.5;
qreal zoom = _.zoomStart + (scale /*- 1.0*/) * factor;
#else
qreal factor = scale < 1 ? 1 : .1;
qreal zoom = _.zoomStart + (scale < 1 ? scale - 1 : scale) * factor;
#endif
_.SetZoomLevel(zoom);
}
void SetZoomLevel(qreal zoom) {
pThis->events.enqueue({MapItem::Z, {zoom, NAN}});
Update();
}
void Zoom(bool in) {
pThis->events.enqueue({MapItem::Z, { (in?-1:1) * std::numeric_limits<qreal>::max(), NAN}});
Update();
}
|