Browse Source

1

imageviewer-multitouch
Igor Demin 1 year ago
parent
commit
2c0b1efedd
  1. 2
      experimental/examples/imageviewer/gradle.properties
  2. 1
      experimental/examples/imageviewer/settings.gradle.kts
  3. 1
      experimental/examples/imageviewer/shared/build.gradle.kts
  4. 11
      experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/model/ScalableState.kt
  5. 6
      experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/FullscreenImage.kt
  6. 13
      experimental/examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/main.ios.kt
  7. 34
      experimental/examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/view/LocationVisualizer.ios.kt

2
experimental/examples/imageviewer/gradle.properties

@ -13,5 +13,5 @@ kotlin.native.useEmbeddableCompilerJar=true
kotlin.native.binary.memoryModel=experimental
kotlin.version=1.8.0
agp.version=7.1.3
compose.version=1.3.1
compose.version=1.4.0-alpha01-dev972
ktor.version=2.2.1

1
experimental/examples/imageviewer/settings.gradle.kts

@ -1,6 +1,5 @@
pluginManagement {
repositories {
mavenLocal()
gradlePluginPortal()
maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
google()

1
experimental/examples/imageviewer/shared/build.gradle.kts

@ -38,6 +38,7 @@ kotlin {
implementation(compose.material)
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.1")
implementation(compose.material3)
implementation("org.jetbrains.compose.ui:ui:1.55.0")
@OptIn(org.jetbrains.compose.ExperimentalComposeLibrary::class)
implementation(compose.components.resources)
}

11
experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/model/ScalableState.kt

@ -40,16 +40,11 @@ fun ScalableState.changeBoxSize(size: IntSize) {
fun ScalableState.setScale(scale: Float) {
this.scale = scale
updateOffsetLimits()
}
fun ScalableState.addScale(diff: Float) {
scale = if (scale + diff > MAX_SCALE) {
MAX_SCALE
} else if (scale + diff < MIN_SCALE) {
MIN_SCALE
} else {
scale + diff
}
fun ScalableState.addScale(multiplier: Float) {
scale = (scale * multiplier).coerceIn(0.2f..5f)
updateOffsetLimits()
}

6
experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/FullscreenImage.kt

@ -93,12 +93,14 @@ internal fun FullscreenImage(
.pointerInput(Unit) {
detectTransformGestures { _, pan, zoom, _ ->
scalableState.addDragAmount(pan)
scalableState.addScale(zoom - 1f)
scalableState.addScale(zoom)
}
}
.pointerInput(Unit) {
detectTapGestures(
onDoubleTap = { scalableState.setScale(1f) }
onDoubleTap = {
scalableState.setScale(1f)
}
)
}
.onPointerEvent(PointerEventType.Scroll) {

13
experimental/examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/main.ios.kt

@ -1,7 +1,14 @@
package example.imageviewer
import androidx.compose.ui.window.ComposeUIViewController
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.height
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Application
import platform.UIKit.UIViewController
fun MainViewController(): UIViewController = ComposeUIViewController { ImageViewerIos() }
fun MainViewController(): UIViewController =
Application("Imageviewer") {
ImageViewerIos()
}

34
experimental/examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/view/LocationVisualizer.ios.kt

@ -2,7 +2,7 @@ package example.imageviewer.view
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.interop.UIKitInteropView
//import androidx.compose.ui.interop.UIKitInteropView
import platform.CoreLocation.CLLocationCoordinate2DMake
import platform.MapKit.MKCoordinateRegionMakeWithDistance
import platform.MapKit.MKMapView
@ -11,20 +11,20 @@ import platform.MapKit.MKPointAnnotation
@Composable
internal actual fun LocationVisualizer(modifier: Modifier) {
//todo get real geo coordinates
UIKitInteropView(
modifier = modifier,
factory = {
val mkMapView = MKMapView()
val cityAmsterdam = CLLocationCoordinate2DMake(52.3676, 4.9041)
mkMapView.setRegion(
MKCoordinateRegionMakeWithDistance(
centerCoordinate = cityAmsterdam,
5000.0, 5000.0
),
animated = false
)
mkMapView.addAnnotation(MKPointAnnotation(cityAmsterdam, title = null, subtitle = null))
mkMapView
},
)
// UIKitInteropView(
// modifier = modifier,
// factory = {
// val mkMapView = MKMapView()
// val cityAmsterdam = CLLocationCoordinate2DMake(52.3676, 4.9041)
// mkMapView.setRegion(
// MKCoordinateRegionMakeWithDistance(
// centerCoordinate = cityAmsterdam,
// 5000.0, 5000.0
// ),
// animated = false
// )
// mkMapView.addAnnotation(MKPointAnnotation(cityAmsterdam, title = null, subtitle = null))
// mkMapView
// },
// )
}

Loading…
Cancel
Save