Unverified Commit 534d24a8 authored by Andrew Rudenko's avatar Andrew Rudenko Committed by GitHub

Allow passing Accessible constructor to SkiaLayer. (#251)

parent 575edff1
package org.jetbrains.skiko package org.jetbrains.skiko
import java.awt.Canvas import java.awt.Canvas
import java.awt.Component
import java.awt.Graphics import java.awt.Graphics
import java.awt.event.InputMethodEvent import java.awt.event.InputMethodEvent
import javax.accessibility.Accessible
import javax.accessibility.AccessibleContext
internal open class HardwareLayer : Canvas() { internal open class HardwareLayer(
externalAccessibleFactory: ((Component) -> Accessible)? = null
) : Canvas() {
companion object { companion object {
init { init {
Library.load() Library.load()
...@@ -66,4 +71,10 @@ internal open class HardwareLayer : Canvas() { ...@@ -66,4 +71,10 @@ internal open class HardwareLayer : Canvas() {
private external fun getContentHandle(platformInfo: Long): Long private external fun getContentHandle(platformInfo: Long): Long
private external fun getWindowHandle(platformInfo: Long): Long private external fun getWindowHandle(platformInfo: Long): Long
private val _externalAccessible = externalAccessibleFactory?.invoke(this)
override fun getAccessibleContext(): AccessibleContext {
val res = _externalAccessible?.accessibleContext
return res ?: super.getAccessibleContext()
}
} }
\ No newline at end of file
...@@ -14,14 +14,17 @@ import org.jetbrains.skia.Rect ...@@ -14,14 +14,17 @@ import org.jetbrains.skia.Rect
import org.jetbrains.skiko.context.ContextHandler import org.jetbrains.skiko.context.ContextHandler
import org.jetbrains.skiko.redrawer.Redrawer import org.jetbrains.skiko.redrawer.Redrawer
import java.awt.Color import java.awt.Color
import java.awt.Component
import java.awt.Graphics import java.awt.Graphics
import java.awt.event.* import java.awt.event.*
import java.awt.im.InputMethodRequests import java.awt.im.InputMethodRequests
import java.util.concurrent.CancellationException import java.util.concurrent.CancellationException
import javax.accessibility.Accessible
import javax.swing.JPanel import javax.swing.JPanel
import javax.swing.SwingUtilities.isEventDispatchThread import javax.swing.SwingUtilities.isEventDispatchThread
actual open class SkiaLayer internal constructor( actual open class SkiaLayer internal constructor(
externalAccessibleFactory: ((Component) -> Accessible)? = null,
private val properties: SkiaLayerProperties = makeDefaultSkiaLayerProperties(), private val properties: SkiaLayerProperties = makeDefaultSkiaLayerProperties(),
private val renderFactory: RenderFactory private val renderFactory: RenderFactory
) : JPanel() { ) : JPanel() {
...@@ -41,8 +44,9 @@ actual open class SkiaLayer internal constructor( ...@@ -41,8 +44,9 @@ actual open class SkiaLayer internal constructor(
internal val backedLayer: HardwareLayer internal val backedLayer: HardwareLayer
constructor( constructor(
properties: SkiaLayerProperties = makeDefaultSkiaLayerProperties() properties: SkiaLayerProperties = makeDefaultSkiaLayerProperties(),
) : this(properties, RenderFactory.Default) externalAccessibleFactory: ((Component) -> Accessible)? = null
) : this(externalAccessibleFactory, properties, RenderFactory.Default)
val canvas: java.awt.Canvas val canvas: java.awt.Canvas
get() = backedLayer get() = backedLayer
...@@ -51,7 +55,7 @@ actual open class SkiaLayer internal constructor( ...@@ -51,7 +55,7 @@ actual open class SkiaLayer internal constructor(
isOpaque = false isOpaque = false
background = Color(0, 0, 0, 0) background = Color(0, 0, 0, 0)
layout = null layout = null
backedLayer = object : HardwareLayer() { backedLayer = object : HardwareLayer(externalAccessibleFactory) {
override fun paint(g: Graphics) { override fun paint(g: Graphics) {
// 1. JPanel.paint is not always called (in rare cases). // 1. JPanel.paint is not always called (in rare cases).
// For example if we call 'jframe.isResizable = false` on Ubuntu // For example if we call 'jframe.isResizable = false` on Ubuntu
......
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