Skip to content

Commit

Permalink
Simplify clear colors (#718)
Browse files Browse the repository at this point in the history
* Use naming constants instead of numbers for clear colors

* Simplify clear colors logic and add comments
  • Loading branch information
Walingar committed Jun 5, 2023
1 parent decca00 commit ab1d03d
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 24 deletions.
Original file line number Diff line number Diff line change
@@ -1,26 +1,20 @@
package org.jetbrains.skiko.context

import org.jetbrains.skia.Bitmap
import org.jetbrains.skia.Canvas
import org.jetbrains.skia.ColorAlphaType
import org.jetbrains.skia.ImageInfo
import org.jetbrains.skia.*
import org.jetbrains.skiko.Logger
import org.jetbrains.skia.SurfaceProps
import org.jetbrains.skiko.OS
import org.jetbrains.skiko.SkiaLayer
import org.jetbrains.skiko.hostOs
import org.jetbrains.skiko.OS
import java.awt.Transparency
import java.awt.Color
import java.awt.Transparency
import java.awt.color.ColorSpace
import java.awt.image.BufferedImage
import java.awt.image.ComponentColorModel
import java.awt.image.DataBuffer
import java.awt.image.DataBufferByte
import java.awt.image.Raster
import java.awt.image.WritableRaster
import java.awt.image.*

internal class SoftwareContextHandler(layer: SkiaLayer) : JvmContextHandler(layer) {
override val clearColor = if (layer.transparency && hostOs == OS.MacOS) 0 else -1
override fun isTransparentBackground(): Boolean {
// TODO: why Software rendering has another transparency logic from the begginning
return hostOs == OS.MacOS && layer.transparency
}

val colorModel = ComponentColorModel(
ColorSpace.getInstance(ColorSpace.CS_sRGB),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,12 @@
package org.jetbrains.skiko.context

import org.jetbrains.skia.BackendRenderTarget
import org.jetbrains.skia.Canvas
import org.jetbrains.skia.DirectContext
import org.jetbrains.skia.Picture
import org.jetbrains.skia.Surface
import org.jetbrains.skia.*
import org.jetbrains.skiko.*
import org.jetbrains.skiko.RenderException

internal abstract class ContextHandler(
protected val layer: SkiaLayer,
private val drawContent: Canvas.() -> Unit
) {
// TODO can we simplify clearColor logic? is there a reason why SoftwareContextHandler has opposite logic?
protected open val clearColor = if (layer.transparency || hostOs == OS.MacOS) 0 else -1
protected var context: DirectContext? = null
protected var renderTarget: BackendRenderTarget? = null
protected var surface: Surface? = null
Expand Down Expand Up @@ -48,9 +41,22 @@ internal abstract class ContextHandler(
}
initCanvas()
canvas?.apply {
clear(if (layer.fullscreen && hostOs != OS.MacOS) -1 else clearColor)
clear(if (isTransparentBackground()) Color.TRANSPARENT else Color.WHITE)
drawContent()
}
flush()
}

protected open fun isTransparentBackground(): Boolean {
if (hostOs == OS.MacOS) {
// MacOS transparency is always supported
return true
}
if (layer.fullscreen) {
// for non-MacOS in fullscreen transparency is not supported
return false
}
// for non-MacOS in non-fullscreen transparency provided by [layer]
return layer.transparency
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ abstract class CanvasRenderer constructor(val htmlCanvas: HTMLCanvasElement) {
redrawScheduled = false
GL.makeContextCurrent(contextPointer)
// `clear` and `resetMatrix` make canvas not accumulate previous effects
canvas?.clear(-1)
canvas?.clear(Color.WHITE)
canvas?.resetMatrix()
drawFrame(timestamp)
surface?.flushAndSubmit()
Expand Down

0 comments on commit ab1d03d

Please sign in to comment.