mirror of
https://github.com/geode-sdk/android-launcher.git
synced 2026-10-21 16:32:39 +00:00
ime and input changes
This commit is contained in:
7 files changed
+248
-63
No files matched your search
@@ -125,7 +125,7 @@
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".GeometryDashActivity"
|
||||
android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout|keyboard"
|
||||
android:configChanges="fontScale|layoutDirection|density|smallestScreenSize|screenSize|uiMode|screenLayout|orientation|navigation|keyboardHidden|keyboard|locale"
|
||||
android:exported="true"
|
||||
android:hardwareAccelerated="true"
|
||||
android:screenOrientation="landscape"
|
||||
|
||||
@@ -2,7 +2,11 @@ package com.customRobTop
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Activity
|
||||
import android.content.*
|
||||
import android.content.ActivityNotFoundException
|
||||
import android.content.ClipData
|
||||
import android.content.ClipboardManager
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.net.ConnectivityManager
|
||||
import android.net.NetworkCapabilities
|
||||
import android.os.Build
|
||||
@@ -13,14 +17,18 @@ import com.geode.launcher.R
|
||||
import org.cocos2dx.lib.Cocos2dxGLSurfaceView.Companion.closeIMEKeyboard
|
||||
import org.cocos2dx.lib.Cocos2dxGLSurfaceView.Companion.openIMEKeyboard
|
||||
import java.lang.ref.WeakReference
|
||||
import java.util.*
|
||||
|
||||
import java.util.UUID
|
||||
|
||||
@Suppress("unused", "UNUSED_PARAMETER")
|
||||
object BaseRobTopActivity {
|
||||
const val KEYBOARD_INPUT_MULTILINE = 1
|
||||
const val KEYBOARD_INPUT_NUMERIC = 4
|
||||
const val KEYBOARD_INPUT_PASSWORD = 2
|
||||
|
||||
private var isLoaded = false
|
||||
var blockBackButton = false
|
||||
private var keyboardActive = false
|
||||
var curKeyboardInputFlags = 0
|
||||
|
||||
var isPaused = false
|
||||
|
||||
@@ -87,6 +95,18 @@ object BaseRobTopActivity {
|
||||
}
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun getClipboardString(): String {
|
||||
me.get()?.run {
|
||||
val manager = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
|
||||
val clip = manager.primaryClip
|
||||
if (clip != null && clip.itemCount > 0) {
|
||||
return clip.getItemAt(0).coerceToText(this).toString()
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun sendMail(subject: String, body: String, to: String) {
|
||||
me.get()?.runOnUiThread {
|
||||
@@ -264,4 +284,9 @@ object BaseRobTopActivity {
|
||||
level = DeprecationLevel.HIDDEN
|
||||
)
|
||||
fun logEvent(event: String) {}
|
||||
|
||||
@JvmStatic
|
||||
fun setKeyboardInputFlags(flags: Int) {
|
||||
curKeyboardInputFlags = flags
|
||||
}
|
||||
}
|
||||
@@ -171,7 +171,8 @@ class GeometryDashActivity : AppCompatActivity(), Cocos2dxHelper.Cocos2dxHelperL
|
||||
tryLoadLibrary(gdPackageInfo, Constants.FMOD_LIB_NAME)
|
||||
tryLoadLibrary(gdPackageInfo, Constants.COCOS_LIB_NAME)
|
||||
|
||||
if (GamePackageUtils.getGameVersionCode(packageManager) >= 39L) {
|
||||
val gameVersionCode = GamePackageUtils.getGameVersionCode(packageManager)
|
||||
if (gameVersionCode >= 39L) {
|
||||
// this fix requires geode v3, which is 2.206+
|
||||
// there is a short period in which 2.206 users will still have geode v2, but whatever. ig
|
||||
LauncherFix.enableExceptionsRenaming()
|
||||
@@ -182,6 +183,9 @@ class GeometryDashActivity : AppCompatActivity(), Cocos2dxHelper.Cocos2dxHelperL
|
||||
loadInternalMods()
|
||||
|
||||
val baseView = createView()
|
||||
if (gameVersionCode >= 42L) {
|
||||
mGLSurfaceView?.sendNewCocosEvents = true
|
||||
}
|
||||
|
||||
if (!GeodeUtils.handleSafeArea && Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA) {
|
||||
val frameLayoutParams = ViewGroup.LayoutParams(
|
||||
@@ -205,12 +209,22 @@ class GeometryDashActivity : AppCompatActivity(), Cocos2dxHelper.Cocos2dxHelperL
|
||||
left = 0, top = 0, right = 0, bottom = 0
|
||||
)
|
||||
}
|
||||
|
||||
Cocos2dxGLSurfaceView.onKeyboardInsets(insets)
|
||||
|
||||
WindowInsets.CONSUMED
|
||||
}
|
||||
|
||||
frameLayout.addView(baseView)
|
||||
setContentView(frameLayout)
|
||||
} else {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||
baseView.setOnApplyWindowInsetsListener { view, insets ->
|
||||
Cocos2dxGLSurfaceView.onKeyboardInsets(insets)
|
||||
return@setOnApplyWindowInsetsListener view.onApplyWindowInsets(insets)
|
||||
}
|
||||
}
|
||||
|
||||
setContentView(baseView)
|
||||
}
|
||||
|
||||
@@ -497,6 +511,10 @@ class GeometryDashActivity : AppCompatActivity(), Cocos2dxHelper.Cocos2dxHelperL
|
||||
editText.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS
|
||||
glSurfaceView.cocos2dxEditText = editText
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
glSurfaceView.defaultFocusHighlightEnabled = false
|
||||
}
|
||||
|
||||
return frameLayout
|
||||
}
|
||||
|
||||
|
||||
@@ -53,6 +53,7 @@ object GamePackageUtils {
|
||||
39L to "2.206",
|
||||
40L to "2.2074", // ok
|
||||
41L to "2.2081",
|
||||
42L to "2.209",
|
||||
)
|
||||
|
||||
/**
|
||||
|
||||
@@ -794,7 +794,7 @@ object GeodeUtils {
|
||||
|
||||
external fun internalKeyEvent(timestamp: Long, deviceId: Int, eventSource: Int, keyCode: Int, modifiers: Int, isDown: Boolean, repeatCount: Int)
|
||||
external fun internalTouchEvent(timestamp: Long, deviceId: Int, eventSource: Int, eventType: Int, ids: IntArray, xs: FloatArray, ys: FloatArray)
|
||||
external fun internalScrollEvent(timestamp: Long, deviceId: Int, eventSource: Int, scrollX: Float, scrollY: Float)
|
||||
external fun internalScrollEvent(timestamp: Long, deviceId: Int, eventSource: Int, scrollX: Float, scrollY: Float, mouseX: Float, mouseY: Float)
|
||||
external fun internalJoystickEvent(timestamp: Long, deviceId: Int, eventSource: Int, leftX: FloatArray, leftY: FloatArray, rightX: FloatArray, rightY: FloatArray, hatX: FloatArray, hatY: FloatArray, leftTrigger: FloatArray, rightTrigger: FloatArray)
|
||||
|
||||
external fun inputDeviceAdded(deviceId: Int)
|
||||
|
||||
@@ -8,11 +8,13 @@ import android.os.Build
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.os.Message
|
||||
import android.util.Log
|
||||
import android.text.InputType
|
||||
import android.view.InputDevice
|
||||
import android.view.KeyEvent
|
||||
import android.view.MotionEvent
|
||||
import android.view.Surface
|
||||
import android.view.WindowInsets
|
||||
import android.view.inputmethod.EditorInfo
|
||||
import android.view.inputmethod.InputMethodManager
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.appcompat.widget.AppCompatEditText
|
||||
@@ -25,12 +27,54 @@ private const val HANDLER_CLOSE_IME_KEYBOARD = 3
|
||||
private const val MS_TO_NS = 1_000_000
|
||||
private const val SEC_TO_NS = 1_000_000_000.0
|
||||
|
||||
fun inputTypeForFlags(i: Int): Int {
|
||||
if ((i and BaseRobTopActivity.KEYBOARD_INPUT_NUMERIC) != 0) {
|
||||
return InputType.TYPE_NUMBER_FLAG_DECIMAL or InputType.TYPE_NUMBER_FLAG_SIGNED or InputType.TYPE_CLASS_NUMBER
|
||||
}
|
||||
|
||||
if ((i and BaseRobTopActivity.KEYBOARD_INPUT_PASSWORD) != 0) {
|
||||
return InputType.TYPE_TEXT_VARIATION_PASSWORD or InputType.TYPE_CLASS_TEXT
|
||||
}
|
||||
|
||||
if ((i and BaseRobTopActivity.KEYBOARD_INPUT_MULTILINE) != 0) {
|
||||
InputType.TYPE_TEXT_FLAG_MULTI_LINE or InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or InputType.TYPE_CLASS_TEXT
|
||||
}
|
||||
|
||||
return InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS or InputType.TYPE_CLASS_TEXT
|
||||
}
|
||||
|
||||
fun usesInlineKeyboard(): Boolean {
|
||||
return Build.VERSION.SDK_INT >= 30
|
||||
}
|
||||
|
||||
fun imeOptionsForFlags(i: Int): Int {
|
||||
val i2 = if ((i and BaseRobTopActivity.KEYBOARD_INPUT_MULTILINE) == 0 || !usesInlineKeyboard())
|
||||
EditorInfo.IME_ACTION_DONE else EditorInfo.IME_ACTION_NONE
|
||||
|
||||
return if (usesInlineKeyboard())
|
||||
EditorInfo.IME_FLAG_NO_FULLSCREEN or EditorInfo.IME_FLAG_NO_EXTRACT_UI or i2
|
||||
else i2
|
||||
}
|
||||
|
||||
class Cocos2dxGLSurfaceView(context: Context) : GLSurfaceView(context) {
|
||||
companion object {
|
||||
lateinit var cocos2dxGLSurfaceView: Cocos2dxGLSurfaceView
|
||||
private lateinit var handler: Handler
|
||||
private lateinit var cocos2dxTextInputWrapper: Cocos2dxTextInputWrapper
|
||||
|
||||
private var keyboardVisible = false
|
||||
private var keyboardHeight = 0
|
||||
|
||||
private var keyboardHideCheck = Runnable {
|
||||
if (keyboardVisible) {
|
||||
return@Runnable
|
||||
}
|
||||
|
||||
cocos2dxGLSurfaceView.queueEvent {
|
||||
cocos2dxGLSurfaceView.cocos2dxRenderer.handleTextClosed()
|
||||
}
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun openIMEKeyboard() {
|
||||
val msg = Message()
|
||||
@@ -50,6 +94,26 @@ class Cocos2dxGLSurfaceView(context: Context) : GLSurfaceView(context) {
|
||||
cocos2dxGLSurfaceView.queueEvent {
|
||||
Cocos2dxAccelerometer.onSensorChanged(x, y, z, timestamp)
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.R)
|
||||
fun onKeyboardInsets(windowInsets: WindowInsets) {
|
||||
val visible = windowInsets.isVisible(WindowInsets.Type.ime())
|
||||
val offsetHeight = if (visible) windowInsets.getInsets(WindowInsets.Type.ime()).bottom else 0
|
||||
|
||||
if (visible == keyboardVisible && offsetHeight == keyboardHeight) {
|
||||
return
|
||||
}
|
||||
|
||||
keyboardVisible = visible
|
||||
keyboardHeight = offsetHeight
|
||||
|
||||
handler.removeCallbacks(keyboardHideCheck)
|
||||
if (!visible) {
|
||||
handler.postDelayed(keyboardHideCheck, 150L)
|
||||
} else {
|
||||
cocos2dxGLSurfaceView.cocos2dxRenderer.handleKeyboardWillShow(keyboardHeight)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private lateinit var cocos2dxRenderer: Cocos2dxRenderer
|
||||
@@ -65,6 +129,9 @@ class Cocos2dxGLSurfaceView(context: Context) : GLSurfaceView(context) {
|
||||
private set
|
||||
var supportsResizeEvents = false
|
||||
|
||||
// 2.209+ events for keyboard and such
|
||||
var sendNewCocosEvents = false
|
||||
|
||||
var cocos2dxEditText: AppCompatEditText? = null
|
||||
set(value) {
|
||||
field = value
|
||||
@@ -85,9 +152,11 @@ class Cocos2dxGLSurfaceView(context: Context) : GLSurfaceView(context) {
|
||||
HANDLER_OPEN_IME_KEYBOARD -> {
|
||||
if (cocos2dxEditText?.requestFocus() == true) {
|
||||
cocos2dxEditText?.apply {
|
||||
removeTextChangedListener(
|
||||
cocos2dxTextInputWrapper
|
||||
)
|
||||
removeTextChangedListener(cocos2dxTextInputWrapper)
|
||||
|
||||
inputType = inputTypeForFlags(BaseRobTopActivity.curKeyboardInputFlags)
|
||||
imeOptions = imeOptionsForFlags(BaseRobTopActivity.curKeyboardInputFlags)
|
||||
|
||||
setText("")
|
||||
val text = msg.obj as String
|
||||
append(text)
|
||||
@@ -100,16 +169,13 @@ class Cocos2dxGLSurfaceView(context: Context) : GLSurfaceView(context) {
|
||||
cocos2dxEditText,
|
||||
0
|
||||
)
|
||||
Log.d("GLSurfaceView", "showSoftInput")
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
HANDLER_CLOSE_IME_KEYBOARD -> {
|
||||
cocos2dxEditText?.apply {
|
||||
removeTextChangedListener(
|
||||
cocos2dxTextInputWrapper
|
||||
)
|
||||
removeTextChangedListener(cocos2dxTextInputWrapper)
|
||||
(context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager).hideSoftInputFromWindow(
|
||||
windowToken,
|
||||
0
|
||||
@@ -117,8 +183,10 @@ class Cocos2dxGLSurfaceView(context: Context) : GLSurfaceView(context) {
|
||||
}
|
||||
|
||||
requestFocus()
|
||||
Log.d("GLSurfaceView", "HideSoftInput")
|
||||
cocos2dxRenderer.handleTextClosed()
|
||||
|
||||
queueEvent {
|
||||
cocos2dxRenderer.handleTextClosed()
|
||||
}
|
||||
return
|
||||
}
|
||||
else -> return
|
||||
@@ -297,6 +365,58 @@ class Cocos2dxGLSurfaceView(context: Context) : GLSurfaceView(context) {
|
||||
}
|
||||
}
|
||||
|
||||
private fun queueKeyboardEvent(keyCode: Int, event: KeyEvent, down: Boolean) {
|
||||
sendNextEventTimestamp(event.eventTime * MS_TO_NS)
|
||||
|
||||
if (useKeyboardEvents) {
|
||||
if (down) {
|
||||
queueEvent {
|
||||
GeodeUtils.nativeKeyDown(keyCode, event.modifiers, event.repeatCount != 0)
|
||||
}
|
||||
} else {
|
||||
queueEvent {
|
||||
GeodeUtils.nativeKeyUp(keyCode, event.modifiers)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if (controllerEventsEnabled) {
|
||||
queueEvent {
|
||||
GeodeUtils.internalKeyEvent(
|
||||
event.eventTime * MS_TO_NS,
|
||||
event.deviceId,
|
||||
event.source,
|
||||
event.keyCode,
|
||||
event.modifiers,
|
||||
down,
|
||||
event.repeatCount
|
||||
)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if (sendNewCocosEvents) {
|
||||
if (KeyEvent.isGamepadButton(keyCode)) {
|
||||
return
|
||||
}
|
||||
|
||||
if (keyCode == KeyEvent.KEYCODE_ESCAPE && BaseRobTopActivity.blockBackButton) {
|
||||
return
|
||||
}
|
||||
|
||||
val isRepeat = event.repeatCount > 0
|
||||
val eventTimestamp = event.eventTime / 1000.0
|
||||
|
||||
queueEvent {
|
||||
cocos2dxRenderer.handleKeyboardEvent(
|
||||
keyCode, down, isRepeat, eventTimestamp,
|
||||
event.isShiftPressed, event.isCtrlPressed, event.isAltPressed
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun legacyKeyDown(keyCode: Int, keyEvent: KeyEvent): Boolean {
|
||||
return when (keyCode) {
|
||||
KeyEvent.KEYCODE_BACK, KeyEvent.KEYCODE_MENU -> {
|
||||
@@ -354,67 +474,51 @@ class Cocos2dxGLSurfaceView(context: Context) : GLSurfaceView(context) {
|
||||
}
|
||||
|
||||
override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
|
||||
if (!useKeyboardEvents && !controllerEventsEnabled) {
|
||||
val deliverGeodeEvents = useKeyboardEvents || controllerEventsEnabled
|
||||
if (!deliverGeodeEvents && !sendNewCocosEvents) {
|
||||
return legacyKeyDown(keyCode, event)
|
||||
}
|
||||
|
||||
return when (keyCode) {
|
||||
// ignore system keys
|
||||
KeyEvent.KEYCODE_VOLUME_DOWN, KeyEvent.KEYCODE_VOLUME_UP, KeyEvent.KEYCODE_MUTE -> {
|
||||
super.onKeyDown(keyCode, event)
|
||||
if (keyCode == KeyEvent.KEYCODE_BACK || keyCode == KeyEvent.KEYCODE_MENU) {
|
||||
if (deliverGeodeEvents) {
|
||||
queueKeyboardEvent(keyCode, event, true)
|
||||
return true
|
||||
}
|
||||
else -> {
|
||||
if (BaseRobTopActivity.blockBackButton) {
|
||||
return true
|
||||
}
|
||||
|
||||
queueEvent {
|
||||
sendNextEventTimestamp(event.eventTime * MS_TO_NS)
|
||||
|
||||
if (useKeyboardEvents) {
|
||||
GeodeUtils.nativeKeyDown(keyCode, event.modifiers, event.repeatCount != 0)
|
||||
}
|
||||
|
||||
if (controllerEventsEnabled) {
|
||||
GeodeUtils.internalKeyEvent(event.eventTime * MS_TO_NS, event.deviceId, event.source, event.keyCode, event.modifiers, true, event.repeatCount)
|
||||
}
|
||||
}
|
||||
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
|
||||
}
|
||||
|
||||
override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean {
|
||||
if (!useKeyboardEvents && !controllerEventsEnabled) {
|
||||
val deliverGeodeEvents = useKeyboardEvents || controllerEventsEnabled
|
||||
if (!deliverGeodeEvents && !sendNewCocosEvents) {
|
||||
return super.onKeyUp(keyCode, event)
|
||||
}
|
||||
|
||||
return when (keyCode) {
|
||||
KeyEvent.KEYCODE_VOLUME_DOWN, KeyEvent.KEYCODE_VOLUME_UP, KeyEvent.KEYCODE_MUTE -> {
|
||||
super.onKeyUp(keyCode, event)
|
||||
}
|
||||
else -> {
|
||||
if (event.repeatCount != 0 || BaseRobTopActivity.blockBackButton) {
|
||||
return true
|
||||
}
|
||||
|
||||
queueEvent {
|
||||
sendNextEventTimestamp(event.eventTime * MS_TO_NS)
|
||||
|
||||
if (useKeyboardEvents) {
|
||||
GeodeUtils.nativeKeyUp(keyCode, event.modifiers)
|
||||
}
|
||||
|
||||
if (controllerEventsEnabled) {
|
||||
GeodeUtils.internalKeyEvent(event.eventTime * MS_TO_NS, event.deviceId, event.source, event.keyCode, event.modifiers, false, event.repeatCount)
|
||||
}
|
||||
}
|
||||
|
||||
true
|
||||
}
|
||||
if (event.isSystem) {
|
||||
return super.onKeyUp(keyCode, event)
|
||||
}
|
||||
|
||||
queueKeyboardEvent(keyCode, event, false)
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
|
||||
// i'm lazy.
|
||||
// https://developer.android.com/develop/ui/views/touch-and-input/game-controllers/controller-input
|
||||
private fun getCenteredAxis(
|
||||
@@ -475,11 +579,15 @@ class Cocos2dxGLSurfaceView(context: Context) : GLSurfaceView(context) {
|
||||
}
|
||||
|
||||
override fun onGenericMotionEvent(event: MotionEvent?): Boolean {
|
||||
if (!useKeyboardEvents && !controllerEventsEnabled) {
|
||||
val hasGeodeEvents = useKeyboardEvents || controllerEventsEnabled
|
||||
if (!hasGeodeEvents && !sendNewCocosEvents) {
|
||||
return super.onGenericMotionEvent(event)
|
||||
}
|
||||
|
||||
if (event?.action == MotionEvent.ACTION_SCROLL) {
|
||||
val mouseX = event.x
|
||||
val mouseY = event.y
|
||||
|
||||
val scrollX = event.getAxisValue(MotionEvent.AXIS_HSCROLL)
|
||||
val scrollY = event.getAxisValue(MotionEvent.AXIS_VSCROLL)
|
||||
val timestamp = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
|
||||
@@ -493,7 +601,11 @@ class Cocos2dxGLSurfaceView(context: Context) : GLSurfaceView(context) {
|
||||
}
|
||||
|
||||
if (controllerEventsEnabled) {
|
||||
GeodeUtils.internalScrollEvent(timestamp, event.deviceId, event.source, scrollX, scrollY)
|
||||
GeodeUtils.internalScrollEvent(timestamp, event.deviceId, event.source, scrollX, scrollY, mouseX, mouseY)
|
||||
}
|
||||
|
||||
if (!hasGeodeEvents && sendNewCocosEvents) {
|
||||
cocos2dxRenderer.handleScroll(mouseX, mouseY, scrollY, scrollX)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -28,12 +28,29 @@ class Cocos2dxRenderer(private var handler: Cocos2dxGLSurfaceView) : GLSurfaceVi
|
||||
@JvmStatic
|
||||
private external fun nativeKeyDown(keyCode: Int): Boolean
|
||||
|
||||
@JvmStatic
|
||||
private external fun nativeKeyboardEvent(
|
||||
keyCode: Int,
|
||||
down: Boolean,
|
||||
isRepeat: Boolean,
|
||||
timestamp: Double,
|
||||
shiftPressed: Boolean,
|
||||
ctrlPressed: Boolean,
|
||||
altPressed: Boolean
|
||||
)
|
||||
|
||||
@JvmStatic
|
||||
private external fun nativeKeyboardWillShow(offset: Int)
|
||||
|
||||
@JvmStatic
|
||||
private external fun nativeOnPause()
|
||||
|
||||
@JvmStatic
|
||||
private external fun nativeOnResume()
|
||||
|
||||
@JvmStatic
|
||||
private external fun nativeScroll(x: Float, y: Float, scrollY: Float, scrollX: Float)
|
||||
|
||||
@JvmStatic
|
||||
private external fun nativeRender()
|
||||
|
||||
@@ -133,6 +150,18 @@ class Cocos2dxRenderer(private var handler: Cocos2dxGLSurfaceView) : GLSurfaceVi
|
||||
nativeKeyDown(keyCode)
|
||||
}
|
||||
|
||||
fun handleKeyboardWillShow(offset: Int) {
|
||||
nativeKeyboardWillShow(offset)
|
||||
}
|
||||
|
||||
fun handleKeyboardEvent(keyCode: Int, down: Boolean, isRepeat: Boolean, timestamp: Double, shiftPressed: Boolean, ctrlPressed: Boolean, altPressed: Boolean) {
|
||||
nativeKeyboardEvent(keyCode, down, isRepeat, timestamp, shiftPressed, ctrlPressed, altPressed)
|
||||
}
|
||||
|
||||
fun handleScroll(x: Float, y: Float, scrollY: Float, scrollX: Float) {
|
||||
nativeScroll(x, y, scrollY, scrollX)
|
||||
}
|
||||
|
||||
fun handleOnPause() {
|
||||
nativeOnPause()
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user