aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Lubomir I. Ivanov <neolit123@gmail.com>2017-08-07 02:18:09 +0300
committerGravatar Dirk Hohndel <dirk@hohndel.org>2017-08-07 00:51:21 -0700
commit5db24601689d5c3827a8b12c50c2cbfdf53f48da (patch)
tree1863d0815e954a7b584b31e0bccbe4b1b4dce3cf
parent0fc9a3bf4ae532f5a9afd6d3fd8731eb16745671 (diff)
downloadsubsurface-5db24601689d5c3827a8b12c50c2cbfdf53f48da.tar.gz
mapwidget.qml: implement centerOnRectangle()
First, this function calculates the zoom out effect until both the current Map center and the target rectangle are visible - see the "calculate zoom out" part. Then it calculates a zoom level, so that the target rectangle fits the viewport, but also so that the zoom is not too much (clamped). see the "calculate zoom in" part. NOTE: "centerStored" (the variable used to store the current map center) is created using QtPositioning.coordinate(), because the code needs a new object and not a reference of the map.center QGeoCoordinate object. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
-rw-r--r--mobile-widgets/qml/MapWidget.qml45
1 files changed, 43 insertions, 2 deletions
diff --git a/mobile-widgets/qml/MapWidget.qml b/mobile-widgets/qml/MapWidget.qml
index cdfa25d79..7c0f9a691 100644
--- a/mobile-widgets/qml/MapWidget.qml
+++ b/mobile-widgets/qml/MapWidget.qml
@@ -181,8 +181,49 @@ Item {
mapAnimationZoomOut.stop()
}
- function centerOnRectangle(topLeft, bottomRight, center) {
- // TODO
+ function centerOnRectangle(topLeft, bottomRight, centerRect) {
+ stopZoomAnimations()
+ newCenter = centerRect
+ if (newCenter.latitude === 0.0 && newCenter.longitude === 0.0) {
+ newZoom = 2.6
+ newZoomOut = newZoom
+ } else {
+ var centerStored = QtPositioning.coordinate(center.latitude, center.longitude)
+ var zoomStored = zoomLevel
+ var ptCenter
+ var ptTopLeft
+ var ptBottomRight
+ // calculate zoom out
+ newZoomOut = zoomLevel
+ while (zoomLevel > minimumZoomLevel) {
+ ptCenter = fromCoordinate(centerStored)
+ ptTopLeft = fromCoordinate(topLeft)
+ ptBottomRight = fromCoordinate(bottomRight)
+ if (pointIsVisible(ptCenter) && pointIsVisible(ptTopLeft) && pointIsVisible(ptBottomRight)) {
+ newZoomOut = zoomLevel
+ break
+ }
+ zoomLevel--
+ }
+ // calculate zoom in
+ center = newCenter
+ zoomLevel = maximumZoomLevel
+ while (zoomLevel > minimumZoomLevel) {
+ ptTopLeft = fromCoordinate(topLeft)
+ ptBottomRight = fromCoordinate(bottomRight)
+ if (pointIsVisible(ptTopLeft) && pointIsVisible(ptBottomRight)) {
+ newZoom = zoomLevel
+ break
+ }
+ zoomLevel--
+ }
+ if (newZoom > defaultZoomIn)
+ newZoom = defaultZoomIn
+ zoomLevel = zoomStored
+ center = centerStored
+ }
+ mapAnimationZoomIn.restart()
+ mapAnimationZoomOut.stop()
}
function deselectMapLocation() {