Ver Fonte

code improvements & grayscale modifier

Milan Jurkulak há 1 ano atrás
pai
commit
eafc6b118a

+ 1 - 1
composeApp/src/androidMain/kotlin/org/mjdev/desktop/activity/MainActivity.kt

@@ -22,7 +22,7 @@ import androidx.core.view.WindowCompat
 import androidx.core.view.WindowInsetsCompat
 import androidx.core.view.WindowInsetsControllerCompat
 import com.google.accompanist.permissions.ExperimentalPermissionsApi
-import org.mjdev.desktop.MainView
+import org.mjdev.desktop.main.MainView
 import org.mjdev.desktop.context.DesktopContext
 import org.mjdev.desktop.context.LocalDesktopContext
 import org.mjdev.desktop.helpers.permission.rememberPermissionManager

+ 4 - 2
composeApp/src/androidMain/kotlin/org/mjdev/desktop/MainView.kt → composeApp/src/androidMain/kotlin/org/mjdev/desktop/main/MainView.kt

@@ -1,4 +1,4 @@
-package org.mjdev.desktop
+package org.mjdev.desktop.main
 
 import android.annotation.SuppressLint
 import androidx.compose.foundation.layout.Box
@@ -29,6 +29,7 @@ import org.mjdev.desktop.extensions.Compose.preview
 import org.mjdev.desktop.extensions.LaunchedEffect.runAsync
 import org.mjdev.desktop.extensions.MutableStateExt.rememberCalculated
 import org.mjdev.desktop.components.desktop.widgets.MemoryChart
+import org.mjdev.desktop.extensions.Compose.greyScale
 
 @SuppressLint("ComposableNaming")
 @Composable
@@ -59,7 +60,8 @@ fun MainView() = withDesktopContext {
     }
     // todo not showing nothing
     Box(
-        modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center
+        modifier = Modifier.fillMaxSize(),
+        contentAlignment = Alignment.Center
     ) {
         // todo, something prevent preview
         if (!isDesign) {

+ 1 - 1
composeApp/src/commonMain/kotlin/org/mjdev/desktop/components/desktop/Desktop.kt

@@ -31,7 +31,7 @@ fun Desktop(
     onTooltip: (item: Any?) -> Unit = {},
     onLeftMouseClick: () -> Unit = {},
     onRightMouseClick: () -> Unit = {},
-// todo
+    // todo
     widgets: @Composable () -> Unit = {},
 ) = withDesktopContext {
     TooltipArea(

+ 30 - 0
composeApp/src/commonMain/kotlin/org/mjdev/desktop/extensions/Compose.kt

@@ -24,7 +24,13 @@ import androidx.compose.runtime.rememberCoroutineScope
 import androidx.compose.runtime.snapshots.SnapshotStateList
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.DrawModifier
+import androidx.compose.ui.geometry.Rect
 import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.ColorFilter
+import androidx.compose.ui.graphics.ColorMatrix
+import androidx.compose.ui.graphics.Paint
+import androidx.compose.ui.graphics.drawscope.ContentDrawScope
 import androidx.compose.ui.input.pointer.pointerInput
 import androidx.compose.ui.platform.LocalInspectionMode
 import androidx.compose.ui.unit.Dp
@@ -41,6 +47,7 @@ import org.mjdev.desktop.extensions.Modifier.size
 import org.mjdev.desktop.helpers.fuzzywuzzy.FuzzySearch
 import org.mjdev.desktop.interfaces.IDesktopContext
 import kotlin.coroutines.CoroutineContext
+import androidx.compose.ui.graphics.drawscope.drawIntoCanvas
 
 object Compose {
 
@@ -271,4 +278,27 @@ object Compose {
             content = content
         )
     }
+
+    class GreyScaleModifier : DrawModifier {
+        override fun ContentDrawScope.draw() {
+            val saturationMatrix = ColorMatrix().apply { setToSaturation(0.3f) }
+            val saturationFilter = ColorFilter.colorMatrix(saturationMatrix)
+            val paint = Paint().apply {
+                colorFilter = saturationFilter
+            }
+            drawIntoCanvas { canvas ->
+                canvas.saveLayer(Rect(
+                    0f,
+                    0f,
+                    size.width,
+                    size.height),
+                    paint
+                )
+                drawContent()
+                canvas.restore()
+            }
+        }
+    }
+
+    fun Modifier.greyScale(): Modifier = this then GreyScaleModifier()
 }