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, /* global Script, SelectionDisplay, LightOverlayManager, CameraManager, Grid, GridTool, EntityListTool, Vec3, SelectionManager,
Overlays, OverlayWebWindow, UserActivityLogger, Settings, Entities, Tablet, Toolbars, Messages, Menu, Camera, 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 (function() { // BEGIN LOCAL_SCOPE
@ -2706,42 +2707,44 @@ mapping.from([Controller.Hardware.Keyboard.P])
.when([Controller.Hardware.Keyboard.Control, !Controller.Hardware.Keyboard.Shift]) .when([Controller.Hardware.Keyboard.Control, !Controller.Hardware.Keyboard.Shift])
.to(whenReleased(function() { parentSelectedEntities(); })); .to(whenReleased(function() { parentSelectedEntities(); }));
function keyUpEventFromUIWindow(keyUpEvent) { keyUpEventFromUIWindow = function(keyUpEvent) {
var WANT_DEBUG_MISSING_SHORTCUTS = false; var WANT_DEBUG_MISSING_SHORTCUTS = false;
var pressedValue = 0.0; 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); deleteKey(pressedValue);
} else if (keyUpEvent.code === "KeyT") { } else if (keyUpEvent.keyCodeString === "T") {
toggleKey(pressedValue); toggleKey(pressedValue);
} else if (keyUpEvent.code === "KeyF") { } else if (keyUpEvent.keyCodeString === "F") {
focusKey(pressedValue); focusKey(pressedValue);
} else if (keyUpEvent.code === "KeyG") { } else if (keyUpEvent.keyCodeString === "G") {
gridKey(pressedValue); gridKey(pressedValue);
} else if (keyUpEvent.ctrlKey && keyUpEvent.code === "KeyX") { } else if (keyUpEvent.ctrlKey && keyUpEvent.keyCodeString === "X") {
selectionManager.cutSelectedEntities(); selectionManager.cutSelectedEntities();
} else if (keyUpEvent.ctrlKey && keyUpEvent.code === "KeyC") { } else if (keyUpEvent.ctrlKey && keyUpEvent.keyCodeString === "C") {
selectionManager.copySelectedEntities(); selectionManager.copySelectedEntities();
} else if (keyUpEvent.ctrlKey && keyUpEvent.code === "KeyV") { } else if (keyUpEvent.ctrlKey && keyUpEvent.keyCodeString === "V") {
selectionManager.pasteEntities(); selectionManager.pasteEntities();
} else if (keyUpEvent.ctrlKey && keyUpEvent.code === "KeyD") { } else if (keyUpEvent.ctrlKey && keyUpEvent.keyCodeString === "D") {
selectionManager.duplicateSelection(); selectionManager.duplicateSelection();
} else if (keyUpEvent.ctrlKey && !keyUpEvent.shiftKey && keyUpEvent.code === "KeyZ") { } else if (keyUpEvent.ctrlKey && !keyUpEvent.shiftKey && keyUpEvent.keyCodeString === "Z") {
undoHistory.undo(); undoHistory.undo();
} else if (keyUpEvent.ctrlKey && !keyUpEvent.shiftKey && keyUpEvent.code === "KeyP") { } else if (keyUpEvent.ctrlKey && !keyUpEvent.shiftKey && keyUpEvent.keyCodeString === "P") {
parentSelectedEntities(); parentSelectedEntities();
} else if (keyUpEvent.ctrlKey && keyUpEvent.shiftKey && keyUpEvent.code === "KeyP") { } else if (keyUpEvent.ctrlKey && keyUpEvent.shiftKey && keyUpEvent.keyCodeString === "P") {
unparentSelectedEntities(); unparentSelectedEntities();
} else if ( } else if (
(keyUpEvent.ctrlKey && keyUpEvent.shiftKey && keyUpEvent.code === "KeyZ") || (keyUpEvent.ctrlKey && keyUpEvent.shiftKey && keyUpEvent.keyCodeString === "Z") ||
(keyUpEvent.ctrlKey && keyUpEvent.code === "KeyY")) { (keyUpEvent.ctrlKey && keyUpEvent.keyCodeString === "Y")) {
undoHistory.redo(); undoHistory.redo();
} else if (WANT_DEBUG_MISSING_SHORTCUTS) { } else if (WANT_DEBUG_MISSING_SHORTCUTS) {
console.warn("unhandled key event: " + JSON.stringify(keyUpEvent)) console.warn("unhandled key event: " + JSON.stringify(keyUpEvent))
} }
} };
var propertyMenu = new PopupMenu(); var propertyMenu = new PopupMenu();
@ -2756,7 +2759,6 @@ var showMenuItem = propertyMenu.addMenuItem("Show in Marketplace");
var propertiesTool = new PropertiesTool(); var propertiesTool = new PropertiesTool();
selectionDisplay.onSpaceModeChange = function(spaceMode) { selectionDisplay.onSpaceModeChange = function(spaceMode) {
entityListTool.setSpaceMode(spaceMode); entityListTool.setSpaceMode(spaceMode);
propertiesTool.setSpaceMode(spaceMode); propertiesTool.setSpaceMode(spaceMode);

View file

@ -1112,13 +1112,33 @@ function loaded() {
elToggleSpaceMode.innerText = "World"; elToggleSpaceMode.innerText = "World";
} }
} }
const KEY_CODES = {
BACKSPACE: 8,
DELETE: 46
};
document.addEventListener("keyup", function (keyUpEvent) { document.addEventListener("keyup", function (keyUpEvent) {
if (keyUpEvent.target.nodeName === "INPUT") { if (keyUpEvent.target.nodeName === "INPUT") {
return; 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 visibleEntityIDs = visibleEntities.map(visibleEntity => visibleEntity.id);
let selectionIncludesAllVisibleEntityIDs = visibleEntityIDs.every(visibleEntityID => { let selectionIncludesAllVisibleEntityIDs = visibleEntityIDs.every(visibleEntityID => {
return selectedEntities.includes(visibleEntityID); return selectedEntities.includes(visibleEntityID);
@ -1142,12 +1162,13 @@ function loaded() {
} }
let {code, key, altKey, ctrlKey, shiftKey} = keyUpEvent;
EventBridge.emitWebEvent(JSON.stringify({ EventBridge.emitWebEvent(JSON.stringify({
type: 'keyUpEvent', type: 'keyUpEvent',
keyUpEvent: { keyUpEvent: {
code, code,
key, key,
keyCode,
keyCodeString,
altKey, altKey,
ctrlKey, ctrlKey,
shiftKey shiftKey

View file

@ -3493,16 +3493,37 @@ function loaded() {
elDropdowns = document.getElementsByTagName("select"); elDropdowns = document.getElementsByTagName("select");
} }
const KEY_CODES = {
BACKSPACE: 8,
DELETE: 46
};
document.addEventListener("keyup", function (keyUpEvent) { document.addEventListener("keyup", function (keyUpEvent) {
if (keyUpEvent.target.nodeName === "INPUT") { if (keyUpEvent.target.nodeName === "INPUT") {
return; 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({ EventBridge.emitWebEvent(JSON.stringify({
type: 'keyUpEvent', type: 'keyUpEvent',
keyUpEvent: { keyUpEvent: {
code, code,
key, key,
keyCode,
keyCodeString,
altKey, altKey,
ctrlKey, ctrlKey,
shiftKey shiftKey

View file

@ -130,16 +130,37 @@ function loaded() {
EventBridge.emitWebEvent(JSON.stringify({ type: 'init' })); EventBridge.emitWebEvent(JSON.stringify({ type: 'init' }));
}); });
const KEY_CODES = {
BACKSPACE: 8,
DELETE: 46
};
document.addEventListener("keyup", function (keyUpEvent) { document.addEventListener("keyup", function (keyUpEvent) {
if (keyUpEvent.target.nodeName === "INPUT") { if (keyUpEvent.target.nodeName === "INPUT") {
return; 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({ EventBridge.emitWebEvent(JSON.stringify({
type: 'keyUpEvent', type: 'keyUpEvent',
keyUpEvent: { keyUpEvent: {
code, code,
key, key,
keyCode,
keyCodeString,
altKey, altKey,
ctrlKey, ctrlKey,
shiftKey shiftKey