• Igor Demin's avatar
    Windows. Fix a crash on CI without `dcomp.dll` (#909) · 7a6f62bc
    Igor Demin authored
    ## Issues fixed
    
    Some CI don't have this library and when we run an application we have a
    crash:
    ```
    ...\skiko-windows-x64.dll: Can't find dependent libraries
    java.lang.UnsatisfiedLinkError: ...\skiko-windows-x64.dll: Can't find dependent libraries
    	at java.base/jdk.internal.loader.NativeLibraries.load(Native Method)
    	at java.base/jdk.internal.loader.NativeLibraries$NativeLibraryImpl.open(NativeLibraries.java:388)
    	at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:232)
    	at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:174)
    	at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2394)
    	at java.base/java.lang.Runtime.load0(Runtime.java:755)
    	at java.base/java.lang.System.load(System.java:1957)
    	at org.jetbrains.skiko.Library.loadLibraryOrCopy(Library.kt:17)
    	at org.jetbrains.skiko.Library.findAndLoad(Library.kt:111)
    	at org.jetbrains.skiko.Library.load(Library.kt:56)
    	at org.jetbrains.skia.impl.Library$Companion.staticLoad(Library.jvm.kt:12)
    	at org.jetbrains.skia.Surface.<clinit>(Surface.kt:539)
    	at androidx.compose.ui.test.SkikoComposeUiTest.<init>(ComposeUiTest.skikoMain.kt:172)
    	at androidx.compose.ui.test.SkikoComposeUiTest.<init>(ComposeUiTest.skikoMain.kt:118)
    	at androidx.compose.ui.test.SkikoComposeUiTest.<init>(ComposeUiTest.skikoMain.kt:139)
    	at androidx.compose.ui.test.SkikoComposeUiTest.<init>(ComposeUiTest.skikoMain.kt:134)
    	at androidx.compose.ui.test.junit4.DesktopComposeTestRule.<init>(DesktopComposeTestRule.desktop.kt:54)
    	at androidx.compose.ui.test.junit4.DesktopComposeTestRule_desktopKt.createComposeRule(DesktopComposeTestRule.desktop.kt:41)
    ```
    
    Reported in
    https://jetbrains.slack.com/archives/C5VQN94SH/p1712564847131459?thread_ts=1712091431.760099&cid=C5VQN94SH
    
    ## Proposed changes
    Load this library in runtime, and fallback to
    `CreateSwapChainForComposition`
    
    ## Testing
    1. Run Compose with transparent window:
    ```
    import androidx.compose.foundation.layout.fillMaxSize
    import androidx.compose.foundation.layout.padding
    import androidx.compose.foundation.shape.RoundedCornerShape
    import androidx.compose.material.Surface
    import androidx.compose.runtime.mutableStateOf
    import androidx.compose.runtime.remember
    import androidx.compose.ui.Modifier
    import androidx.compose.ui.draw.shadow
    import androidx.compose.ui.graphics.Color
    import androidx.compose.ui.unit.dp
    import androidx.compose.ui.window.Window
    import androidx.compose.ui.window.application
    import androidx.compose.material.Text
    import androidx.compose.runtime.*
    
    fun main() = application {
        var isOpen by remember { mutableStateOf(true) }
        if (isOpen) {
            Window(
                onCloseRequest = { isOpen = false },
                title = "Transparent Window Example",
                transparent = true,
                undecorated = true, //transparent window must be undecorated
            ) {
                Surface(
                    modifier = Modifier.fillMaxSize().padding(5.dp).shadow(3.dp, RoundedCornerShape(20.dp)),
                    color = Color(55, 55, 55),
                    shape = RoundedCornerShape(20.dp) //window has round corners now
                ) {
                    Text("Hello World!", color = Color.White)
                }
            }
        }
    }
    ```
    Transparency should work, there shouldn't be errors in the log.
    
    2. change `transparent = false`
    
    Transparency shouldn't work, there shouldn't be errors in the log.
    
    This should be tested by QA.
    
    ---------
    Co-authored-by: 's avatarIvan Matkov <ivan.matkov@jetbrains.com>
    7a6f62bc
Name
Last commit
Last update
.github/workflows Loading commit data...
.run Loading commit data...
gradle/wrapper Loading commit data...
samples Loading commit data...
skiko Loading commit data...
.gitignore Loading commit data...
DEVELOPMENT.md Loading commit data...
LICENSE Loading commit data...
README.md Loading commit data...
gradle.properties Loading commit data...
gradlew Loading commit data...
gradlew.bat Loading commit data...
settings.gradle.kts Loading commit data...