mirror of
https://github.com/geode-sdk/android-launcher.git
synced 2026-10-21 16:32:39 +00:00
cleanup keyboard event handler
This commit is contained in:
2 files changed
+58
-46
No files matched your search
@@ -158,8 +158,10 @@ class Cocos2dxGLSurfaceView(context: Context) : GLSurfaceView(context) {
|
|||||||
cocos2dxEditText?.apply {
|
cocos2dxEditText?.apply {
|
||||||
removeTextChangedListener(cocos2dxTextInputWrapper)
|
removeTextChangedListener(cocos2dxTextInputWrapper)
|
||||||
|
|
||||||
inputType = inputTypeForFlags(BaseRobTopActivity.curKeyboardInputFlags)
|
if (sendNewCocosEvents) {
|
||||||
imeOptions = imeOptionsForFlags(BaseRobTopActivity.curKeyboardInputFlags)
|
inputType = inputTypeForFlags(BaseRobTopActivity.curKeyboardInputFlags)
|
||||||
|
imeOptions = imeOptionsForFlags(BaseRobTopActivity.curKeyboardInputFlags)
|
||||||
|
}
|
||||||
|
|
||||||
setText("")
|
setText("")
|
||||||
val text = msg.obj as String
|
val text = msg.obj as String
|
||||||
@@ -369,8 +371,19 @@ class Cocos2dxGLSurfaceView(context: Context) : GLSurfaceView(context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun queueKeyboardEvent(keyCode: Int, event: KeyEvent, down: Boolean) {
|
private fun queueKeyboardEvent(keyCode: Int, event: KeyEvent, down: Boolean): Boolean {
|
||||||
sendNextEventTimestamp(event.eventTime * MS_TO_NS)
|
val keypadCode = keyCode == KeyEvent.KEYCODE_MENU || keyCode == KeyEvent.KEYCODE_BACK
|
||||||
|
if (event.isSystem && !keypadCode) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if (keypadCode && BaseRobTopActivity.blockBackButton) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
queueEvent {
|
||||||
|
sendNextEventTimestamp(event.eventTime * MS_TO_NS)
|
||||||
|
}
|
||||||
|
|
||||||
if (useKeyboardEvents) {
|
if (useKeyboardEvents) {
|
||||||
if (down) {
|
if (down) {
|
||||||
@@ -382,7 +395,6 @@ class Cocos2dxGLSurfaceView(context: Context) : GLSurfaceView(context) {
|
|||||||
GeodeUtils.nativeKeyUp(keyCode, event.modifiers)
|
GeodeUtils.nativeKeyUp(keyCode, event.modifiers)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (controllerEventsEnabled) {
|
if (controllerEventsEnabled) {
|
||||||
@@ -397,28 +409,57 @@ class Cocos2dxGLSurfaceView(context: Context) : GLSurfaceView(context) {
|
|||||||
event.repeatCount
|
event.repeatCount
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
return
|
}
|
||||||
|
|
||||||
|
// geode events override native callbacks
|
||||||
|
if (useKeyboardEvents || controllerEventsEnabled) {
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sendNewCocosEvents) {
|
if (sendNewCocosEvents) {
|
||||||
if (KeyEvent.isGamepadButton(keyCode)) {
|
if (KeyEvent.isGamepadButton(keyCode)) {
|
||||||
return
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
if (keyCode == KeyEvent.KEYCODE_ESCAPE && BaseRobTopActivity.blockBackButton) {
|
if (keyCode == KeyEvent.KEYCODE_ESCAPE && BaseRobTopActivity.blockBackButton) {
|
||||||
return
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// messy logic
|
||||||
val isRepeat = event.repeatCount > 0
|
val isRepeat = event.repeatCount > 0
|
||||||
|
if (keypadCode) {
|
||||||
|
if (down) {
|
||||||
|
if (isRepeat || BaseRobTopActivity.blockBackButton) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
queueEvent {
|
||||||
|
cocos2dxRenderer.handleKeyDown(keyCode)
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
} else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
val eventTimestamp = event.eventTime / 1000.0
|
val eventTimestamp = event.eventTime / 1000.0
|
||||||
|
|
||||||
|
val shiftPressed = event.isShiftPressed
|
||||||
|
val ctrlPressed = event.isCtrlPressed
|
||||||
|
val altPressed = event.isAltPressed
|
||||||
|
|
||||||
queueEvent {
|
queueEvent {
|
||||||
cocos2dxRenderer.handleKeyboardEvent(
|
cocos2dxRenderer.handleKeyboardEvent(
|
||||||
keyCode, down, isRepeat, eventTimestamp,
|
keyCode, down, isRepeat, eventTimestamp,
|
||||||
event.isShiftPressed, event.isCtrlPressed, event.isAltPressed
|
shiftPressed, ctrlPressed, altPressed
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun legacyKeyDown(keyCode: Int, keyEvent: KeyEvent): Boolean {
|
private fun legacyKeyDown(keyCode: Int, keyEvent: KeyEvent): Boolean {
|
||||||
@@ -478,51 +519,21 @@ class Cocos2dxGLSurfaceView(context: Context) : GLSurfaceView(context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
|
override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
|
||||||
val deliverGeodeEvents = useKeyboardEvents || controllerEventsEnabled
|
if (!queueKeyboardEvent(keyCode, event, true)) {
|
||||||
if (!deliverGeodeEvents && !sendNewCocosEvents) {
|
|
||||||
return legacyKeyDown(keyCode, event)
|
return legacyKeyDown(keyCode, event)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (keyCode == KeyEvent.KEYCODE_BACK || keyCode == KeyEvent.KEYCODE_MENU) {
|
|
||||||
if (deliverGeodeEvents) {
|
|
||||||
queueKeyboardEvent(keyCode, event, true)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
if (event.repeatCount != 0 || BaseRobTopActivity.blockBackButton) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
queueEvent {
|
|
||||||
cocos2dxRenderer.handleKeyDown(keyCode)
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
if (event.isSystem) {
|
|
||||||
return super.onKeyDown(keyCode, event)
|
|
||||||
}
|
|
||||||
|
|
||||||
queueKeyboardEvent(keyCode, event, true)
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean {
|
override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean {
|
||||||
val deliverGeodeEvents = useKeyboardEvents || controllerEventsEnabled
|
if (!queueKeyboardEvent(keyCode, event, false)) {
|
||||||
if (!deliverGeodeEvents && !sendNewCocosEvents) {
|
|
||||||
return super.onKeyUp(keyCode, event)
|
return super.onKeyUp(keyCode, event)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event.isSystem) {
|
|
||||||
return super.onKeyUp(keyCode, event)
|
|
||||||
}
|
|
||||||
|
|
||||||
queueKeyboardEvent(keyCode, event, false)
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// i'm lazy.
|
// i'm lazy.
|
||||||
// https://developer.android.com/develop/ui/views/touch-and-input/game-controllers/controller-input
|
// https://developer.android.com/develop/ui/views/touch-and-input/game-controllers/controller-input
|
||||||
private fun getCenteredAxis(
|
private fun getCenteredAxis(
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ class Cocos2dxTextInputWrapper(private val cocos2dxGLSurfaceView: Cocos2dxGLSurf
|
|||||||
val unchanged = str.commonPrefixWith(cText)
|
val unchanged = str.commonPrefixWith(cText)
|
||||||
|
|
||||||
var unchangedUntil = unchanged.length
|
var unchangedUntil = unchanged.length
|
||||||
if (unchangedUntil > 0 && unchangedUntil < str.length && Character.isLowSurrogate(unchanged.last())) {
|
if (unchangedUntil > 0 && unchangedUntil < str.length && Character.isLowSurrogate(str[unchangedUntil])) {
|
||||||
unchangedUntil--
|
unchangedUntil--
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,25 +64,26 @@ class Cocos2dxTextInputWrapper(private val cocos2dxGLSurfaceView: Cocos2dxGLSurf
|
|||||||
val fullscreenIme = cocos2dxGLSurfaceView.cocos2dxEditText == textView && isFullScreenEdit
|
val fullscreenIme = cocos2dxGLSurfaceView.cocos2dxEditText == textView && isFullScreenEdit
|
||||||
if (fullscreenIme) {
|
if (fullscreenIme) {
|
||||||
var text = textView.text.toString()
|
var text = textView.text.toString()
|
||||||
if (originText != text) {
|
if (originText != text || !cocos2dxGLSurfaceView.sendNewCocosEvents) {
|
||||||
if (cocos2dxGLSurfaceView.sendNewCocosEvents) {
|
if (cocos2dxGLSurfaceView.sendNewCocosEvents) {
|
||||||
cocos2dxGLSurfaceView.queueEvent {
|
cocos2dxGLSurfaceView.queueEvent {
|
||||||
JniToCpp.textInputCaretToEnd()
|
JniToCpp.textInputCaretToEnd()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i in originText!!.length downTo 1) {
|
repeat(originText!!.length) {
|
||||||
cocos2dxGLSurfaceView.deleteBackward()
|
cocos2dxGLSurfaceView.deleteBackward()
|
||||||
}
|
}
|
||||||
|
|
||||||
// this bit was removed in 2.209, and I don't know if it's important on previous versions
|
|
||||||
if (!cocos2dxGLSurfaceView.sendNewCocosEvents) {
|
if (!cocos2dxGLSurfaceView.sendNewCocosEvents) {
|
||||||
if (!text.endsWith('\n')) {
|
if (!text.endsWith('\n')) {
|
||||||
text += '\n'
|
text += '\n'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cocos2dxGLSurfaceView.insertText(text)
|
if (text.isNotEmpty()) {
|
||||||
|
cocos2dxGLSurfaceView.insertText(text)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user