113 lines
3.9 KiB
Kotlin
113 lines
3.9 KiB
Kotlin
import androidx.compose.foundation.layout.PaddingValues
|
|
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
|
|
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
|
|
|
|
@Composable
|
|
fun WindowScope.DesktopWindow(
|
|
useDarkMode: Boolean,
|
|
topBar: @Composable () -> Unit,
|
|
content: @Composable (PaddingValues) -> Unit
|
|
) {
|
|
AppTheme(darkTheme = useDarkMode) {
|
|
Scaffold(
|
|
topBar = {
|
|
WindowDraggableArea {
|
|
topBar()
|
|
}
|
|
}
|
|
) { paddingValues ->
|
|
content(paddingValues)
|
|
}
|
|
}
|
|
}
|
|
|
|
@OptIn(ExperimentalMaterial3Api::class)
|
|
@Composable
|
|
fun AppBar(
|
|
useDarkMode: Boolean,
|
|
setDarkMode: (Boolean) -> Unit,
|
|
onCloseRequest: () -> Unit,
|
|
windowState: WindowState,
|
|
) {
|
|
TopAppBar(
|
|
navigationIcon = {
|
|
// TODO Icon(painterResource(Res.drawable.heart), null)
|
|
},
|
|
title = { Text(text = "Yet Another Einstein Puzzle") },
|
|
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),
|
|
)
|
|
}
|
|
},
|
|
)
|
|
} |