1. 25 Sep, 2024 2 commits
  2. 18 Sep, 2024 2 commits
  3. 17 Sep, 2024 1 commit
  4. 09 Sep, 2024 1 commit
  5. 16 Aug, 2024 1 commit
  6. 14 Aug, 2024 1 commit
  7. 12 Aug, 2024 2 commits
  8. 07 Aug, 2024 1 commit
  9. 05 Aug, 2024 1 commit
    • Oleksandr Karpovich's avatar
      Fix skia download destination directory (#971) · c1f81974
      Oleksandr Karpovich authored
      The download directory path now depends on the buildType: Debug and
      Release
      
      
      ___
      It affected our buildServer CI pipeline where it builds Release first
      and then Debug. And downloadTask was considered UP-TO-DATE when Debug
      build was attempted. Therefore the build used "Release" version of skia
      instead of "Debug. "
      
      Added a Debug build to the githiub workflow too.
      c1f81974
  10. 02 Aug, 2024 1 commit
  11. 30 Jul, 2024 1 commit
  12. 23 Jul, 2024 2 commits
  13. 10 Jul, 2024 1 commit
  14. 09 Jul, 2024 3 commits
  15. 19 Jun, 2024 1 commit
  16. 13 Jun, 2024 1 commit
  17. 12 Jun, 2024 2 commits
  18. 11 Jun, 2024 2 commits
  19. 10 Jun, 2024 1 commit
  20. 28 May, 2024 1 commit
  21. 27 May, 2024 1 commit
  22. 21 May, 2024 2 commits
  23. 09 May, 2024 1 commit
  24. 26 Apr, 2024 1 commit
    • Elijah Semyonov's avatar
      Fix crash when creating SwingRedrawer on DirectX (#917) · 57dea506
      Elijah Semyonov authored
      ### Changes
      Throw `RenderException` when constructing `Direct3DSwingRedrawer` with
      `nullptr` device. (Similar to `Direct3DRedrawer`)
      
      To avoid crash in:
      ```
      DirectXOffscreenDevice *d3dDevice = fromJavaPointer<DirectXOffscreenDevice *>(devicePtr);
      GrD3DBackendContext backendContext = d3dDevice->backendContext;
      return toJavaPointer(GrDirectContext::MakeDirect3D(backendContext).release());
      ```
      
      ### Fixes
      
      Speculative fix for crash with a stack head below:
      ```
      ---------------  T H R E A D  ---------------
      
      Current thread (0x000001cbcb0793f0):  JavaThread "AWT-EventQueue-0" [_thread_in_native, id=16744, stack(0x0000009488c00000,0x0000009488d00000)]
      
      Stack: [0x0000009488c00000,0x0000009488d00000],  sp=0x0000009488cfc670,  free space=1009k
      Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
      C  [skiko-windows-x64.dll+0x58afa]
      
      Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
      j  org.jetbrains.skiko.swing.Direct3DSwingRedrawer.makeDirectXContext(J)J+0
      ```
      
      ### Note
      I've found suspicious place in
      ```kotlin
      // RedrawManager.kt:30
      _renderApi = fallbackRenderApiQueue.removeAt(0)
      _redrawer = redrawerFactory(_renderApi, redrawer)
      ```
      Seems like `redrawer` is disposed twice if `redrawerFactory` throws
      (both paths constructing `RedrawerManager` are affected).
      
      @igordmn can you have a look?
      It's a universal path for all desktop users, so I wonder why it didn't
      backfire, if it's indeed incorrect.
      May be it's because we don't really call `redrawerFactory` if a redrawer
      was constructed correctly, so disposal of old one doesn't ever get
      called in this context. I'm not sure where are the invariant boundaries
      here.
      57dea506
  25. 18 Apr, 2024 1 commit
  26. 17 Apr, 2024 1 commit
  27. 16 Apr, 2024 1 commit
    • 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
  28. 04 Apr, 2024 1 commit
    • Ivan Matkov's avatar
      Remove input handling (#893) · 16473284
      Ivan Matkov authored
      skiko is supposed to be a wrapper around skia, however it has unrelated
      features like input. This PR removes it from this library - it's
      supposed to be handled externally.
      
      - Removed `SkikoInput`, `SkikoKey`, `SkikoPlatform*Event`
      - Replaced `SkikoView` to `SkikoRenderDelegate` and related field in
      `SkiaLayer`
      - `SkiaLayer` on macOS native now receives `NSView` instead of creating
      it internally and attaching it to the `NSWindow`. In theory, it allows
      initializing non-full-window skia view there (not tested)
      - Updated samples and readme
      16473284
  29. 21 Mar, 2024 1 commit
  30. 15 Mar, 2024 1 commit
    • Igor Demin's avatar
      System property to extract binaries to a different folder (#891) · a7763616
      Igor Demin authored
      Skiko extracts binaries to `~/.skiko` by default, but it is not always
      possible. This PR adds a way to override the folder where to extract
      binaries:
      ```
      System.setProperty("skiko.data.path", File(System.getProperty("java.io.tmpdir")).resolve(".skiko").toString())
      ```
      
      Fixes https://github.com/JetBrains/skiko/issues/885
      
      The case seems rare - we only have a crash in tests reported. If we have
      reports from real users, we have to change the default `~/.skiko` to
      something else.
      
      ## Testing 1 (manual)
      1. Run
      ```
      import org.jetbrains.skia.Bitmap
      import java.io.File
      
      fun main() {
          val path = File(System.getProperty("java.io.tmpdir")).resolve(".skiko").toString()
          println(path)
          System.setProperty("skiko.data.path", path)
          Bitmap() // loads the library
      }
      ```
      2. See that `path` is created
      ## Testing 2 (manual)
      The default way works:
      ```
      import org.jetbrains.skia.Bitmap
      
      fun main() {
          Bitmap() // loads the library
      }
      ```
      a7763616
  31. 13 Mar, 2024 1 commit