korge: add basic interaction
parent
8dbe0c59fa
commit
24fca8c62c
|
|
@ -164,28 +164,6 @@ fun <T> ZoomedImage(
|
|||
fun loadImageBitmap(file: File): ImageBitmap =
|
||||
file.inputStream().buffered().use(::loadImageBitmap)
|
||||
|
||||
data class PointConverter(
|
||||
val docWidth: Int,
|
||||
val docHeight: Int,
|
||||
val canvasWidth: Float,
|
||||
val canvasHeight: Float
|
||||
) {
|
||||
fun convertX(x: Int): Float {
|
||||
val xf = x.toFloat()
|
||||
val relXf = docWidth / xf
|
||||
val scaledXf = canvasWidth * relXf
|
||||
// println("X: $scaledXf")
|
||||
return scaledXf
|
||||
}
|
||||
fun convertY(y: Int): Float {
|
||||
val yf = y.toFloat()
|
||||
val relYf = docHeight / yf
|
||||
val scaledYf = canvasHeight * relYf
|
||||
// println("Y: $scaledYf")
|
||||
return scaledYf
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalFoundationApi::class)
|
||||
@Composable
|
||||
fun shapes(zoomableState: ZoomableState) {
|
||||
|
|
@ -215,13 +193,6 @@ fun canvas(zoomableState: ZoomableState, first: OcrPage) {
|
|||
// }
|
||||
)
|
||||
{
|
||||
val converter = PointConverter(
|
||||
docWidth = 2481,
|
||||
docHeight = 3507,
|
||||
canvasWidth = this.size.width,
|
||||
canvasHeight = this.size.height
|
||||
)
|
||||
|
||||
first.words.forEach { word ->
|
||||
val rect = word.rectangle
|
||||
drawRect(
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
dependencies:
|
||||
- https://github.com/korlibs/korge-box2d/tree/v0.1.2/korge-box2d##b1737ab3985c0bd3e2f002346ff2ac43ca1ebf48
|
||||
|
|
@ -1,37 +1,76 @@
|
|||
import korlibs.time.*
|
||||
import korlibs.event.Key
|
||||
import korlibs.image.bitmap.context2d
|
||||
import korlibs.korge.*
|
||||
import korlibs.korge.scene.*
|
||||
import korlibs.korge.tween.*
|
||||
import korlibs.korge.view.*
|
||||
import korlibs.image.color.*
|
||||
import korlibs.image.font.readBitmapFont
|
||||
import korlibs.image.format.*
|
||||
import korlibs.io.file.std.*
|
||||
import korlibs.korge.input.*
|
||||
import korlibs.korge.tween.get
|
||||
import korlibs.korge.tween.tween
|
||||
import korlibs.korge.ui.uiButton
|
||||
import korlibs.korge.ui.uiCheckBox
|
||||
import korlibs.math.geom.*
|
||||
import korlibs.math.interpolation.*
|
||||
import korlibs.math.interpolation.Easing
|
||||
import korlibs.render.platform.DummyOpenglContext.scaleFactor
|
||||
import kotlin.time.Duration.Companion.seconds
|
||||
|
||||
suspend fun main() {
|
||||
Korge(windowSize = Size(512, 512), backgroundColor = Colors["#2b2b2b"]) {
|
||||
val sceneContainer = sceneContainer()
|
||||
|
||||
sceneContainer.changeTo({ MyScene() })
|
||||
sceneContainer.changeTo { ViewDocument() }
|
||||
}
|
||||
}
|
||||
|
||||
class MyScene : Scene() {
|
||||
class ViewDocument : Scene() {
|
||||
override suspend fun SContainer.sceneMain() {
|
||||
val minDegrees = (-18).degrees
|
||||
val maxDegrees = (+16).degrees
|
||||
var scaleFactor = 0.5
|
||||
var offset = Point(0.0,0.0)
|
||||
val moveFactor = 50.0
|
||||
scale(scaleFactor)
|
||||
|
||||
val image = image(resourcesVfs["kitten_pixelated.png"].readBitmap()) {
|
||||
rotation = maxDegrees
|
||||
anchor(.5, .5)
|
||||
scale(0.8)
|
||||
position(256, 256)
|
||||
suspend fun zoom(amount: Double) {
|
||||
scaleFactor += amount
|
||||
tween(
|
||||
this@sceneMain::scale[scaleFactor],
|
||||
time = 0.1.seconds,
|
||||
easing = Easing.EASE_IN_OUT
|
||||
)
|
||||
}
|
||||
|
||||
while (true) {
|
||||
image.tween(image::rotation[minDegrees], time = 1.seconds, easing = Easing.EASE_IN_OUT)
|
||||
image.tween(image::rotation[maxDegrees], time = 1.seconds, easing = Easing.EASE_IN_OUT)
|
||||
suspend fun moveX(amount: Double) {
|
||||
offset = offset.copy(x = offset.x + amount)
|
||||
tween(
|
||||
this@sceneMain::x[offset.x],
|
||||
time = 0.1.seconds,
|
||||
easing = Easing.EASE_IN_OUT)
|
||||
}
|
||||
suspend fun moveY(amount: Double) {
|
||||
offset = offset.copy(y = offset.y + amount)
|
||||
tween(
|
||||
this@sceneMain::y[offset.y],
|
||||
time = 0.1.seconds,
|
||||
easing = Easing.EASE_IN_OUT)
|
||||
}
|
||||
|
||||
keys {
|
||||
down { key ->
|
||||
when (key.key) {
|
||||
Key.EQUAL -> zoom(0.05)
|
||||
Key.MINUS -> zoom(-0.05)
|
||||
Key.UP -> moveY(moveFactor)
|
||||
Key.DOWN -> moveY(-moveFactor)
|
||||
Key.RIGHT -> moveX(moveFactor)
|
||||
Key.LEFT -> moveX(-moveFactor)
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
|
||||
val imageFile = localCurrentDirVfs["assets/xs-reg/00001.jpg"].readBitmap()
|
||||
image(imageFile)
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue