From 20f954225e33494e1f8434119de87dd219bef0a4 Mon Sep 17 00:00:00 2001 From: Timo Ojala Date: Thu, 24 Nov 2011 17:26:19 +0200 Subject: Changed mapviewer scale to snap to round values, lazy scale updates * Mapviewer scale now snaps to round values. Scale line length is now variable. * Changed mapviewer scale to update after a delay, not at every signal. Change-Id: I673bc0c7211fae7f37b85ff83e04d8d744b2b368 Reviewed-by: Cristian Adam Reviewed-by: Natalia Shubina --- .../mapviewer/content/map/MapComponent.qml | 48 ++++++++++++++++++---- 1 file changed, 40 insertions(+), 8 deletions(-) (limited to 'examples/declarative/mapviewer') diff --git a/examples/declarative/mapviewer/mapviewer/content/map/MapComponent.qml b/examples/declarative/mapviewer/mapviewer/content/map/MapComponent.qml index d3dd9b3e..318f4a3f 100644 --- a/examples/declarative/mapviewer/mapviewer/content/map/MapComponent.qml +++ b/examples/declarative/mapviewer/mapviewer/content/map/MapComponent.qml @@ -64,6 +64,7 @@ Map { property int lastX : -1 property int lastY : -1 property bool followme: false + property variant scaleLengths: [10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000, 100000, 200000, 500000, 1000000, 2000000] Coordinate { id: brisbaneCoordinate @@ -417,32 +418,44 @@ Map { id: scaleText color: "#004EAE" horizontalAlignment: Text.AlignHCenter - width: scaleImage.sourceSize.width anchors.bottom: parent.bottom anchors.left: parent.left anchors.bottomMargin: 3 - text:calculateScale() + text: "0 m" font.pixelSize: 14 } + Component.onCompleted: { + map.calculateScale(); + } + } + + Timer { + id: scaleTimer + interval: 100 + running: false + repeat: false + onTriggered: { + map.calculateScale() + } } onCenterChanged:{ - scaleText.text = calculateScale() + scaleTimer.restart() if (map.followme) if (map.center != positionSource.position.coordinate) map.followme = false } onZoomLevelChanged:{ - scaleText.text = map.calculateScale() + scaleTimer.restart() if (map.followme) map.center = positionSource.position.coordinate } onWidthChanged:{ - scaleText.text = map.calculateScale() + scaleTimer.restart() } onHeightChanged:{ - scaleText.text = map.calculateScale() + scaleTimer.restart() } Menu { @@ -652,12 +665,31 @@ Map { } function calculateScale(){ - var coord1, coord2, dist, text + var coord1, coord2, dist, text, f + f = 0 coord1 = map.toCoordinate(Qt.point(0,scale.y)) coord2 = map.toCoordinate(Qt.point(0+scaleImage.sourceSize.width,scale.y)) dist = Math.round(coord1.distanceTo(coord2)) + + if (dist === 0) { + // not visible + } else { + for (var i = 0; i < scaleLengths.length-1; i++) { + if (dist < (scaleLengths[i] + scaleLengths[i+1]) / 2 ) { + f = dist / scaleLengths[i] + dist = scaleLengths[i] + break; + } + } + if (f === 0) { + f = dist / scaleLengths[i] + dist = scaleLengths[i] + } + } + text = formatDistance(dist) - return text + scaleImage.width = scaleImage.sourceSize.width * f + scaleText.text = text } /* -- cgit v1.2.1