Bläddra i källkod

desktop pre-implementation

desktop pre-implementation
Milan Jurkulak 2 år sedan
förälder
incheckning
f11b5e3d4b

+ 10 - 2
README.md

@@ -1,2 +1,10 @@
-# mjdev-desktop
-An kotlin compose desktop environment like DDE Desktop
+# Mjdev Desktop
+
+An kotlin compose desktop environment like DDE Desktop.
+New desktop environment with many functionality i miss in another desktops.
+Build on compose kotlin and jvm.
+
+# screenshots
+
+![Snímka obrazovky z 2024-09-19 19-20-45.png](screenshots/Sn%C3%ADmka%20obrazovky%20z%202024-09-19%2019-20-45.png)
+![Snímka obrazovky z 2024-09-19 19-20-26.png](screenshots/Sn%C3%ADmka%20obrazovky%20z%202024-09-19%2019-20-26.png)

BIN
screenshots/Snímka obrazovky z 2024-09-19 19-20-26.png


BIN
screenshots/Snímka obrazovky z 2024-09-19 19-20-45.png


+ 13 - 17
src/main/kotlin/eu/mjdev/desktop/Main.kt

@@ -1,16 +1,14 @@
 package eu.mjdev.desktop
 
-import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.material.MaterialTheme
 import androidx.compose.runtime.CompositionLocalProvider
 import androidx.compose.runtime.DisposableEffect
-import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
-import androidx.compose.ui.unit.dp
 import androidx.compose.ui.window.application
 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.desktop.Desktop
 import eu.mjdev.desktop.components.desktoppanel.DesktopPanel
 import eu.mjdev.desktop.components.sliding.VisibilityState.Companion.rememberVisibilityState
 import eu.mjdev.desktop.provider.DesktopProvider.Companion.LocalDesktop
@@ -27,13 +25,11 @@ fun main(
     val controlCenterState = rememberVisibilityState()
     val panelState = rememberVisibilityState()
     val menuState = rememberVisibilityState()
-
     val handleMenuFocus: (Boolean) -> Unit = { focus ->
         if (!menuState.isWindowFocus && !focus && !controlCenterState.isWindowFocus) {
             menuState.hide()
         }
     }
-
     val handlePanelFocus: (Boolean) -> Unit = { focus ->
         if (!focus) {
             if (!menuState.isVisible) {
@@ -41,34 +37,34 @@ fun main(
             }
         }
     }
-
     val handleControlCenterFocus: (Boolean) -> Unit = { focus ->
         if (!focus) {
             controlCenterState.hide()
         }
     }
-
     MaterialTheme {
         CompositionLocalProvider(
             LocalDesktop provides api
         ) {
             MainWindow(
-                panelState = panelState, controlCenterState = controlCenterState, menuState = menuState
+                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)
+                Desktop(
+                    modifier = Modifier.fillMaxSize()
                 )
-                DesktopPanel(panelState = panelState,
+                DesktopPanel(
+                    panelState = panelState,
                     menuState = menuState,
                     onMenuIconClicked = { menuState.toggle() },
                     onFocusChange = { focus -> handlePanelFocus(focus) })
-                AppsMenu(menuState = menuState,
+                AppsMenu(
+                    menuState = menuState,
                     panelState = panelState,
                     onFocusChange = { focus -> handleMenuFocus(focus) })
-                ControlCenter(controlCenterState = controlCenterState,
+                ControlCenter(
+                    controlCenterState = controlCenterState,
                     onFocusChange = { focus -> handleControlCenterFocus(focus) })
             }
             DisposableEffect(Unit) {

+ 23 - 23
src/main/kotlin/eu/mjdev/desktop/components/charts/DualDonutChart.kt → src/main/kotlin/eu/mjdev/desktop/components/charts/DonutChart.kt

@@ -3,46 +3,36 @@ package eu.mjdev.desktop.components.charts
 import androidx.compose.animation.core.AnimationSpec
 import androidx.compose.animation.core.TweenSpec
 import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
 import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.text.TextStyle
 import com.aay.compose.baseComponents.model.LegendPosition
 import com.aay.compose.donutChart.DonutChart
 import com.aay.compose.donutChart.model.PieChartData
-import eu.mjdev.desktop.extensions.Compose.DarkDarkGray
-import eu.mjdev.desktop.extensions.Compose.rememberCalculated
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.isActive
 
+@Suppress("FunctionName")
 @Composable
-fun DualDonutChart(
+fun DonutChart(
     modifier: Modifier = Modifier,
     title: String = "",
     textColor: Color = Color.White,
     outerCircularColor: Color = Color.White,
     innerCircularColor: Color = Color.White,
     ratioLineColor: Color = Color.White,
-    firstValue: Double = 0.0,
-    secondValue: Double = 0.0,
-    firstColor: Color = Color.DarkDarkGray,
-    secondColor: Color = Color.White,
-    firstTitle: String = "",
-    secondTitle: String = "",
-    animation: AnimationSpec<Float> = TweenSpec(durationMillis = 3000),
+    animationDuration: Int = 3000,
+    refreshTimeout: Long = 5000L,
+    animation: AnimationSpec<Float> = TweenSpec(durationMillis = animationDuration),
     legendPosition: LegendPosition = LegendPosition.BOTTOM,
+    data: () -> List<PieChartData>
 ) {
-    val data by rememberCalculated(
-        firstValue,
-        firstColor,
-        firstTitle,
-        secondValue,
-        secondColor,
-        secondTitle
-    ) {
-        listOf(
-            PieChartData(firstValue, firstColor, firstTitle),
-            PieChartData(secondValue, secondColor, secondTitle)
-        )
-    }
+    var data by remember { mutableStateOf(listOf<PieChartData>()) }
     DonutChart(
         modifier = modifier,
         pieChartData = data,
@@ -56,4 +46,14 @@ fun DualDonutChart(
         animation = animation,
         legendPosition = legendPosition
     )
+    LaunchedEffect(Unit) {
+        while (isActive) {
+            data().let { newData ->
+                if (data != newData) {
+                    data = newData
+                }
+            }
+            delay(refreshTimeout)
+        }
+    }
 }

+ 1 - 1
src/main/kotlin/eu/mjdev/desktop/components/MeasureUnconstrainedView.kt → src/main/kotlin/eu/mjdev/desktop/components/custom/MeasureUnconstrainedView.kt

@@ -1,4 +1,4 @@
-package eu.mjdev.desktop.components
+package eu.mjdev.desktop.components.custom
 
 import androidx.compose.material.Text
 import androidx.compose.runtime.Composable

+ 32 - 0
src/main/kotlin/eu/mjdev/desktop/components/desktop/Desktop.kt

@@ -0,0 +1,32 @@
+package eu.mjdev.desktop.components.desktop
+
+import androidx.compose.desktop.ui.tooling.preview.Preview
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.size
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.unit.dp
+import eu.mjdev.desktop.components.desktop.widgets.MemoryChart
+
+@Suppress("FunctionName")
+@Preview
+@Composable
+fun Desktop(
+    modifier: Modifier = Modifier
+) = Box(
+    modifier = modifier
+) {
+    Box(
+        modifier = modifier
+    ) {
+//        ComposeWebView(
+//            modifier = Modifier.size(640.dp, 480.dp)
+        //            .align(Alignment.Center)
+//        )
+        MemoryChart(
+            modifier = Modifier.size(350.dp, 300.dp)
+                .align(Alignment.BottomEnd)
+        )
+    }
+}

+ 18 - 29
src/main/kotlin/eu/mjdev/desktop/components/charts/MemoryChart.kt → src/main/kotlin/eu/mjdev/desktop/components/desktop/widgets/MemoryChart.kt

@@ -1,25 +1,21 @@
-package eu.mjdev.desktop.components.charts
+package eu.mjdev.desktop.components.desktop.widgets
 
 import androidx.compose.animation.core.AnimationSpec
 import androidx.compose.animation.core.TweenSpec
 import androidx.compose.runtime.Composable
-import androidx.compose.runtime.LaunchedEffect
 import androidx.compose.runtime.getValue
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.Color
 import com.aay.compose.baseComponents.model.LegendPosition
+import com.aay.compose.donutChart.model.PieChartData
+import eu.mjdev.desktop.components.charts.DonutChart
 import eu.mjdev.desktop.components.draggable.DraggableView
-import eu.mjdev.desktop.extensions.Compose.rememberState
 import eu.mjdev.desktop.helpers.internal.Palette.Companion.rememberBackgroundColor
-import eu.mjdev.desktop.helpers.internal.Palette.Companion.rememberBorderColor
 import eu.mjdev.desktop.helpers.internal.Palette.Companion.rememberIconTintColor
-import eu.mjdev.desktop.helpers.internal.Palette.Companion.rememberTextColor
 import eu.mjdev.desktop.helpers.system.MemInfo
 import eu.mjdev.desktop.helpers.system.MemInfo.Companion.toReadable
 import eu.mjdev.desktop.provider.DesktopProvider
 import eu.mjdev.desktop.provider.DesktopProvider.Companion.LocalDesktop
-import kotlinx.coroutines.delay
-import kotlinx.coroutines.isActive
 
 @Suppress("FunctionName")
 @Composable
@@ -39,34 +35,27 @@ fun MemoryChart(
     dragEnabled = dragEnabled
 ) {
     val backgroundColor by rememberBackgroundColor(api)
-    val textColor by rememberTextColor(api)
-    val borderColor by rememberBorderColor(api)
     val iconsTintColor by rememberIconTintColor(api)
-    val memData = rememberState(MemInfo())
-    DualDonutChart(
+    DonutChart(
         modifier = modifier,
         title = mainTitle,
-        textColor = textColor,
-        outerCircularColor = borderColor,
-        innerCircularColor = borderColor,
+        textColor = iconsTintColor,
+        outerCircularColor = iconsTintColor,
+        innerCircularColor = iconsTintColor,
         ratioLineColor = ratioLineColor,
-        secondColor = backgroundColor,
-        firstColor = iconsTintColor,
-        secondValue = memData.value.free,
-        firstValue = memData.value.used,
-        secondTitle = freeTitle.plus(": ").plus(memData.value.free.toReadable()),
-        firstTitle = usedTitle.plus(": ").plus(memData.value.used.toReadable()),
+        refreshTimeout = updateTimeOut,
         animation = animation,
         legendPosition = legendPosition
-    )
-    LaunchedEffect(Unit) {
-        while (isActive) {
-            MemInfo().let { n ->
-                if (memData.value.percent != n.percent) {
-                    memData.value = n
-                }
-            }
-            delay(updateTimeOut)
+    ) {
+        MemInfo().let { mem ->
+            val secondValue = mem.free
+            val firstValue = mem.used
+            val secondTitle = freeTitle.plus(": ").plus(mem.free.toReadable())
+            val firstTitle = usedTitle.plus(": ").plus(mem.used.toReadable())
+            listOf(
+                PieChartData(firstValue, iconsTintColor, firstTitle),
+                PieChartData(secondValue, backgroundColor, secondTitle)
+            )
         }
     }
 }

+ 0 - 16
src/main/kotlin/eu/mjdev/desktop/components/widgets/WidgetsPanel.kt

@@ -1,16 +0,0 @@
-package eu.mjdev.desktop.components.widgets
-
-import androidx.compose.desktop.ui.tooling.preview.Preview
-import androidx.compose.foundation.layout.Box
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
-
-@Suppress("FunctionName")
-@Preview
-@Composable
-fun WidgetsPanel(
-    modifier: Modifier = Modifier
-) = Box(
-    modifier = modifier
-) {
-}