Skip to content

Commit 64a28dd

Browse files
authored
Add zoom functionality by sliding over zoom buttons (fixes #6716)
1 parent 9add129 commit 64a28dd

File tree

3 files changed

+23
-3
lines changed

3 files changed

+23
-3
lines changed

app/src/androidMain/kotlin/de/westnordost/streetcomplete/screens/main/MainActivity.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,7 @@ class MainActivity :
235235
editHistoryViewModel = editHistoryViewModel,
236236
onClickZoomIn = ::onClickZoomIn,
237237
onClickZoomOut = ::onClickZoomOut,
238+
onZoomDrag = ::onZoomDrag,
238239
onClickCompass = ::onClickCompassButton,
239240
onClickLocation = ::onClickLocationButton,
240241
onClickLocationPointer = ::onClickLocationPointer,
@@ -685,6 +686,10 @@ class MainActivity :
685686
mapFragment?.updateCameraPosition(300) { zoomBy = +1.0 }
686687
}
687688

689+
private fun onZoomDrag(dp: Float) {
690+
mapFragment?.updateCameraPosition(300) { zoomBy = dp / 20.0 }
691+
}
692+
688693
private fun onClickTracksStop() {
689694
// hide the track information
690695
viewModel.isRecordingTracks.value = false

app/src/androidMain/kotlin/de/westnordost/streetcomplete/screens/main/MainScreen.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ fun MainScreen(
9494
editHistoryViewModel: EditHistoryViewModel,
9595
onClickZoomIn: () -> Unit,
9696
onClickZoomOut: () -> Unit,
97+
onZoomDrag: (Float) -> Unit,
9798
onClickCompass: () -> Unit,
9899
onClickLocation: () -> Unit,
99100
onClickLocationPointer: () -> Unit,
@@ -306,7 +307,8 @@ fun MainScreen(
306307
if (showZoomButtons) {
307308
ZoomButtons(
308309
onZoomIn = onClickZoomIn,
309-
onZoomOut = onClickZoomOut
310+
onZoomOut = onClickZoomOut,
311+
onZoomDrag = onZoomDrag
310312
)
311313
}
312314
LocationStateButton(

app/src/commonMain/kotlin/de/westnordost/streetcomplete/screens/main/controls/ZoomButtons.kt

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package de.westnordost.streetcomplete.screens.main.controls
22

33
import androidx.compose.foundation.BorderStroke
4+
import androidx.compose.foundation.gestures.detectVerticalDragGestures
45
import androidx.compose.foundation.layout.Column
56
import androidx.compose.foundation.layout.IntrinsicSize
67
import androidx.compose.foundation.layout.width
@@ -13,22 +14,26 @@ import androidx.compose.material.MaterialTheme
1314
import androidx.compose.material.Surface
1415
import androidx.compose.runtime.Composable
1516
import androidx.compose.ui.Modifier
17+
import androidx.compose.ui.input.pointer.pointerInput
1618
import androidx.compose.ui.unit.dp
1719
import de.westnordost.streetcomplete.ui.common.ZoomInIcon
1820
import de.westnordost.streetcomplete.ui.common.ZoomOutIcon
1921
import androidx.compose.ui.tooling.preview.Preview
22+
import de.westnordost.streetcomplete.ui.ktx.pxToDp
2023

2124
/** Combined control for zooming in and out */
2225
@Composable
2326
fun ZoomButtons(
2427
onZoomIn: () -> Unit,
2528
onZoomOut: () -> Unit,
29+
onZoomDrag: (Float) -> Unit,
2630
modifier: Modifier = Modifier,
2731
enabled: Boolean = true,
2832
colors: ButtonColors = ButtonDefaults.buttonColors(
2933
backgroundColor = MaterialTheme.colors.surface,
3034
),
3135
) {
36+
val pxToDp = 1.pxToDp().value
3237
Surface(
3338
modifier = modifier,
3439
shape = CircleShape,
@@ -37,7 +42,15 @@ fun ZoomButtons(
3742
border = BorderStroke(1.dp, MaterialTheme.colors.onSurface.copy(alpha = 0.12f)),
3843
elevation = 4.dp
3944
) {
40-
Column(Modifier.width(IntrinsicSize.Min)) {
45+
Column(Modifier
46+
.width(IntrinsicSize.Min)
47+
.pointerInput(Unit) {
48+
detectVerticalDragGestures { change, dragAmount ->
49+
change.consume()
50+
onZoomDrag(-dragAmount * pxToDp) // dragAmount is pixels, we want dp
51+
}
52+
}
53+
) {
4154
IconButton(onClick = onZoomIn, enabled = enabled) { ZoomInIcon() }
4255
Divider()
4356
IconButton(onClick = onZoomOut, enabled = enabled) { ZoomOutIcon() }
@@ -48,5 +61,5 @@ fun ZoomButtons(
4861
@Preview
4962
@Composable
5063
private fun PreviewZoomButtons() {
51-
ZoomButtons(onZoomIn = {}, onZoomOut = {})
64+
ZoomButtons(onZoomIn = {}, onZoomOut = {}, onZoomDrag = {})
5265
}

0 commit comments

Comments
 (0)