make window shortcuts work on OSX

This commit is contained in:
Thijs Wenker 2018-11-14 00:48:16 +01:00
parent 0248323bee
commit 2c715bf592
4 changed files with 87 additions and 22 deletions

View file

@ -12,7 +12,8 @@
/* global Script, SelectionDisplay, LightOverlayManager, CameraManager, Grid, GridTool, EntityListTool, Vec3, SelectionManager,
Overlays, OverlayWebWindow, UserActivityLogger, Settings, Entities, Tablet, Toolbars, Messages, Menu, Camera,
progressDialog, tooltip, MyAvatar, Quat, Controller, Clipboard, HMD, UndoStack, OverlaySystemWindow */
progressDialog, tooltip, MyAvatar, Quat, Controller, Clipboard, HMD, UndoStack, OverlaySystemWindow,
keyUpEventFromUIWindow:true */
(function() { // BEGIN LOCAL_SCOPE
@ -2706,42 +2707,44 @@ mapping.from([Controller.Hardware.Keyboard.P])
.when([Controller.Hardware.Keyboard.Control, !Controller.Hardware.Keyboard.Shift])
.to(whenReleased(function() { parentSelectedEntities(); }));
function keyUpEventFromUIWindow(keyUpEvent) {
keyUpEventFromUIWindow = function(keyUpEvent) {
var WANT_DEBUG_MISSING_SHORTCUTS = false;
var pressedValue = 0.0;
// Note: For some reason the keyboardEvent for delete does not show a code, using key instead:
if ((!isOnMacPlatform && keyUpEvent.key === "Delete") || (isOnMacPlatform && keyUpEvent.code === "Backspace")) {
if ((!isOnMacPlatform && keyUpEvent.keyCodeString === "Delete")
|| (isOnMacPlatform && keyUpEvent.keyCodeString === "Backspace")) {
deleteKey(pressedValue);
} else if (keyUpEvent.code === "KeyT") {
} else if (keyUpEvent.keyCodeString === "T") {
toggleKey(pressedValue);
} else if (keyUpEvent.code === "KeyF") {
} else if (keyUpEvent.keyCodeString === "F") {
focusKey(pressedValue);
} else if (keyUpEvent.code === "KeyG") {
} else if (keyUpEvent.keyCodeString === "G") {
gridKey(pressedValue);
} else if (keyUpEvent.ctrlKey && keyUpEvent.code === "KeyX") {
} else if (keyUpEvent.ctrlKey && keyUpEvent.keyCodeString === "X") {
selectionManager.cutSelectedEntities();
} else if (keyUpEvent.ctrlKey && keyUpEvent.code === "KeyC") {
} else if (keyUpEvent.ctrlKey && keyUpEvent.keyCodeString === "C") {
selectionManager.copySelectedEntities();
} else if (keyUpEvent.ctrlKey && keyUpEvent.code === "KeyV") {
} else if (keyUpEvent.ctrlKey && keyUpEvent.keyCodeString === "V") {
selectionManager.pasteEntities();
} else if (keyUpEvent.ctrlKey && keyUpEvent.code === "KeyD") {
} else if (keyUpEvent.ctrlKey && keyUpEvent.keyCodeString === "D") {
selectionManager.duplicateSelection();
} else if (keyUpEvent.ctrlKey && !keyUpEvent.shiftKey && keyUpEvent.code === "KeyZ") {
} else if (keyUpEvent.ctrlKey && !keyUpEvent.shiftKey && keyUpEvent.keyCodeString === "Z") {
undoHistory.undo();
} else if (keyUpEvent.ctrlKey && !keyUpEvent.shiftKey && keyUpEvent.code === "KeyP") {
} else if (keyUpEvent.ctrlKey && !keyUpEvent.shiftKey && keyUpEvent.keyCodeString === "P") {
parentSelectedEntities();
} else if (keyUpEvent.ctrlKey && keyUpEvent.shiftKey && keyUpEvent.code === "KeyP") {
} else if (keyUpEvent.ctrlKey && keyUpEvent.shiftKey && keyUpEvent.keyCodeString === "P") {
unparentSelectedEntities();
} else if (
(keyUpEvent.ctrlKey && keyUpEvent.shiftKey && keyUpEvent.code === "KeyZ") ||
(keyUpEvent.ctrlKey && keyUpEvent.code === "KeyY")) {
(keyUpEvent.ctrlKey && keyUpEvent.shiftKey && keyUpEvent.keyCodeString === "Z") ||
(keyUpEvent.ctrlKey && keyUpEvent.keyCodeString === "Y")) {
undoHistory.redo();
} else if (WANT_DEBUG_MISSING_SHORTCUTS) {
console.warn("unhandled key event: " + JSON.stringify(keyUpEvent))
}
}
};
var propertyMenu = new PopupMenu();
@ -2756,7 +2759,6 @@ var showMenuItem = propertyMenu.addMenuItem("Show in Marketplace");
var propertiesTool = new PropertiesTool();
selectionDisplay.onSpaceModeChange = function(spaceMode) {
entityListTool.setSpaceMode(spaceMode);
propertiesTool.setSpaceMode(spaceMode);

View file

@ -1112,13 +1112,33 @@ function loaded() {
elToggleSpaceMode.innerText = "World";
}
}
const KEY_CODES = {
BACKSPACE: 8,
DELETE: 46
};
document.addEventListener("keyup", function (keyUpEvent) {
if (keyUpEvent.target.nodeName === "INPUT") {
return;
}
if (keyUpEvent.ctrlKey && keyUpEvent.code === "KeyA") {
let {code, key, keyCode, altKey, ctrlKey, shiftKey} = keyUpEvent;
let keyCodeString;
switch (keyCode) {
case KEY_CODES.DELETE:
keyCodeString = "Delete";
break;
case KEY_CODES.BACKSPACE:
keyCodeString = "Backspace";
break;
default:
keyCodeString = String.fromCharCode(keyUpEvent.keyCode);
break;
}
if (ctrlKey && keyCodeString === "A") {
let visibleEntityIDs = visibleEntities.map(visibleEntity => visibleEntity.id);
let selectionIncludesAllVisibleEntityIDs = visibleEntityIDs.every(visibleEntityID => {
return selectedEntities.includes(visibleEntityID);
@ -1142,12 +1162,13 @@ function loaded() {
}
let {code, key, altKey, ctrlKey, shiftKey} = keyUpEvent;
EventBridge.emitWebEvent(JSON.stringify({
type: 'keyUpEvent',
keyUpEvent: {
code,
key,
keyCode,
keyCodeString,
altKey,
ctrlKey,
shiftKey

View file

@ -3493,16 +3493,37 @@ function loaded() {
elDropdowns = document.getElementsByTagName("select");
}
const KEY_CODES = {
BACKSPACE: 8,
DELETE: 46
};
document.addEventListener("keyup", function (keyUpEvent) {
if (keyUpEvent.target.nodeName === "INPUT") {
return;
}
let {code, key, altKey, ctrlKey, shiftKey} = keyUpEvent;
let {code, key, keyCode, altKey, ctrlKey, shiftKey} = keyUpEvent;
let keyCodeString;
switch (keyCode) {
case KEY_CODES.DELETE:
keyCodeString = "Delete";
break;
case KEY_CODES.BACKSPACE:
keyCodeString = "Backspace";
break;
default:
keyCodeString = String.fromCharCode(keyUpEvent.keyCode);
break;
}
EventBridge.emitWebEvent(JSON.stringify({
type: 'keyUpEvent',
keyUpEvent: {
code,
key,
keyCode,
keyCodeString,
altKey,
ctrlKey,
shiftKey

View file

@ -130,16 +130,37 @@ function loaded() {
EventBridge.emitWebEvent(JSON.stringify({ type: 'init' }));
});
const KEY_CODES = {
BACKSPACE: 8,
DELETE: 46
};
document.addEventListener("keyup", function (keyUpEvent) {
if (keyUpEvent.target.nodeName === "INPUT") {
return;
}
let {code, key, altKey, ctrlKey, shiftKey} = keyUpEvent;
let {code, key, keyCode, altKey, ctrlKey, shiftKey} = keyUpEvent;
let keyCodeString;
switch (keyCode) {
case KEY_CODES.DELETE:
keyCodeString = "Delete";
break;
case KEY_CODES.BACKSPACE:
keyCodeString = "Backspace";
break;
default:
keyCodeString = String.fromCharCode(keyUpEvent.keyCode);
break;
}
EventBridge.emitWebEvent(JSON.stringify({
type: 'keyUpEvent',
keyUpEvent: {
code,
key,
keyCode,
keyCodeString,
altKey,
ctrlKey,
shiftKey