Skip to content

Commit a2d9db9

Browse files
committed
(WIP)
1 parent 5e2689a commit a2d9db9

File tree

3 files changed

+121
-0
lines changed

3 files changed

+121
-0
lines changed

build.gradle.kts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,7 @@ composeCompiler {
3232
includeTraceMarkers = true
3333
includeSourceInformation = true
3434
}
35+
36+
compose.desktop.application {
37+
mainClass = "org.example.MainKt"
38+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package org.example
2+
3+
import androidx.compose.animation.animateContentSize
4+
import androidx.compose.animation.core.animateDpAsState
5+
import androidx.compose.animation.core.animateFloatAsState
6+
import androidx.compose.foundation.clickable
7+
import androidx.compose.foundation.layout.Box
8+
import androidx.compose.foundation.layout.fillMaxSize
9+
import androidx.compose.foundation.layout.offset
10+
import androidx.compose.material.Text
11+
import androidx.compose.runtime.Composable
12+
import androidx.compose.runtime.getValue
13+
import androidx.compose.runtime.mutableStateOf
14+
import androidx.compose.runtime.remember
15+
import androidx.compose.runtime.setValue
16+
import androidx.compose.ui.Modifier
17+
import androidx.compose.ui.draw.scale
18+
import androidx.compose.ui.unit.dp
19+
20+
@Composable
21+
fun Animation() {
22+
Box(
23+
modifier = Modifier
24+
.fillMaxSize()
25+
.animateContentSize(),
26+
contentAlignment = androidx.compose.ui.Alignment.Center
27+
) {
28+
var step by remember { mutableStateOf(0) }
29+
val scale: Float by animateFloatAsState(if (step > 0) 4f else 1f)
30+
val pos by animateDpAsState(if (step > 1) 100.dp else 0.dp)
31+
Text(
32+
"""
33+
line 1
34+
line 2
35+
line 3
36+
line 4
37+
line 5
38+
line 6
39+
line 7
40+
line 8
41+
line 9
42+
line 10
43+
""".trimIndent(),
44+
modifier = Modifier
45+
.offset(x = 0.dp, y = pos)
46+
.scale(scale)
47+
.clickable {
48+
step++
49+
}
50+
)
51+
}
52+
}

src/main/kotlin/org/example/Main.kt

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package org.example
2+
3+
import androidx.compose.animation.AnimatedVisibility
4+
import androidx.compose.foundation.layout.Box
5+
import androidx.compose.foundation.layout.fillMaxSize
6+
import androidx.compose.material.Text
7+
import androidx.compose.runtime.Composable
8+
import androidx.compose.runtime.getValue
9+
import androidx.compose.runtime.mutableStateOf
10+
import androidx.compose.runtime.remember
11+
import androidx.compose.runtime.setValue
12+
import androidx.compose.ui.Modifier
13+
import androidx.compose.ui.input.key.Key
14+
import androidx.compose.ui.input.key.KeyEventType
15+
import androidx.compose.ui.input.key.key
16+
import androidx.compose.ui.input.key.type
17+
import androidx.compose.ui.window.Window
18+
import androidx.compose.ui.window.application
19+
import kotlin.math.max
20+
import kotlin.math.min
21+
22+
data class Slide(val content: @Composable () -> Unit)
23+
24+
val slides = listOf(
25+
Slide {
26+
Text("Slide 1")
27+
},
28+
Slide {
29+
Text("Slide 2")
30+
},
31+
);
32+
33+
@Composable
34+
fun presentation(currentSlideIndex: Int) {
35+
Box(
36+
Modifier
37+
.fillMaxSize()
38+
) {
39+
slides.forEachIndexed { slideIndex, slide ->
40+
AnimatedVisibility(
41+
visible = slideIndex == currentSlideIndex,
42+
) {
43+
slide.content()
44+
}
45+
}
46+
}
47+
}
48+
49+
// TODO try compose for web
50+
fun main() = application {
51+
var currentSlideIndex by remember { mutableStateOf(0) }
52+
Window(
53+
onCloseRequest = ::exitApplication,
54+
onKeyEvent = onKeyEvent@{ event ->
55+
if (event.type != KeyEventType.KeyDown) return@onKeyEvent false
56+
when (event.key) {
57+
Key.DirectionLeft -> currentSlideIndex = max(currentSlideIndex - 1, 0)
58+
Key.DirectionRight -> currentSlideIndex = min(currentSlideIndex + 1, slides.size - 1)
59+
}
60+
return@onKeyEvent true
61+
}
62+
) {
63+
presentation(currentSlideIndex)
64+
}
65+
}

0 commit comments

Comments
 (0)