Ver Fonte

blur tests

milan jurkulák há 2 anos atrás
pai
commit
86ed8aacf3

+ 8 - 3
build.gradle.kts

@@ -4,6 +4,7 @@ plugins {
     alias(libs.plugins.kotlin.jvm)
     alias(libs.plugins.compose.desktop)
     alias(libs.plugins.kotlin.serialization)
+//    alias(libs.plugins.kotlin.kapt)
 //    id("dev.datlag.sekret") version "2.0.0-alpha-07"
 //    id("com.bintray.gradle.plugins.bintray")
 }
@@ -87,8 +88,8 @@ allprojects {
 //        implementation(libs.dbus.java.transport.native.unixsocket)
         // testing yet
         // anim
-        implementation("org.jetbrains.compose.animation:animation:1.7.0-alpha03")
-        implementation("org.jetbrains.compose.animation:animation-graphics:1.7.0-alpha03")
+//        implementation("org.jetbrains.compose.animation:animation:1.7.0-alpha03")
+//        implementation("org.jetbrains.compose.animation:animation-graphics:1.7.0-alpha03")
 //        // images metadata
 //        implementation("com.ashampoo:kim:0.18.4")
         // connectivity
@@ -99,8 +100,12 @@ allprojects {
         implementation("com.github.skydoves:flexible-bottomsheet-material3:0.1.5")
         // fs watcher
         implementation("io.github.irgaly.kfswatch:kfswatch:1.3.0")
+        // blur
+//        implementation("dev.chrisbanes.haze:haze:0.7.3")
         // java gnome
-        implementation("com.github.bailuk:java-gtk:0.5.0")
+//        implementation("com.github.bailuk:java-gtk:0.5.0")
+        // wayland
+//        implementation("org.freedesktop:wayland:1.4.0")
         // wnck
         // todo
         // compose debugger

+ 4 - 2
src/main/kotlin/eu/mjdev/desktop/components/appsmenu/AppsMenu.kt

@@ -56,7 +56,7 @@ fun AppsMenu(
     val appMenuMinWidth by remember { theme.appMenuMinWidthState }
     val appMenuMinHeight by remember { theme.appMenuMinHeightState }
     val menuPadding by remember { theme.appMenuOuterPaddingState }
-
+    //
     var items: List<Any> by remember(appCategories) { mutableStateOf(appCategories) }
     val onCategoryClick: (Category) -> Unit = { category ->
         items = appCategoriesAndApps[category.name]?.sortedBy { it.name } ?: emptyList()
@@ -81,7 +81,9 @@ fun AppsMenu(
                     menuState.onFocusChange(focused)
                     onFocusChange(focused)
                 },
-                content = { content() }
+                content = {
+                    content()
+                }
             )
         }
     }

+ 53 - 1
src/main/kotlin/eu/mjdev/desktop/windows/Window.kt

@@ -15,8 +15,12 @@ import androidx.compose.ui.window.*
 import eu.mjdev.desktop.windows.ChromeWindowState.Companion.rememberChromeWindowState
 import java.awt.*
 import java.awt.event.*
+import java.awt.image.BufferedImage
+import java.awt.image.ConvolveOp
+import java.awt.image.Kernel
 import java.util.*
 import javax.swing.JFrame
+import javax.swing.JPanel
 import kotlin.math.roundToInt
 
 @Suppress("FunctionName")
@@ -36,7 +40,7 @@ fun Window(
     onLostFocus: (window: ComposeWindow) -> Unit = {},
     onStateChanged: (window: ComposeWindow) -> Unit = {},
     onCloseRequest: () -> Unit,
-    state: ChromeWindowState =  rememberChromeWindowState(),
+    state: ChromeWindowState = rememberChromeWindowState(),
     visible: Boolean = true,
     title: String = "",
     icon: Painter? = null,
@@ -366,6 +370,7 @@ fun Window(
             create().apply {
                 this.compositionLocalContext = compositionLocalContext
                 this.exceptionHandler = windowExceptionHandlerFactory.exceptionHandler(this)
+//                BlurBackground.applyBlurBackground(this)
                 setContent(onPreviewKeyEvent, onKeyEvent, content)
             }
         },
@@ -378,6 +383,7 @@ fun Window(
             component.componentOrientation = layoutDirection.componentOrientation
             val wasDisplayable = component.isDisplayable
             update(component)
+//            BlurBackground.applyBlurBackground(component)
             if (!wasDisplayable && component.isDisplayable) {
                 component.contentPane.paint(component.contentPane.graphics)
             }
@@ -446,3 +452,49 @@ class WindowEventsAdapter(
         currentOnCloseRequest()
     }
 }
+
+@Suppress("unused")
+object BlurBackground {
+    private val blurKernel = floatArrayOf(
+        0.0625f, 0.125f, 0.0625f,
+        0.125f, 0.25f, 0.125f,
+        0.0625f, 0.125f, 0.0625f
+    )
+    private val kernel = Kernel(3, 3, blurKernel)
+    private val blurOp = ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null)
+
+    fun applyBlurBackground(frame: JFrame) {
+        try {
+            BufferedImage(
+                frame.width,
+                frame.height,
+                BufferedImage.TYPE_INT_ARGB
+            ).let { image ->
+                image.graphics.also { graphics ->
+                    frame.contentPane.paint(graphics)
+//                    graphics.dispose()
+                    blurOp.filter(image, null).let { blurredImage ->
+                        frame.contentPane = BackgroundPanel(blurredImage)
+//                        frame.contentPane.layout = null
+                    }
+                }
+            }
+        } catch (e: Throwable) {
+            e.printStackTrace()
+        }
+    }
+
+    private class BackgroundPanel(
+        private val image: BufferedImage
+    ) : JPanel() {
+        init {
+            isOpaque = false
+        }
+
+        override fun paintComponent(g: Graphics) {
+            super.paintComponent(g)
+            val r = g.clipBounds
+            g.drawImage(image, r.x, r.y, r.width, r.height, null)
+        }
+    }
+}