Main.kt 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package eu.mjdev.desktop
  2. import androidx.compose.foundation.layout.size
  3. import androidx.compose.material.MaterialTheme
  4. import androidx.compose.runtime.CompositionLocalProvider
  5. import androidx.compose.runtime.DisposableEffect
  6. import androidx.compose.ui.Alignment
  7. import androidx.compose.ui.Modifier
  8. import androidx.compose.ui.unit.dp
  9. import androidx.compose.ui.window.application
  10. import eu.mjdev.desktop.components.appsmenu.AppsMenu
  11. import eu.mjdev.desktop.components.charts.MemoryChart
  12. import eu.mjdev.desktop.components.controlcenter.ControlCenter
  13. import eu.mjdev.desktop.components.desktoppanel.DesktopPanel
  14. import eu.mjdev.desktop.components.sliding.VisibilityState.Companion.rememberVisibilityState
  15. import eu.mjdev.desktop.provider.DesktopProvider.Companion.LocalDesktop
  16. import eu.mjdev.desktop.provider.DesktopProvider.Companion.rememberDesktopProvider
  17. import eu.mjdev.desktop.windows.MainWindow
  18. fun main() = application(
  19. exitProcessOnExit = true
  20. ) {
  21. val api = rememberDesktopProvider()
  22. val controlCenterState = rememberVisibilityState()
  23. val panelState = rememberVisibilityState()
  24. val menuState = rememberVisibilityState()
  25. val handleMenuFocus: (Boolean) -> Unit = { focus ->
  26. if (!focus) {
  27. menuState.hide()
  28. }
  29. }
  30. val handlePanelFocus: (Boolean) -> Unit = { focus ->
  31. if (!focus) {
  32. if (!menuState.isVisible) {
  33. panelState.hide()
  34. }
  35. }
  36. }
  37. val handleControlCenterFocus: (Boolean) -> Unit = { focus ->
  38. if (!focus) {
  39. controlCenterState.hide()
  40. }
  41. }
  42. MaterialTheme {
  43. CompositionLocalProvider(
  44. LocalDesktop provides api
  45. ) {
  46. MainWindow(
  47. panelState = panelState, controlCenterState = controlCenterState, menuState = menuState
  48. ) {
  49. // ComposeWebView(
  50. // modifier = Modifier.size(640.dp, 480.dp).align(Alignment.Center)
  51. // )
  52. MemoryChart(
  53. modifier = Modifier.size(350.dp, 300.dp).align(Alignment.BottomEnd)
  54. )
  55. DesktopPanel(panelState = panelState,
  56. menuState = menuState,
  57. onMenuIconClicked = { menuState.toggle() },
  58. onFocusChange = { focus -> handlePanelFocus(focus) })
  59. AppsMenu(menuState = menuState,
  60. panelState = panelState,
  61. onFocusChange = { focus -> handleMenuFocus(focus) })
  62. ControlCenter(controlCenterState = controlCenterState,
  63. onFocusChange = { focus -> handleControlCenterFocus(focus) })
  64. }
  65. DisposableEffect(Unit) {
  66. onDispose {
  67. api.dispose()
  68. }
  69. }
  70. }
  71. }
  72. }