mirror of
https://github.com/2009scape/2009Scape-mobile.git
synced 2025-12-21 09:01:56 -07:00
[Input pipe] Bug fix attempt: combining Alt/Ctrl/Shift/etc.. not working
This commit is contained in:
parent
9a8e961795
commit
9b88689802
5 changed files with 56 additions and 40 deletions
|
|
@ -172,27 +172,18 @@ public class AndroidLWJGLKeycode {
|
|||
}
|
||||
}
|
||||
|
||||
int mods = 0;
|
||||
if (keyEvent.isAltPressed()) {
|
||||
mods &= LWJGLGLFWKeycode.GLFW_MOD_ALT;
|
||||
} if (keyEvent.isCapsLockOn()) {
|
||||
mods &= LWJGLGLFWKeycode.GLFW_MOD_CAPS_LOCK;
|
||||
} if (keyEvent.isCtrlPressed()) {
|
||||
mods &= LWJGLGLFWKeycode.GLFW_MOD_CONTROL;
|
||||
} /* if (keyEvent.isFunctionPressed()) {
|
||||
mods &= LWJGLGLFWKeycode.GLFW_MOD_FUNCTION
|
||||
} */ if (keyEvent.isNumLockOn()) {
|
||||
mods &= LWJGLGLFWKeycode.GLFW_MOD_NUM_LOCK;
|
||||
} if (keyEvent.isShiftPressed()) {
|
||||
mods &= LWJGLGLFWKeycode.GLFW_MOD_SHIFT;
|
||||
}
|
||||
CallbackBridge.holdingAlt = keyEvent.isAltPressed();
|
||||
CallbackBridge.holdingCapslock = keyEvent.isCapsLockOn();
|
||||
CallbackBridge.holdingCtrl = keyEvent.isCtrlPressed();
|
||||
CallbackBridge.holdingNumlock = keyEvent.isNumLockOn();
|
||||
CallbackBridge.holdingShift = keyEvent.isShiftPressed();
|
||||
|
||||
try {
|
||||
if (!CallbackBridge.isGrabbing()) {
|
||||
if (keyEvent.isPrintingKey()) {
|
||||
BaseMainActivity.sendKeyPress(androidToLwjglMap.get(keyEvent.getKeyCode()), (char) keyEvent.getUnicodeChar(keyEvent.getMetaState()), keyEvent.getScanCode(), mods, isDown);
|
||||
BaseMainActivity.sendKeyPress(androidToLwjglMap.get(keyEvent.getKeyCode()), (char) keyEvent.getUnicodeChar(keyEvent.getMetaState()), keyEvent.getScanCode(), CallbackBridge.getCurrentMods(), isDown);
|
||||
} else if ((int) keyEvent.getDisplayLabel() != KeyEvent.KEYCODE_UNKNOWN) {
|
||||
BaseMainActivity.sendKeyPress(androidToLwjglMap.get(keyEvent.getKeyCode()), (char) keyEvent.getDisplayLabel(), keyEvent.getScanCode(), mods, isDown);
|
||||
BaseMainActivity.sendKeyPress(androidToLwjglMap.get(keyEvent.getKeyCode()), (char) keyEvent.getDisplayLabel(), keyEvent.getScanCode(), CallbackBridge.getCurrentMods(), isDown);
|
||||
}
|
||||
}
|
||||
} catch (Throwable th) {
|
||||
|
|
|
|||
|
|
@ -609,7 +609,7 @@ public class BaseMainActivity extends LoggableActivity {
|
|||
case MotionEvent.ACTION_POINTER_DOWN: // 5
|
||||
CallbackBridge.sendPrepareGrabInitialPos();
|
||||
|
||||
CallbackBridge.sendMouseKeycode(CallbackBridge.mouseLeft ? LWJGLGLFWKeycode.GLFW_MOUSE_BUTTON_LEFT : LWJGLGLFWKeycode.GLFW_MOUSE_BUTTON_RIGHT, 0, true);
|
||||
CallbackBridge.sendMouseKeycode(CallbackBridge.mouseLeft ? LWJGLGLFWKeycode.GLFW_MOUSE_BUTTON_LEFT : LWJGLGLFWKeycode.GLFW_MOUSE_BUTTON_RIGHT, CallbackBridge.getCurrentMods(), true);
|
||||
initialX = x;
|
||||
initialY = y;
|
||||
|
||||
|
|
@ -1071,13 +1071,13 @@ public class BaseMainActivity extends LoggableActivity {
|
|||
}
|
||||
|
||||
public void sendKeyPress(char keyChar) {
|
||||
sendKeyPress(0, keyChar, 0, 0, true);
|
||||
sendKeyPress(0, keyChar, 0, 0, false);
|
||||
sendKeyPress(0, keyChar, 0, CallbackBridge.getCurrentMods(), true);
|
||||
sendKeyPress(0, keyChar, 0, CallbackBridge.getCurrentMods(), false);
|
||||
}
|
||||
|
||||
public void sendKeyPress(int keyCode) {
|
||||
sendKeyPress(keyCode, 0, true);
|
||||
sendKeyPress(keyCode, 0, false);
|
||||
sendKeyPress(keyCode, CallbackBridge.getCurrentMods(), true);
|
||||
sendKeyPress(keyCode, CallbackBridge.getCurrentMods(), false);
|
||||
}
|
||||
|
||||
private static boolean isLeftMouseDown, isRightMouseDown;
|
||||
|
|
@ -1089,7 +1089,7 @@ public class BaseMainActivity extends LoggableActivity {
|
|||
isLeftMouseDown = button == LWJGLGLFWKeycode.GLFW_MOUSE_BUTTON_LEFT && status;
|
||||
isRightMouseDown = button == LWJGLGLFWKeycode.GLFW_MOUSE_BUTTON_RIGHT && status;
|
||||
|
||||
CallbackBridge.sendMouseKeycode(button, 0, status);
|
||||
CallbackBridge.sendMouseKeycode(button, CallbackBridge.getCurrentMods(), status);
|
||||
}
|
||||
|
||||
public void calculateMcScale() {
|
||||
|
|
|
|||
|
|
@ -24,7 +24,6 @@ public class ControlButton extends Button implements OnLongClickListener, OnTouc
|
|||
private boolean mChecked = false;
|
||||
|
||||
private float mScaleAt;
|
||||
private int mMods;
|
||||
|
||||
public ControlButton(ControlLayout layout, ControlData properties) {
|
||||
super(layout.getContext());
|
||||
|
|
@ -67,14 +66,6 @@ public class ControlButton extends Button implements OnLongClickListener, OnTouc
|
|||
mProperties.transparency = mProperties.hidden ? 100 : mProperties.transparency;
|
||||
properties.update();
|
||||
|
||||
if (properties.holdAlt) {
|
||||
mMods &= LWJGLGLFWKeycode.GLFW_MOD_ALT;
|
||||
} if (properties.holdCtrl) {
|
||||
mMods &= LWJGLGLFWKeycode.GLFW_MOD_CONTROL;
|
||||
} if (properties.holdShift) {
|
||||
mMods &= LWJGLGLFWKeycode.GLFW_MOD_SHIFT;
|
||||
}
|
||||
|
||||
// com.android.internal.R.string.delete
|
||||
// android.R.string.
|
||||
setText(properties.name);
|
||||
|
|
@ -93,7 +84,8 @@ public class ControlButton extends Button implements OnLongClickListener, OnTouc
|
|||
// setOnLongClickListener(null);
|
||||
setOnTouchListener((View.OnTouchListener) properties.specialButtonListener);
|
||||
} else {
|
||||
throw new IllegalArgumentException("Field " + ControlData.class.getName() + ".specialButtonListener must be View.OnClickListener or View.OnTouchListener, but is " + properties.specialButtonListener.getClass().getName());
|
||||
throw new IllegalArgumentException("Field " + ControlData.class.getName() + ".specialButtonListener must be View.OnClickListener or View.OnTouchListener, but was " +
|
||||
properties.specialButtonListener.getClass().getName());
|
||||
}
|
||||
|
||||
setLayoutParams(new FrameLayout.LayoutParams((int) properties.width, (int) properties.height));
|
||||
|
|
@ -169,6 +161,20 @@ public class ControlButton extends Button implements OnLongClickListener, OnTouc
|
|||
return mCanTriggerLongClick;
|
||||
}
|
||||
|
||||
private void setHolding(boolean isDown) {
|
||||
if (mProperties.holdAlt || mProperties.keycode == LWJGLGLFWKeycode.GLFW_KEY_LEFT_ALT || mProperties.keycode == LWJGLGLFWKeycode.GLFW_KEY_RIGHT_ALT) {
|
||||
CallbackBridge.holdingAlt = isDown;
|
||||
} if (mProperties.keycode == LWJGLGLFWKeycode.GLFW_KEY_CAPS_LOCK) {
|
||||
CallbackBridge.holdingCapslock = isDown;
|
||||
} if (mProperties.holdCtrl || mProperties.keycode == LWJGLGLFWKeycode.GLFW_KEY_LEFT_CONTROL || mProperties.keycode == LWJGLGLFWKeycode.GLFW_KEY_RIGHT_CONTROL) {
|
||||
CallbackBridge.holdingCtrl = isDown;
|
||||
} if (mProperties.keycode == LWJGLGLFWKeycode.GLFW_KEY_NUM_LOCK) {
|
||||
CallbackBridge.holdingNumlock = isDown;
|
||||
} if (mProperties.holdShift || mProperties.keycode == LWJGLGLFWKeycode.GLFW_KEY_LEFT_SHIFT || mProperties.keycode == LWJGLGLFWKeycode.GLFW_KEY_RIGHT_SHIFT) {
|
||||
CallbackBridge.holdingShift = isDown;
|
||||
}
|
||||
}
|
||||
|
||||
private float moveX, moveY;
|
||||
private float downX, downY;
|
||||
@Override
|
||||
|
|
@ -191,10 +197,12 @@ public class ControlButton extends Button implements OnLongClickListener, OnTouc
|
|||
default:
|
||||
return false;
|
||||
}
|
||||
MainActivity.sendKeyPress(mProperties.keycode, mMods, isDown);
|
||||
setHolding(isDown);
|
||||
MainActivity.sendKeyPress(mProperties.keycode, CallbackBridge.getCurrentMods(), isDown);
|
||||
} else if (mGestureDetector.onTouchEvent(event)) {
|
||||
mChecked = !mChecked;
|
||||
MainActivity.sendKeyPress(mProperties.keycode, mMods, mChecked);
|
||||
setHolding(mChecked);
|
||||
MainActivity.sendKeyPress(mProperties.keycode, CallbackBridge.getCurrentMods(), mChecked);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ public class CallbackBridge {
|
|||
|
||||
public static void putMouseEventWithCoords(int button, int state, int x, int y /* , int dz, long nanos */) {
|
||||
sendCursorPos(x, y);
|
||||
sendMouseKeycode(button, 0, state == 1);
|
||||
sendMouseKeycode(button, CallbackBridge.getCurrentMods(), state == 1);
|
||||
}
|
||||
|
||||
private static boolean threadAttached;
|
||||
|
|
@ -42,7 +42,7 @@ public class CallbackBridge {
|
|||
|
||||
public static void sendPrepareGrabInitialPos() {
|
||||
DEBUG_STRING.append("Prepare set grab initial posititon");
|
||||
sendMouseKeycode(-1, 0, false);
|
||||
sendMouseKeycode(-1, CallbackBridge.getCurrentMods(), false);
|
||||
}
|
||||
|
||||
public static void sendKeycode(int keycode, char keychar, int scancode, int modifiers, boolean isDown) {
|
||||
|
|
@ -66,8 +66,8 @@ public class CallbackBridge {
|
|||
}
|
||||
|
||||
public static void sendMouseKeycode(int keycode) {
|
||||
sendMouseKeycode(keycode, 0, true);
|
||||
sendMouseKeycode(keycode, 0, false);
|
||||
sendMouseKeycode(keycode, CallbackBridge.getCurrentMods(), true);
|
||||
sendMouseKeycode(keycode, CallbackBridge.getCurrentMods(), false);
|
||||
}
|
||||
|
||||
public static void sendScroll(double xoffset, double yoffset) {
|
||||
|
|
@ -127,6 +127,24 @@ public class CallbackBridge {
|
|||
private static native void nativeSendData(boolean isAndroid, int type, String data);
|
||||
*/
|
||||
|
||||
public static boolean holdingAlt, holdingCapslock, holdingCtrl,
|
||||
holdingNumlock, holdingShift;
|
||||
public static int getCurrentMods() {
|
||||
int currMods = 0;
|
||||
if (holdingAlt) {
|
||||
currMods &= LWJGLGLFWKeycode.GLFW_MOD_ALT;
|
||||
} if (holdingCapslock) {
|
||||
currMods &= LWJGLGLFWKeycode.GLFW_MOD_CAPS_LOCK;
|
||||
} if (holdingCtrl) {
|
||||
currMods &= LWJGLGLFWKeycode.GLFW_MOD_CONTROL;
|
||||
} if (holdingNumlock) {
|
||||
currMods &= LWJGLGLFWKeycode.GLFW_MOD_NUM_LOCK;
|
||||
} if (holdingShift) {
|
||||
currMods &= LWJGLGLFWKeycode.GLFW_MOD_SHIFT;
|
||||
}
|
||||
return currMods;
|
||||
}
|
||||
|
||||
public static native boolean nativeAttachThreadToOther(boolean isAndroid, boolean isUsePushPoll);
|
||||
/*
|
||||
private static native boolean nativeSendChar(char codepoint);
|
||||
|
|
|
|||
|
|
@ -22,7 +22,6 @@
|
|||
#define EVENT_TYPE_MOUSE_BUTTON 1006
|
||||
#define EVENT_TYPE_SCROLL 1007
|
||||
#define EVENT_TYPE_WINDOW_SIZE 1008
|
||||
#define EVENT_TYPE_KEYCODE 1009
|
||||
|
||||
typedef void GLFW_invoke_Char_func(void* window, unsigned int codepoint);
|
||||
typedef void GLFW_invoke_CharMods_func(void* window, unsigned int codepoint, int mods);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue