
Desktop custom window title bar
AppWindowTitleBar.kt
@Composable
fun WindowScope.AppWindowTitleBar(
state: WindowState,
onClose: () -> Unit,
onMinimize: () -> Unit = { state.isMinimized = state.isMinimized.not() },
onMaximize: () -> Unit = {
state.placement = if (state.placement == WindowPlacement.Maximized)
WindowPlacement.Floating else WindowPlacement.Maximized
},
) {
Box(Modifier.fillMaxWidth()) {
Row(Modifier.align(Alignment.TopEnd).padding(horizontal = 8.dp)) {
IconButton(onClick = onMinimize) { }
val isFloating = state.placement == WindowPlacement.Floating
IconButton(onClick = onMaximize) {
if (isFloating) // Icon Floating or Maximized
}
IconButton(onClick = onClose) { }
}
}
}
App.kt
fun main() {
application {
val state = rememberWindowState(
position = WindowPosition(Alignment.Center), size = DpSize(1280.dp, 768.dp)
)
PreComposeWindow(
state = state,
onCloseRequest = { exitApplication() },
undecorated = true, //transparent window must be undecorated
) {
App() // Main view
//
AppWindowTitleBar(state, onClose = { exitApplication() })
}
}
}