Desktop Window (WIP)
This commit is contained in:
108
composeApp/src/desktopMain/kotlin/desktop window.kt
Normal file
108
composeApp/src/desktopMain/kotlin/desktop window.kt
Normal 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),
|
||||
)
|
||||
}
|
||||
},
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user