Unverified Commit 385bb208 authored by Igor Demin's avatar Igor Demin Committed by GitHub

Delegate focus methods from SkiaLayer to backedLayer (#543)

* Delegate focus methods from SkiaLayer to backedLayer

Similar to the other methods

(see the comment "We need to delegate all event listeners..." why we do that)

* Add a comment
parent 117b733a
package org.jetbrains.skiko
import org.jetbrains.skia.*
import org.jetbrains.skia.Canvas
import org.jetbrains.skiko.redrawer.Redrawer
import java.awt.*
import java.awt.Color
import java.awt.Component
import java.awt.Graphics
import java.awt.event.*
import java.awt.im.InputMethodRequests
import java.awt.Window
import java.util.concurrent.CancellationException
import javax.accessibility.Accessible
import javax.swing.JComponent
......@@ -83,6 +82,22 @@ actual open class SkiaLayer internal constructor(
override fun getInputMethodRequests(): InputMethodRequests? {
return this@SkiaLayer.inputMethodRequests
}
// check isRequestFocusEnabled manually, because it isn't implemented for Canvas.
// But it should be implemented, how it is implemented for JComponent.
// See Component.setRequestFocusEnabled description.
override fun requestFocus(cause: FocusEvent.Cause?) {
if (canReceiveFocus(cause)) {
super.requestFocus(cause)
}
}
override fun requestFocusInWindow(cause: FocusEvent.Cause?): Boolean {
return canReceiveFocus(cause) && super.requestFocusInWindow(cause)
}
private fun canReceiveFocus(cause: FocusEvent.Cause?) = cause != FocusEvent.Cause.MOUSE_EVENT ||
isRequestFocusEnabled
}
@Suppress("LeakingThis")
add(backedLayer)
......@@ -366,6 +381,30 @@ actual open class SkiaLayer internal constructor(
backedLayer.doProcessInputMethodEvent(e)
}
override fun addFocusListener(l: FocusListener?) {
backedLayer.addFocusListener(l)
}
override fun removeFocusListener(l: FocusListener?) {
backedLayer.removeFocusListener(l)
}
override fun setFocusable(focusable: Boolean) {
backedLayer.isFocusable = focusable
}
override fun isFocusable(): Boolean {
return backedLayer.isFocusable
}
override fun hasFocus(): Boolean {
return backedLayer.hasFocus()
}
override fun isFocusOwner(): Boolean {
return backedLayer.isFocusOwner
}
override fun requestFocus() {
backedLayer.requestFocus()
}
......@@ -374,6 +413,22 @@ actual open class SkiaLayer internal constructor(
backedLayer.requestFocus(cause)
}
override fun requestFocusInWindow(): Boolean {
return backedLayer.requestFocusInWindow()
}
override fun requestFocusInWindow(cause: FocusEvent.Cause?): Boolean {
return backedLayer.requestFocusInWindow(cause)
}
override fun setFocusTraversalKeysEnabled(focusTraversalKeysEnabled: Boolean) {
backedLayer.focusTraversalKeysEnabled = focusTraversalKeysEnabled
}
override fun getFocusTraversalKeysEnabled(): Boolean {
return backedLayer.focusTraversalKeysEnabled
}
override fun addInputMethodListener(l: InputMethodListener) {
super.addInputMethodListener(l)
backedLayer.addInputMethodListener(l)
......@@ -416,10 +471,6 @@ actual open class SkiaLayer internal constructor(
backedLayer.removeKeyListener(l)
}
override fun setFocusTraversalKeysEnabled(focusTraversalKeysEnabled: Boolean) {
backedLayer.focusTraversalKeysEnabled = focusTraversalKeysEnabled
}
/**
* Redraw on the next animation Frame (on vsync signal if vsync is enabled).
*/
......
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