| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- package eu.mjdev.desktop
- import androidx.compose.foundation.layout.size
- import androidx.compose.material.MaterialTheme
- import androidx.compose.runtime.CompositionLocalProvider
- import androidx.compose.runtime.DisposableEffect
- import androidx.compose.runtime.rememberCoroutineScope
- import androidx.compose.ui.Alignment
- import androidx.compose.ui.Modifier
- import androidx.compose.ui.unit.dp
- import androidx.compose.ui.window.application
- import com.theapache64.rebugger.RebuggerConfig
- import eu.mjdev.desktop.components.appsmenu.AppsMenu
- import eu.mjdev.desktop.components.charts.MemoryChart
- import eu.mjdev.desktop.components.controlcenter.ControlCenter
- import eu.mjdev.desktop.components.desktoppanel.DesktopPanel
- import eu.mjdev.desktop.components.sliding.VisibilityState.Companion.rememberVisibilityState
- import eu.mjdev.desktop.extensions.Compose.asyncImageLoader
- import eu.mjdev.desktop.provider.DesktopProvider
- import eu.mjdev.desktop.provider.DesktopProvider.Companion.LocalDesktop
- import eu.mjdev.desktop.windows.MainWindow
- fun main() = application(
- exitProcessOnExit = true
- ) {
- val scope = rememberCoroutineScope()
- val controlCenterState = rememberVisibilityState()
- val panelState = rememberVisibilityState()
- val menuState = rememberVisibilityState()
- val handleMenuFocus: (Boolean) -> Unit = { focus ->
- if (!menuState.isWindowFocus && !focus) {
- menuState.hide()
- }
- }
- val handlePanelFocus: (Boolean) -> Unit = { //focus ->
- // val somethingVisible = menuState.isVisible || controlCenterState.isVisible
- // if (!focus && !somethingVisible) {
- // panelState.hide()
- // }
- }
- val handleControlCenterFocus: (Boolean) -> Unit = { focus ->
- if (!focus) {
- controlCenterState.hide()
- }
- }
- RebuggerConfig.init(
- tag = "Composition",
- logger = { tag, message ->
- println("$tag > $message")
- }
- )
- MaterialTheme {
- CompositionLocalProvider(
- LocalDesktop providesDefault DesktopProvider(
- scope = scope,
- imageLoader = asyncImageLoader()
- ),
- ) {
- val api: DesktopProvider = LocalDesktop.current
- MainWindow(
- panelState = panelState,
- controlCenterState = controlCenterState,
- menuState = menuState
- ) {
- // ComposeWebView(
- // modifier = Modifier.size(640.dp, 480.dp).align(Alignment.Center)
- // )
- MemoryChart(
- modifier = Modifier.size(350.dp, 300.dp).align(Alignment.BottomEnd)
- )
- DesktopPanel(
- panelState = panelState,
- onMenuIconClicked = {
- menuState.toggle()
- },
- onFocusChange = { focus -> handlePanelFocus(focus) }
- )
- AppsMenu(
- menuState = menuState,
- panelState = panelState,
- onFocusChange = { focus -> handleMenuFocus(focus) }
- )
- ControlCenter(
- controlCenterState = controlCenterState,
- onFocusChange = { focus -> handleControlCenterFocus(focus) }
- )
- }
- DisposableEffect(Unit) {
- onDispose {
- api.dispose()
- }
- }
- }
- }
- }
|