JetBrains / compose-multiplatform

Compose Multiplatform, a modern UI framework for Kotlin that makes building performant and beautiful user interfaces easy and enjoyable.
https://jetbrains.com/lp/compose-multiplatform
Apache License 2.0
15.92k stars 1.16k forks source link

Window content sometimes has wrong offset (by 1px) and overlapped by window border and titlebar (Windows 10) #179

Open igordmn opened 3 years ago

igordmn commented 3 years ago
import androidx.compose.desktop.Window
import androidx.compose.foundation.Canvas
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.nativeCanvas
import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.unit.IntSize
import org.jetbrains.skija.Canvas
import org.jetbrains.skija.Paint

fun main() = Window(size = IntSize(100, 100)) {
    Canvas(
        modifier = Modifier.fillMaxSize()
    ) {
        val canvas =  drawContext.canvas.nativeCanvas
        val paint = Paint().apply {
            strokeWidth = 1f
            color = Color.Red.toArgb()
        }
        canvas.drawLine(10f, 0f, 20f, 0f, paint)
        canvas.drawLine(20f, 0.5f, 30f, 0.5f, paint)
        canvas.drawLine(30f, 1f, 40f, 1f, paint)
        canvas.drawLine(40f, 1.5f, 50f, 1.5f, paint)
        canvas.drawLine(50f, 2f, 60f, 2f, paint)

        canvas.drawLine(0f, 10f, 0f, 20f, paint)
        canvas.drawLine(0.5f, 20f, 0.5f, 30f, paint)
        canvas.drawLine(1f, 30f, 1f, 40f, paint)
        canvas.drawLine(1.5f, 40f, 1.5f, 50f, paint)
        canvas.drawLine(2f, 50f, 2f, 60f, paint)
    }
}

image

Image painted with Skija directly into file: image

Offset differs if we change size of the window or scale in the system.

okushnikov commented 3 weeks ago

Please check the following ticket on YouTrack for follow-ups to this issue. GitHub issues will be closed in the coming weeks.