Unverified Commit 41ad22b9 authored by Nikolay Igotti's avatar Nikolay Igotti Committed by GitHub

Window state notifications. (#104)

parent 5b9b69e2
...@@ -59,6 +59,10 @@ fun createWindow(title: String) = SwingUtilities.invokeLater { ...@@ -59,6 +59,10 @@ fun createWindow(title: String) = SwingUtilities.invokeLater {
val state = State() val state = State()
state.text = title state.text = title
window.layer.onStateChanged(SkiaLayer.PropertyKind.Renderer) { layer ->
println("Changed renderer for $layer: new value is ${layer.renderApi}")
}
window.layer.renderer = Renderer(window.layer) { window.layer.renderer = Renderer(window.layer) {
renderer, w, h, nanoTime -> displayScene(renderer, w, h, nanoTime, mouseX, mouseY, state) renderer, w, h, nanoTime -> displayScene(renderer, w, h, nanoTime, mouseX, mouseY, state)
} }
......
...@@ -24,6 +24,11 @@ open class SkiaLayer( ...@@ -24,6 +24,11 @@ open class SkiaLayer(
private val properties: SkiaLayerProperties = SkiaLayerProperties() private val properties: SkiaLayerProperties = SkiaLayerProperties()
) : JPanel() { ) : JPanel() {
enum class PropertyKind {
Renderer,
ContentScale,
}
internal val backedLayer : HardwareLayer internal val backedLayer : HardwareLayer
init { init {
...@@ -74,8 +79,6 @@ open class SkiaLayer( ...@@ -74,8 +79,6 @@ open class SkiaLayer(
get() = backedLayer.fullscreen get() = backedLayer.fullscreen
set(value) { backedLayer.fullscreen = value } set(value) { backedLayer.fullscreen = value }
protected open fun contentScaleChanged() = Unit
var renderer: SkiaRenderer? = null var renderer: SkiaRenderer? = null
val clipComponents = mutableListOf<ClipRectangle>() val clipComponents = mutableListOf<ClipRectangle>()
...@@ -84,15 +87,19 @@ open class SkiaLayer( ...@@ -84,15 +87,19 @@ open class SkiaLayer(
internal var redrawer: Redrawer? = null internal var redrawer: Redrawer? = null
private var contextHandler: ContextHandler? = null private var contextHandler: ContextHandler? = null
private val fallbackRenderApiQueue = SkikoProperties.fallbackRenderApiQueue.toMutableList() private val fallbackRenderApiQueue = SkikoProperties.fallbackRenderApiQueue.toMutableList()
var renderApi: GraphicsApi = fallbackRenderApiQueue[0] private var renderApi_ = fallbackRenderApiQueue[0]
private set var renderApi: GraphicsApi
get() = renderApi_
private set(value) {
this.renderApi_ = value
notifyChange(PropertyKind.Renderer)
}
@Volatile @Volatile
private var picture: PictureHolder? = null private var picture: PictureHolder? = null
private val pictureRecorder = PictureRecorder() private val pictureRecorder = PictureRecorder()
private val pictureLock = Any() private val pictureLock = Any()
open fun init() { open fun init() {
backedLayer.init() backedLayer.init()
renderApi = fallbackRenderApiQueue.removeAt(0) renderApi = fallbackRenderApiQueue.removeAt(0)
...@@ -101,6 +108,19 @@ open class SkiaLayer( ...@@ -101,6 +108,19 @@ open class SkiaLayer(
isInited = true isInited = true
} }
private val stateHandlers =
mutableMapOf<PropertyKind, MutableList<(SkiaLayer) -> Unit>>()
fun onStateChanged(kind: PropertyKind, handler: (SkiaLayer) -> Unit) {
stateHandlers.getOrPut( kind, { mutableListOf() }) += handler
}
private fun notifyChange(kind: PropertyKind) {
stateHandlers.get(kind)?.let { handlers ->
handlers.forEach { it(this) }
}
}
open fun dispose() { open fun dispose() {
check(!isDisposed) check(!isDisposed)
check(isEventDispatchThread()) check(isEventDispatchThread())
...@@ -129,7 +149,7 @@ open class SkiaLayer( ...@@ -129,7 +149,7 @@ open class SkiaLayer(
override fun paint(g: Graphics) { override fun paint(g: Graphics) {
super.paint(g) super.paint(g)
if (backedLayer.checkContentScale()) { if (backedLayer.checkContentScale()) {
contentScaleChanged() notifyChange(PropertyKind.ContentScale)
} }
redrawer?.syncSize() redrawer?.syncSize()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment