Files
YAEP/composeApp/src/desktopMain/kotlin/desktop window.kt

113 lines
3.9 KiB
Kotlin
Raw Normal View History

2024-06-18 23:23:55 +02:00
import androidx.compose.foundation.layout.PaddingValues
2024-06-14 06:00:29 +02:00
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.window.WindowDraggableArea
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Switch
import androidx.compose.material3.SwitchDefaults
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
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 org.jetbrains.compose.resources.painterResource
import ui.theme.AppTheme
2024-06-17 05:21:50 +02:00
import yaep.composeapp.generated.resources.Res
import yaep.composeapp.generated.resources.moon
import yaep.composeapp.generated.resources.sun
import yaep.composeapp.generated.resources.window_close
import yaep.composeapp.generated.resources.window_maximize
import yaep.composeapp.generated.resources.window_minimize
2024-06-14 06:00:29 +02:00
@Composable
2024-06-17 05:21:50 +02:00
fun WindowScope.DesktopWindow(
2024-06-14 06:00:29 +02:00
useDarkMode: Boolean,
topBar: @Composable () -> Unit,
2024-06-18 23:23:55 +02:00
content: @Composable (PaddingValues) -> Unit
2024-06-14 06:00:29 +02:00
) {
AppTheme(darkTheme = useDarkMode) {
Scaffold(
topBar = {
WindowDraggableArea {
topBar()
}
}
) { paddingValues ->
2024-06-18 23:23:55 +02:00
content(paddingValues)
2024-06-14 06:00:29 +02:00
}
}
}
2024-06-17 05:21:50 +02:00
@OptIn(ExperimentalMaterial3Api::class)
2024-06-14 06:00:29 +02:00
@Composable
fun AppBar(
useDarkMode: Boolean,
setDarkMode: (Boolean) -> Unit,
onCloseRequest: () -> Unit,
windowState: WindowState,
) {
TopAppBar(
navigationIcon = {
// TODO Icon(painterResource(Res.drawable.heart), null)
},
2024-06-18 23:23:55 +02:00
title = { Text(text = "Yet Another Einstein Puzzle") },
2024-06-14 06:00:29 +02:00
actions = {
Switch(
checked = useDarkMode,
onCheckedChange = setDarkMode,
thumbContent = {
Icon(
painter = painterResource(
if (useDarkMode) {
Res.drawable.sun
} else {
Res.drawable.moon
}
),
contentDescription = null,
modifier = Modifier.size(SwitchDefaults.IconSize),
)
}
)
Spacer(Modifier.width(8.dp))
IconButton(
onClick = { windowState.isMinimized = !windowState.isMinimized }
) {
Icon(
painter = painterResource(Res.drawable.window_minimize),
contentDescription = null,
modifier = Modifier.size(SwitchDefaults.IconSize),
)
}
IconButton(
onClick = {
windowState.placement =
if (windowState.placement == WindowPlacement.Maximized)
WindowPlacement.Floating else WindowPlacement.Maximized
}
) {
Icon(
painter = painterResource(Res.drawable.window_maximize),
contentDescription = null,
modifier = Modifier.size(SwitchDefaults.IconSize),
)
}
IconButton(
onClick = onCloseRequest
) {
Icon(
painter = painterResource(Res.drawable.window_close),
contentDescription = null,
modifier = Modifier.size(SwitchDefaults.IconSize),
)
}
},
)
}