Desktop Window (WIP)

This commit is contained in:
2024-06-14 06:00:29 +02:00
parent 98c4d27741
commit 6384a65cbb
13 changed files with 818 additions and 5 deletions

View File

@@ -0,0 +1,108 @@
import androidx.compose.desktop.ui.tooling.preview.Preview
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.ExperimentalResourceApi
import org.jetbrains.compose.resources.painterResource
import ui.theme.AppTheme
@Composable
@OptIn(ExperimentalMaterial3Api::class, ExperimentalResourceApi::class)
fun WindowScope.App(
useDarkMode: Boolean,
topBar: @Composable () -> Unit,
content: @Composable () -> Unit
) {
AppTheme(darkTheme = useDarkMode) {
Scaffold(
topBar = {
WindowDraggableArea {
topBar()
}
}
) { paddingValues ->
content()
}
}
}
@Composable
fun AppBar(
useDarkMode: Boolean,
setDarkMode: (Boolean) -> Unit,
onCloseRequest: () -> Unit,
windowState: WindowState,
) {
TopAppBar(
navigationIcon = {
// TODO Icon(painterResource(Res.drawable.heart), null)
},
title = { Text(text = "Health Check Monitor") },
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),
)
}
},
)
}