Main.kt 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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.runtime.rememberCoroutineScope
  7. import androidx.compose.ui.Alignment
  8. import androidx.compose.ui.Modifier
  9. import androidx.compose.ui.unit.dp
  10. import androidx.compose.ui.window.application
  11. import com.theapache64.rebugger.RebuggerConfig
  12. import eu.mjdev.desktop.components.appsmenu.AppsMenu
  13. import eu.mjdev.desktop.components.charts.MemoryChart
  14. import eu.mjdev.desktop.components.controlcenter.ControlCenter
  15. import eu.mjdev.desktop.components.desktoppanel.DesktopPanel
  16. import eu.mjdev.desktop.components.sliding.VisibilityState.Companion.rememberVisibilityState
  17. import eu.mjdev.desktop.extensions.Compose.asyncImageLoader
  18. import eu.mjdev.desktop.provider.DesktopProvider
  19. import eu.mjdev.desktop.provider.DesktopProvider.Companion.LocalDesktop
  20. import eu.mjdev.desktop.windows.MainWindow
  21. fun main() = application(
  22. exitProcessOnExit = true
  23. ) {
  24. val scope = rememberCoroutineScope()
  25. val controlCenterState = rememberVisibilityState()
  26. val panelState = rememberVisibilityState()
  27. val menuState = rememberVisibilityState()
  28. val handleMenuFocus: (Boolean) -> Unit = { focus ->
  29. if (!menuState.isWindowFocus && !focus) {
  30. menuState.hide()
  31. }
  32. }
  33. val handlePanelFocus: (Boolean) -> Unit = { //focus ->
  34. // val somethingVisible = menuState.isVisible || controlCenterState.isVisible
  35. // if (!focus && !somethingVisible) {
  36. // panelState.hide()
  37. // }
  38. }
  39. val handleControlCenterFocus: (Boolean) -> Unit = { focus ->
  40. if (!focus) {
  41. controlCenterState.hide()
  42. }
  43. }
  44. RebuggerConfig.init(
  45. tag = "Composition",
  46. logger = { tag, message ->
  47. println("$tag > $message")
  48. }
  49. )
  50. MaterialTheme {
  51. CompositionLocalProvider(
  52. LocalDesktop providesDefault DesktopProvider(
  53. scope = scope,
  54. imageLoader = asyncImageLoader()
  55. ),
  56. ) {
  57. val api: DesktopProvider = LocalDesktop.current
  58. MainWindow(
  59. panelState = panelState,
  60. controlCenterState = controlCenterState,
  61. menuState = menuState
  62. ) {
  63. // ComposeWebView(
  64. // modifier = Modifier.size(640.dp, 480.dp).align(Alignment.Center)
  65. // )
  66. MemoryChart(
  67. modifier = Modifier.size(350.dp, 300.dp).align(Alignment.BottomEnd)
  68. )
  69. DesktopPanel(
  70. panelState = panelState,
  71. onMenuIconClicked = {
  72. menuState.toggle()
  73. },
  74. onFocusChange = { focus -> handlePanelFocus(focus) }
  75. )
  76. AppsMenu(
  77. menuState = menuState,
  78. panelState = panelState,
  79. onFocusChange = { focus -> handleMenuFocus(focus) }
  80. )
  81. ControlCenter(
  82. controlCenterState = controlCenterState,
  83. onFocusChange = { focus -> handleControlCenterFocus(focus) }
  84. )
  85. }
  86. DisposableEffect(Unit) {
  87. onDispose {
  88. api.dispose()
  89. }
  90. }
  91. }
  92. }
  93. }