Minimize/Maximize window in Jetpack Compose

821 Views Asked by At

Is there a way to maximize or minimize programmatically the window with Jetpack Compose Desktop ?

I'm thinking about that :

fun main() {
    application {
        Window(
            title = "My Application",
            focusable = true,
            onCloseRequest = { exitApplication() }
        ) {
            MyMaterialTheme {
                Button(onClick = { ...Minimize or Maximize... }) {
                    Text("Test")
                }
            }
        }
    }
}
2

There are 2 best solutions below

2
On BEST ANSWER

Yes, You can do it by this:


fun main() {
    val state = rememberWindowState()

    application {
        Window(
            state = stateAddress
        ) {
            MyMaterialTheme {
                Button(onClick = { state.isMinimized = state.isMinimized.not() }) {
                    Text("Frms")
                }
            }
        }
    }
}
0
On

enter image description here

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() })
        }
    }
}