Merge pull request #48 from Dimava/feature/mousebind

Mouse keybinds
This commit is contained in:
tobspr 2020-06-01 12:10:51 +02:00 committed by GitHub
commit 4e18fa74d4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 57 additions and 25 deletions

View File

@ -311,7 +311,7 @@ export class ClickDetector {
const position = /** @type {typeof ClickDetector} */ (this.constructor).extractPointerPosition(event); const position = /** @type {typeof ClickDetector} */ (this.constructor).extractPointerPosition(event);
if (event instanceof MouseEvent) { if (event instanceof MouseEvent) {
const isRightClick = event.which == 3; const isRightClick = event.button === 2;
if (isRightClick) { if (isRightClick) {
// Ignore right clicks // Ignore right clicks
this.rightClick.dispatch(position, event); this.rightClick.dispatch(position, event);
@ -384,7 +384,7 @@ export class ClickDetector {
} }
if (event instanceof MouseEvent) { if (event instanceof MouseEvent) {
const isRightClick = event.which == 3; const isRightClick = event.button === 2;
if (isRightClick) { if (isRightClick) {
return; return;
} }

View File

@ -141,8 +141,13 @@ export class InputDistributor {
bindToEvents() { bindToEvents() {
window.addEventListener("popstate", this.handleBackButton.bind(this), false); window.addEventListener("popstate", this.handleBackButton.bind(this), false);
document.addEventListener("backbutton", this.handleBackButton.bind(this), false); document.addEventListener("backbutton", this.handleBackButton.bind(this), false);
window.addEventListener("keydown", this.handleKeydown.bind(this));
window.addEventListener("keyup", this.handleKeyup.bind(this)); window.addEventListener("keydown", this.handleKeyMouseDown.bind(this));
window.addEventListener("keyup", this.handleKeyMouseUp.bind(this));
window.addEventListener("mousedown", this.handleKeyMouseDown.bind(this));
window.addEventListener("mouseup", this.handleKeyMouseUp.bind(this));
window.addEventListener("blur", this.handleBlur.bind(this)); window.addEventListener("blur", this.handleBlur.bind(this));
} }
@ -182,25 +187,28 @@ export class InputDistributor {
} }
/** /**
* @param {KeyboardEvent} event * @param {KeyboardEvent | MouseEvent} event
*/ */
handleKeydown(event) { handleKeyMouseDown(event) {
const keyCode = event instanceof MouseEvent ? event.button + 1 : event.keyCode;
if ( if (
event.keyCode === 9 || // TAB keyCode === 4 || // MB4
event.keyCode === 16 || // SHIFT keyCode === 5 || // MB5
event.keyCode === 17 || // CTRL keyCode === 9 || // TAB
event.keyCode === 18 || // ALT keyCode === 16 || // SHIFT
(event.keyCode >= 112 && event.keyCode < 122) // F1 - F10 keyCode === 17 || // CTRL
keyCode === 18 || // ALT
(keyCode >= 112 && keyCode < 122) // F1 - F10
) { ) {
event.preventDefault(); event.preventDefault();
} }
const isInitial = !this.keysDown.has(event.keyCode); const isInitial = !this.keysDown.has(keyCode);
this.keysDown.add(event.keyCode); this.keysDown.add(keyCode);
if ( if (
this.forwardToReceiver("keydown", { this.forwardToReceiver("keydown", {
keyCode: event.keyCode, keyCode: keyCode,
shift: event.shiftKey, shift: event.shiftKey,
alt: event.altKey, alt: event.altKey,
initial: isInitial, initial: isInitial,
@ -210,8 +218,7 @@ export class InputDistributor {
return; return;
} }
const code = event.keyCode; if (keyCode === 27) {
if (code === 27) {
// Escape key // Escape key
event.preventDefault(); event.preventDefault();
event.stopPropagation(); event.stopPropagation();
@ -220,13 +227,14 @@ export class InputDistributor {
} }
/** /**
* @param {KeyboardEvent} event * @param {KeyboardEvent | MouseEvent} event
*/ */
handleKeyup(event) { handleKeyMouseUp(event) {
this.keysDown.delete(event.keyCode); const keyCode = event instanceof MouseEvent ? event.button + 1 : event.keyCode;
this.keysDown.delete(keyCode);
this.forwardToReceiver("keyup", { this.forwardToReceiver("keyup", {
keyCode: event.keyCode, keyCode: keyCode,
shift: event.shiftKey, shift: event.shiftKey,
alt: event.altKey, alt: event.altKey,
}); });

View File

@ -440,11 +440,11 @@ export class Camera extends BasicSerializableObject {
} }
this.touchPostMoveVelocity = new Vector(0, 0); this.touchPostMoveVelocity = new Vector(0, 0);
if (event.which === 1) { if (event.button === 0) {
this.combinedSingleTouchStartHandler(event.clientX, event.clientY); this.combinedSingleTouchStartHandler(event.clientX, event.clientY);
} else if (event.which === 2) { } else if (event.button === 1) {
this.downPreHandler.dispatch(new Vector(event.clientX, event.clientY), enumMouseButton.middle); this.downPreHandler.dispatch(new Vector(event.clientX, event.clientY), enumMouseButton.middle);
} else if (event.which === 3) { } else if (event.button === 2) {
this.downPreHandler.dispatch(new Vector(event.clientX, event.clientY), enumMouseButton.right); this.downPreHandler.dispatch(new Vector(event.clientX, event.clientY), enumMouseButton.right);
} }
return false; return false;
@ -464,7 +464,7 @@ export class Camera extends BasicSerializableObject {
return; return;
} }
if (event.which === 1) { if (event.button === 0) {
this.combinedSingleTouchMoveHandler(event.clientX, event.clientY); this.combinedSingleTouchMoveHandler(event.clientX, event.clientY);
} }

View File

@ -89,6 +89,16 @@ for (const categoryId in KEYMAPPINGS) {
*/ */
export function getStringForKeyCode(code) { export function getStringForKeyCode(code) {
switch (code) { switch (code) {
case 1:
return "LMB";
case 2:
return "MMB";
case 3:
return "RMB";
case 4:
return "MB4";
case 5:
return "MB5";
case 8: case 8:
return "⌫"; return "⌫";
case 9: case 9:

View File

@ -121,9 +121,23 @@ export class KeybindingsState extends TextualGameState {
this.updateKeybindings(); this.updateKeybindings();
}); });
dialog.inputReciever.backButton.add(() => {}); const clickListener = event => {
if (event.target.tagName == "BUTTON") {
return;
}
event.preventDefault();
const keyCode = event.button + 1;
this.app.settings.updateKeybindingOverride(id, keyCode);
this.dialogs.closeDialog(dialog);
this.updateKeybindings();
};
dialog.inputReciever.backButton.add(() => {});
this.dialogs.internalShowDialog(dialog); this.dialogs.internalShowDialog(dialog);
dialog.element.addEventListener("mousedown", clickListener);
this.app.sound.playUiSound(SOUNDS.dialogOk); this.app.sound.playUiSound(SOUNDS.dialogOk);
} }