MainScreen.kt 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package eu.mjdev.desktop.screens
  2. import androidx.compose.desktop.ui.tooling.preview.Preview
  3. import androidx.compose.foundation.ExperimentalFoundationApi
  4. import androidx.compose.foundation.background
  5. import androidx.compose.foundation.layout.Box
  6. import androidx.compose.foundation.layout.fillMaxSize
  7. import androidx.compose.material.MaterialTheme
  8. import androidx.compose.runtime.*
  9. import androidx.compose.ui.Alignment
  10. import androidx.compose.ui.ExperimentalComposeUiApi
  11. import androidx.compose.ui.Modifier
  12. import androidx.compose.ui.input.pointer.PointerEventType
  13. import androidx.compose.ui.input.pointer.onPointerEvent
  14. import androidx.compose.ui.unit.dp
  15. import eu.mjdev.desktop.components.*
  16. import eu.mjdev.desktop.components.SlideMenuState.Companion.rememberSlideMenuState
  17. import eu.mjdev.desktop.components.appsmenu.AppsMenu
  18. import eu.mjdev.desktop.components.controlpanel.ControlPanel
  19. import eu.mjdev.desktop.components.desktoppanel.DesktopPanel
  20. import eu.mjdev.desktop.helpers.Palette.Companion.rememberPalette
  21. import eu.mjdev.desktop.provider.DesktopProvider
  22. import eu.mjdev.desktop.provider.LocalDesktop
  23. @OptIn(ExperimentalComposeUiApi::class, ExperimentalFoundationApi::class)
  24. @Suppress("FunctionName")
  25. @Preview
  26. @Composable
  27. fun MainScreen() = MaterialTheme {
  28. val api: DesktopProvider = LocalDesktop.current
  29. val palette = rememberPalette(api.currentUser.theme.backgroundColor)
  30. val panelState = rememberSlideMenuState(true, api.currentUser.config.autoHidePanel)
  31. val controlCenterState = rememberSlideMenuState()
  32. val menuState = rememberSlideMenuState()
  33. Box(
  34. modifier = Modifier.fillMaxSize().background(api.currentUser.theme.backgroundColor)
  35. ) {
  36. BackgroundImage(
  37. modifier = Modifier
  38. .fillMaxSize()
  39. .onPointerEvent(PointerEventType.Enter) {
  40. if (api.windowFocusState.isFocused) {
  41. controlCenterState.hide(0)
  42. panelState.hide(0)
  43. menuState.hide(0)
  44. }
  45. },
  46. backgroundColor = api.currentUser.theme.backgroundColor,
  47. backgrounds = api.appsProvider.backgrounds + api.currentUser.config.desktopBackgroundUrls,
  48. onChange = { src ->
  49. palette.update(src)
  50. api.currentUser.theme.backgroundColor = palette.backgroundColor
  51. }
  52. )
  53. // WidgetsPanel(
  54. // modifier = Modifier
  55. // .fillMaxSize()
  56. // .onPointerEvent(PointerEventType.Enter) {
  57. // if (api.windowFocusState.isFocused) {
  58. // controlCenterState.hide(0)
  59. // panelState.hide(0)
  60. // }
  61. // },
  62. // )
  63. AppsMenu(
  64. modifier = Modifier.align(Alignment.BottomStart),
  65. bottomY = 64.dp,
  66. state = menuState,
  67. backgroundColor = api.currentUser.theme.backgroundColor,
  68. )
  69. DesktopPanel(
  70. modifier = Modifier.align(api.currentUser.theme.panelLocation.alignment),
  71. state = panelState,
  72. backgroundColor = api.currentUser.theme.backgroundColor,
  73. onMenuIconClicked = {
  74. menuState.toggle()
  75. },
  76. onVisibilityChange = { visible ->
  77. if (visible) {
  78. controlCenterState.hide(0)
  79. }
  80. }
  81. )
  82. ControlPanel(
  83. modifier = Modifier.align(api.currentUser.theme.controlCenterLocation.alignment),
  84. state = controlCenterState,
  85. backgroundColor = api.currentUser.theme.backgroundColor,
  86. controlCenterExpandedWidth = api.currentUser.theme.controlCenterExpandedWidth,
  87. controlCenterDividerWidth = api.currentUser.theme.controlCenterDividerWidth,
  88. controlCenterIconColor = api.currentUser.theme.controlCenterIconColor,
  89. controlCenterIconSize = api.currentUser.theme.controlCenterIconSize,
  90. pages = api.controlCenterPages,
  91. onVisibilityChange = { visible ->
  92. if (visible) {
  93. panelState.hide(0)
  94. }
  95. }
  96. )
  97. }
  98. // launchedEffect {
  99. // runCatching {
  100. // Notification("Hello!", "I just wanted to say hello :)").apply {
  101. // setUrgency(Notification.UrgencyCritical)
  102. // }.send()
  103. // }
  104. // }
  105. }