Add Keyboard Control

This commit is contained in:
2025-06-02 06:06:11 +02:00
parent 54b1810606
commit 93103e4e49
38 changed files with 1824 additions and 418 deletions

View File

@@ -16,10 +16,12 @@ import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.input.key.onKeyEvent
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.WindowPlacement
import androidx.compose.ui.window.WindowScope
import androidx.compose.ui.window.WindowState
import ch.dissem.yaep.ui.common.focus.FocusFollowingSelectionManager
import ch.dissem.yaep.ui.common.theme.AppTheme
import org.jetbrains.compose.resources.painterResource
import org.jetbrains.compose.resources.stringResource
@@ -40,11 +42,13 @@ import yaep.desktop.generated.resources.Res as DRes
@Composable
fun WindowScope.DesktopWindow(
useDarkMode: Boolean,
selectionManager: FocusFollowingSelectionManager,
topBar: @Composable () -> Unit,
content: @Composable (PaddingValues) -> Unit
) {
AppTheme(darkTheme = useDarkMode) {
Scaffold(
modifier = Modifier.onKeyEvent { event -> selectionManager.onKeyEvent(event) },
topBar = {
WindowDraggableArea {
topBar()

View File

@@ -18,6 +18,7 @@ import androidx.compose.ui.window.application
import androidx.compose.ui.window.rememberWindowState
import ch.dissem.yaep.domain.generateGame
import ch.dissem.yaep.ui.common.App
import ch.dissem.yaep.ui.common.focus.FocusFollowingSelectionManager
import ch.dissem.yaep.ui.common.theme.emojiFontFamily
import org.jetbrains.compose.resources.painterResource
import org.jetbrains.compose.resources.stringResource
@@ -47,10 +48,12 @@ fun main(): Unit = application {
state = windowState,
icon = painterResource(DRes.drawable.ic_launcher)
) {
val rootSelectionManager = FocusFollowingSelectionManager
var useDarkMode by remember { mutableStateOf(true) }
var resetCluesBeacon by remember { mutableStateOf(Any()) }
DesktopWindow(
useDarkMode = useDarkMode,
selectionManager = rootSelectionManager,
topBar = {
AppBar(
useDarkMode = useDarkMode,
@@ -67,8 +70,8 @@ fun main(): Unit = application {
) {
App(
modifier = Modifier.padding(it),
rootSelectionManager = rootSelectionManager,
spacing = 8.dp,
selectDirectly = true,
game = game,
onNewGame = { game = generateGame() },
resetCluesBeacon = resetCluesBeacon