pxt-common-packages 12.2.12 → 12.2.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/built/common-sim.d.ts +8 -2
- package/built/common-sim.js +33 -3
- package/libs/browser-events/browserEvents.cpp +4 -0
- package/libs/browser-events/browserEvents.ts +26 -0
- package/libs/browser-events/keyboard.ts +211 -38
- package/libs/browser-events/shims.d.ts +2 -0
- package/libs/browser-events/sim/keyboard.ts +36 -3
- package/package.json +1 -1
package/built/common-sim.d.ts
CHANGED
|
@@ -341,10 +341,16 @@ declare namespace pxsim.browserEvents {
|
|
|
341
341
|
ArrowRight = 39,
|
|
342
342
|
PageDown = 34,
|
|
343
343
|
End = 35,
|
|
344
|
-
Home = 36
|
|
344
|
+
Home = 36,
|
|
345
|
+
LeftShift = 1016,
|
|
346
|
+
RightShift = 1017,
|
|
347
|
+
LeftControl = 1018,
|
|
348
|
+
RightControl = 1019,
|
|
349
|
+
Backspace = 8,
|
|
350
|
+
Delete = 46
|
|
345
351
|
}
|
|
346
352
|
function onKeyboardEvent(event: KeyboardEvent, pressed: boolean): void;
|
|
347
|
-
function getValueForKey(event: KeyboardEvent): 0 | Key;
|
|
353
|
+
function getValueForKey(event: KeyboardEvent): 0 | Key.Zero | Key.One | Key.Two | Key.Three | Key.Four | Key.Five | Key.Six | Key.Seven | Key.Eight | Key.Nine | Key.BackTick | Key.Hyphen | Key.Equals | Key.Q | Key.W | Key.E | Key.R | Key.T | Key.Y | Key.U | Key.I | Key.O | Key.P | Key.OpenBracket | Key.CloseBracket | Key.BackSlash | Key.A | Key.S | Key.D | Key.F | Key.G | Key.H | Key.Space | Key.PageUp | Key.J | Key.K | Key.L | Key.SemiColon | Key.Apostrophe | Key.Z | Key.X | Key.C | Key.V | Key.B | Key.N | Key.M | Key.Comma | Key.Period | Key.ForwardSlash | Key.Shift | Key.Enter | Key.CapsLock | Key.Tab | Key.Control | Key.Meta | Key.Alt | Key.ArrowUp | Key.ArrowDown | Key.ArrowLeft | Key.ArrowRight | Key.PageDown | Key.End | Key.Home | Key.Backspace | Key.Delete;
|
|
348
354
|
}
|
|
349
355
|
declare namespace pxsim.browserEvents {
|
|
350
356
|
interface BrowserEventsBoard extends CommonBoard {
|
package/built/common-sim.js
CHANGED
|
@@ -813,16 +813,42 @@ var pxsim;
|
|
|
813
813
|
Key[Key["PageDown"] = 34] = "PageDown";
|
|
814
814
|
Key[Key["End"] = 35] = "End";
|
|
815
815
|
Key[Key["Home"] = 36] = "Home";
|
|
816
|
+
Key[Key["LeftShift"] = 1016] = "LeftShift";
|
|
817
|
+
Key[Key["RightShift"] = 1017] = "RightShift";
|
|
818
|
+
Key[Key["LeftControl"] = 1018] = "LeftControl";
|
|
819
|
+
Key[Key["RightControl"] = 1019] = "RightControl";
|
|
820
|
+
Key[Key["Backspace"] = 8] = "Backspace";
|
|
821
|
+
Key[Key["Delete"] = 46] = "Delete";
|
|
816
822
|
})(Key = browserEvents.Key || (browserEvents.Key = {}));
|
|
817
823
|
function onKeyboardEvent(event, pressed) {
|
|
824
|
+
const eventValue = getValueForKey(event);
|
|
825
|
+
fireEvent(eventValue, pressed);
|
|
826
|
+
if (eventValue === Key.Shift) {
|
|
827
|
+
if (event.location === event.DOM_KEY_LOCATION_LEFT) {
|
|
828
|
+
fireEvent(Key.LeftShift, pressed);
|
|
829
|
+
}
|
|
830
|
+
else if (event.location === event.DOM_KEY_LOCATION_RIGHT) {
|
|
831
|
+
fireEvent(Key.RightShift, pressed);
|
|
832
|
+
}
|
|
833
|
+
}
|
|
834
|
+
if (eventValue === Key.Control) {
|
|
835
|
+
if (event.location === event.DOM_KEY_LOCATION_LEFT) {
|
|
836
|
+
fireEvent(Key.LeftControl, pressed);
|
|
837
|
+
}
|
|
838
|
+
else if (event.location === event.DOM_KEY_LOCATION_RIGHT) {
|
|
839
|
+
fireEvent(Key.RightControl, pressed);
|
|
840
|
+
}
|
|
841
|
+
}
|
|
842
|
+
}
|
|
843
|
+
browserEvents.onKeyboardEvent = onKeyboardEvent;
|
|
844
|
+
function fireEvent(key, pressed) {
|
|
818
845
|
if (pressed) {
|
|
819
|
-
pxsim.board().bus.queue(6866,
|
|
846
|
+
pxsim.board().bus.queue(6866, key);
|
|
820
847
|
}
|
|
821
848
|
else {
|
|
822
|
-
pxsim.board().bus.queue(6867,
|
|
849
|
+
pxsim.board().bus.queue(6867, key);
|
|
823
850
|
}
|
|
824
851
|
}
|
|
825
|
-
browserEvents.onKeyboardEvent = onKeyboardEvent;
|
|
826
852
|
function getValueForKey(event) {
|
|
827
853
|
switch (event.key) {
|
|
828
854
|
case "0":
|
|
@@ -998,6 +1024,10 @@ var pxsim;
|
|
|
998
1024
|
return Key.End;
|
|
999
1025
|
case "Home":
|
|
1000
1026
|
return Key.Home;
|
|
1027
|
+
case "Delete":
|
|
1028
|
+
return Key.Delete;
|
|
1029
|
+
case "Backspace":
|
|
1030
|
+
return Key.Backspace;
|
|
1001
1031
|
default:
|
|
1002
1032
|
return 0;
|
|
1003
1033
|
}
|
|
@@ -4,29 +4,47 @@
|
|
|
4
4
|
//% block="Browser Events"
|
|
5
5
|
namespace browserEvents {
|
|
6
6
|
export enum Event {
|
|
7
|
+
//% block="pointer down"
|
|
7
8
|
PointerDown = 6857,
|
|
9
|
+
//% block="pointer up"
|
|
8
10
|
PointerUp = 6858,
|
|
11
|
+
//% block="pointer move"
|
|
9
12
|
PointerMove = 6859,
|
|
13
|
+
//% block="pointer leave"
|
|
10
14
|
PointerLeave = 6860,
|
|
15
|
+
//% block="pointer enter"
|
|
11
16
|
PointerEnter = 6861,
|
|
17
|
+
//% block="pointer cancel"
|
|
12
18
|
PointerCancel = 6862,
|
|
19
|
+
//% block="pointer over"
|
|
13
20
|
PointerOver = 6863,
|
|
21
|
+
//% block="pointer out"
|
|
14
22
|
PointerOut = 6864,
|
|
23
|
+
//% block="wheel"
|
|
15
24
|
Wheel = 6865,
|
|
25
|
+
//% block="key down"
|
|
16
26
|
KeyDown = 6866,
|
|
27
|
+
//% block="key up"
|
|
17
28
|
KeyUp = 6867
|
|
18
29
|
}
|
|
19
30
|
|
|
20
31
|
export enum MouseButtonId {
|
|
32
|
+
//% block="left"
|
|
21
33
|
Left = 1,
|
|
34
|
+
//% block="right"
|
|
22
35
|
Right = 3,
|
|
36
|
+
//% block="wheel"
|
|
23
37
|
Wheel = 2,
|
|
38
|
+
//% block="back"
|
|
24
39
|
Back = 4,
|
|
40
|
+
//% block="forward"
|
|
25
41
|
Forward = 5
|
|
26
42
|
}
|
|
27
43
|
|
|
28
44
|
export enum MouseButtonEvent {
|
|
45
|
+
//% block="pressed"
|
|
29
46
|
Pressed = Event.PointerDown,
|
|
47
|
+
//% block="released"
|
|
30
48
|
Released = Event.PointerUp,
|
|
31
49
|
}
|
|
32
50
|
|
|
@@ -147,6 +165,14 @@ namespace browserEvents {
|
|
|
147
165
|
});
|
|
148
166
|
}
|
|
149
167
|
|
|
168
|
+
//% blockId=browserEvents_setCursorVisible
|
|
169
|
+
//% block="set cursor visible $visible"
|
|
170
|
+
//% group="Mouse"
|
|
171
|
+
//% weight=0
|
|
172
|
+
export function setCursorVisible(visible: boolean) {
|
|
173
|
+
_setCursorVisible(visible);
|
|
174
|
+
}
|
|
175
|
+
|
|
150
176
|
//% fixedInstance whenUsed block="left"
|
|
151
177
|
export const MouseLeft = new MouseButton(MouseButtonId.Left);
|
|
152
178
|
|
|
@@ -62,12 +62,22 @@ namespace browserEvents {
|
|
|
62
62
|
ArrowRight = 39,
|
|
63
63
|
PageDown = 34,
|
|
64
64
|
End = 35,
|
|
65
|
-
Home = 36
|
|
65
|
+
Home = 36,
|
|
66
|
+
LeftShift = 1016,
|
|
67
|
+
RightShift = 1017,
|
|
68
|
+
LeftControl = 1018,
|
|
69
|
+
RightControl = 1019,
|
|
70
|
+
Backspace = 8,
|
|
71
|
+
Delete = 46,
|
|
66
72
|
}
|
|
67
73
|
|
|
68
74
|
export enum KeyEvent {
|
|
75
|
+
//% block="pressed"
|
|
69
76
|
Pressed,
|
|
70
|
-
|
|
77
|
+
//% block="released"
|
|
78
|
+
Released,
|
|
79
|
+
//% block="repeat"
|
|
80
|
+
Repeat
|
|
71
81
|
}
|
|
72
82
|
|
|
73
83
|
export function keyToString(key: Key) {
|
|
@@ -198,44 +208,171 @@ namespace browserEvents {
|
|
|
198
208
|
return "-";
|
|
199
209
|
case Key.Equals:
|
|
200
210
|
return "=";
|
|
211
|
+
case Key.LeftShift:
|
|
212
|
+
return "LeftShift";
|
|
213
|
+
case Key.RightShift:
|
|
214
|
+
return "RightShift";
|
|
215
|
+
case Key.LeftControl:
|
|
216
|
+
return "LeftControl";
|
|
217
|
+
case Key.RightControl:
|
|
218
|
+
return "RightControl";
|
|
219
|
+
case Key.Backspace:
|
|
220
|
+
return "Backspace";
|
|
221
|
+
case Key.Delete:
|
|
222
|
+
return "Delete";
|
|
201
223
|
}
|
|
202
224
|
}
|
|
203
225
|
|
|
226
|
+
//% whenUsed
|
|
227
|
+
let _buttonsPendingInit: KeyButton[];
|
|
204
228
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
229
|
+
let defaultRepeatDelay = 500;
|
|
230
|
+
let defaultRepeatInterval = 30;
|
|
231
|
+
|
|
232
|
+
class KeySceneState {
|
|
208
233
|
protected pressHandler: () => void;
|
|
209
234
|
protected pressListeners: (() => void)[];
|
|
210
235
|
protected releaseHandler: () => void;
|
|
211
236
|
protected releaseListeners: (() => void)[];
|
|
237
|
+
protected repeatHandler: () => void;
|
|
238
|
+
protected repeatListeners: (() => void)[];
|
|
212
239
|
|
|
213
240
|
constructor(public id: number) {
|
|
214
|
-
control.onEvent(Event.KeyUp, this.id, () => this.setPressed(false), 16);
|
|
215
|
-
control.onEvent(Event.KeyDown, this.id, () => this.setPressed(true), 16);
|
|
216
|
-
|
|
217
|
-
this._pressed = false;
|
|
218
241
|
this.pressListeners = [];
|
|
219
242
|
this.releaseListeners = [];
|
|
243
|
+
this.repeatListeners = [];
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
onEvent(event: KeyEvent, handler: () => void) {
|
|
247
|
+
if (event === KeyEvent.Pressed) {
|
|
248
|
+
this.pressHandler = handler;
|
|
249
|
+
}
|
|
250
|
+
else if (event === KeyEvent.Released) {
|
|
251
|
+
this.releaseHandler = handler;
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
this.repeatHandler = handler;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
addEventListener(event: KeyEvent, handler: () => void) {
|
|
259
|
+
if (event === KeyEvent.Pressed) {
|
|
260
|
+
this.pressListeners.push(handler);
|
|
261
|
+
}
|
|
262
|
+
else if (event === KeyEvent.Released) {
|
|
263
|
+
this.releaseListeners.push(handler);
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
this.repeatListeners.push(handler);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
removeEventListener(event: KeyEvent, handler: () => void) {
|
|
271
|
+
if (event === KeyEvent.Pressed) {
|
|
272
|
+
this.pressListeners = this.pressListeners.filter(p => p !== handler);
|
|
273
|
+
}
|
|
274
|
+
else if (event === KeyEvent.Released) {
|
|
275
|
+
this.releaseListeners = this.releaseListeners.filter(p => p !== handler);;
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
this.repeatListeners = this.repeatListeners.filter(p => p !== handler);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
raiseButtonPressed() {
|
|
283
|
+
if (this.pressHandler) {
|
|
284
|
+
this.pressHandler();
|
|
285
|
+
}
|
|
286
|
+
for (const handler of this.pressListeners) {
|
|
287
|
+
handler();
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
raiseButtonReleased() {
|
|
292
|
+
if (this.releaseHandler) {
|
|
293
|
+
this.releaseHandler();
|
|
294
|
+
}
|
|
295
|
+
for (const handler of this.releaseListeners) {
|
|
296
|
+
handler();
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
raiseButtonRepeat() {
|
|
301
|
+
if (this.repeatHandler) {
|
|
302
|
+
this.repeatHandler();
|
|
303
|
+
}
|
|
304
|
+
for (const handler of this.repeatListeners) {
|
|
305
|
+
handler();
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
//% fixedInstances
|
|
311
|
+
export class KeyButton {
|
|
312
|
+
protected _pressed: boolean;
|
|
313
|
+
public repeatDelay: number;
|
|
314
|
+
public repeatInterval: number;
|
|
315
|
+
private _repeatCount: number;
|
|
316
|
+
private _pressedElapsed: number;
|
|
317
|
+
|
|
318
|
+
protected sceneStack: KeySceneState[];
|
|
319
|
+
|
|
320
|
+
protected get state(): KeySceneState {
|
|
321
|
+
return this.sceneStack[this.sceneStack.length - 1];
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
constructor(public id: number) {
|
|
325
|
+
// use internalOnEvent so that events fire regardless of the current scen
|
|
326
|
+
control.internalOnEvent(Event.KeyUp, this.id, () => this.setPressed(false), 16);
|
|
327
|
+
control.internalOnEvent(Event.KeyDown, this.id, () => this.setPressed(true), 16);
|
|
328
|
+
this._pressed = false;
|
|
329
|
+
|
|
330
|
+
// this code may run before game/scene.ts, in which case calling this.__registerUpdate
|
|
331
|
+
// will trigger an exception. to prevent that, start a thread that pauses until we
|
|
332
|
+
// detect that an event context has been registered and then call it
|
|
333
|
+
if (control.eventContext()) {
|
|
334
|
+
this.__registerUpdate();
|
|
335
|
+
}
|
|
336
|
+
else {
|
|
337
|
+
if (!_buttonsPendingInit) {
|
|
338
|
+
_buttonsPendingInit = [];
|
|
339
|
+
control.runInBackground(() => {
|
|
340
|
+
pauseUntil(() => !!control.eventContext());
|
|
341
|
+
for (const button of _buttonsPendingInit) {
|
|
342
|
+
button.__registerUpdate();
|
|
343
|
+
}
|
|
344
|
+
_buttonsPendingInit = undefined;
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
_buttonsPendingInit.push(this);
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
this.sceneStack = [new KeySceneState(id)];
|
|
351
|
+
|
|
352
|
+
game.addScenePushHandler(() => {
|
|
353
|
+
this.sceneStack.push(new KeySceneState(id));
|
|
354
|
+
this.__registerUpdate();
|
|
355
|
+
});
|
|
356
|
+
game.addScenePopHandler(() => {
|
|
357
|
+
this.sceneStack.pop();
|
|
358
|
+
if (this.sceneStack.length === 0) {
|
|
359
|
+
this.sceneStack = [new KeySceneState(id)];
|
|
360
|
+
this.__registerUpdate();
|
|
361
|
+
}
|
|
362
|
+
});
|
|
220
363
|
}
|
|
221
364
|
|
|
222
365
|
setPressed(pressed: boolean) {
|
|
366
|
+
if (this._pressed === pressed) return;
|
|
367
|
+
|
|
223
368
|
this._pressed = pressed;
|
|
224
369
|
if (pressed) {
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
for (const handler of this.pressListeners) {
|
|
229
|
-
handler();
|
|
230
|
-
}
|
|
370
|
+
this._repeatCount = 0;
|
|
371
|
+
this._pressedElapsed = 0;
|
|
372
|
+
this.state.raiseButtonPressed();
|
|
231
373
|
}
|
|
232
374
|
else {
|
|
233
|
-
|
|
234
|
-
this.releaseHandler();
|
|
235
|
-
}
|
|
236
|
-
for (const handler of this.releaseListeners) {
|
|
237
|
-
handler();
|
|
238
|
-
}
|
|
375
|
+
this.state.raiseButtonReleased();
|
|
239
376
|
}
|
|
240
377
|
}
|
|
241
378
|
|
|
@@ -244,12 +381,7 @@ namespace browserEvents {
|
|
|
244
381
|
//% group="Keyboard"
|
|
245
382
|
//% weight=100
|
|
246
383
|
onEvent(event: KeyEvent, handler: () => void) {
|
|
247
|
-
|
|
248
|
-
this.pressHandler = handler;
|
|
249
|
-
}
|
|
250
|
-
else {
|
|
251
|
-
this.releaseHandler = handler;
|
|
252
|
-
}
|
|
384
|
+
this.state.onEvent(event, handler);
|
|
253
385
|
}
|
|
254
386
|
|
|
255
387
|
//% blockId=browserEvents_key_isPressed
|
|
@@ -269,22 +401,34 @@ namespace browserEvents {
|
|
|
269
401
|
}
|
|
270
402
|
|
|
271
403
|
addEventListener(event: KeyEvent, handler: () => void) {
|
|
272
|
-
|
|
273
|
-
this.pressListeners.push(handler);
|
|
274
|
-
}
|
|
275
|
-
else {
|
|
276
|
-
this.releaseListeners.push(handler);
|
|
277
|
-
}
|
|
404
|
+
this.state.addEventListener(event, handler);
|
|
278
405
|
}
|
|
279
406
|
|
|
280
407
|
removeEventListener(event: KeyEvent, handler: () => void) {
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
408
|
+
this.state.removeEventListener(event, handler);
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
__update() {
|
|
412
|
+
const delay = this.repeatDelay === undefined ? defaultRepeatDelay : this.repeatDelay;
|
|
413
|
+
const interval = this.repeatInterval === undefined ? defaultRepeatInterval : this.repeatInterval;
|
|
414
|
+
if (!this._pressed) return;
|
|
415
|
+
this._pressedElapsed += game.eventContext().deltaTimeMillis;
|
|
416
|
+
|
|
417
|
+
// inital delay
|
|
418
|
+
if (this._pressedElapsed < delay)
|
|
419
|
+
return;
|
|
420
|
+
|
|
421
|
+
// repeat count for this step
|
|
422
|
+
const count = Math.floor((this._pressedElapsed - delay - interval) / interval);
|
|
423
|
+
if (count != this._repeatCount) {
|
|
424
|
+
this._repeatCount = count;
|
|
425
|
+
this.state.raiseButtonRepeat();
|
|
286
426
|
}
|
|
287
427
|
}
|
|
428
|
+
|
|
429
|
+
__registerUpdate() {
|
|
430
|
+
game.eventContext().registerFrameHandler(scene.CONTROLLER_PRIORITY, () => this.__update());
|
|
431
|
+
}
|
|
288
432
|
}
|
|
289
433
|
|
|
290
434
|
//% fixedInstance whenUsed
|
|
@@ -476,6 +620,35 @@ namespace browserEvents {
|
|
|
476
620
|
//% fixedInstance whenUsed
|
|
477
621
|
export const Home = new KeyButton(Key.Home);
|
|
478
622
|
|
|
623
|
+
//% fixedInstance whenUsed
|
|
624
|
+
export const LeftShift = new KeyButton(Key.LeftShift);
|
|
625
|
+
|
|
626
|
+
//% fixedInstance whenUsed
|
|
627
|
+
export const RightShift = new KeyButton(Key.RightShift);
|
|
628
|
+
|
|
629
|
+
//% fixedInstance whenUsed
|
|
630
|
+
export const LeftControl = new KeyButton(Key.LeftControl);
|
|
631
|
+
|
|
632
|
+
//% fixedInstance whenUsed
|
|
633
|
+
export const RightControl = new KeyButton(Key.RightControl);
|
|
634
|
+
|
|
635
|
+
//% fixedInstance whenUsed
|
|
636
|
+
export const Backspace = new KeyButton(Key.Backspace);
|
|
637
|
+
|
|
638
|
+
//% fixedInstance whenUsed
|
|
639
|
+
export const Delete = new KeyButton(Key.Delete);
|
|
640
|
+
|
|
479
641
|
//% fixedInstance whenUsed
|
|
480
642
|
export const Any = new KeyButton(0);
|
|
643
|
+
|
|
644
|
+
//% blockId=browser_events_setKeyboardRepeatDefault
|
|
645
|
+
//% block="set keyboard repeat delay $delay ms interval $interval ms"
|
|
646
|
+
//% delay.defl=500
|
|
647
|
+
//% interval.defl=30
|
|
648
|
+
//% group="Keyboard"
|
|
649
|
+
//% weight=0
|
|
650
|
+
export function setKeyboardRepeatDefault(delay: number, interval: number) {
|
|
651
|
+
defaultRepeatDelay = Math.max(delay, 0);
|
|
652
|
+
defaultRepeatInterval = Math.max(interval, 1);
|
|
653
|
+
}
|
|
481
654
|
}
|
|
@@ -9,6 +9,8 @@ declare namespace browserEvents {
|
|
|
9
9
|
function wheelDy(): number;
|
|
10
10
|
//% shim=browserEvents::wheelDz
|
|
11
11
|
function wheelDz(): number;
|
|
12
|
+
//% shim=browserEvents::_setCursorVisible
|
|
13
|
+
function _setCursorVisible(visible: boolean): void;
|
|
12
14
|
|
|
13
15
|
//% shim=browserEvents::currentTime
|
|
14
16
|
function currentTime(): number;
|
|
@@ -62,15 +62,44 @@ namespace pxsim.browserEvents {
|
|
|
62
62
|
ArrowRight = 39,
|
|
63
63
|
PageDown = 34,
|
|
64
64
|
End = 35,
|
|
65
|
-
Home = 36
|
|
65
|
+
Home = 36,
|
|
66
|
+
LeftShift = 1016,
|
|
67
|
+
RightShift = 1017,
|
|
68
|
+
LeftControl = 1018,
|
|
69
|
+
RightControl = 1019,
|
|
70
|
+
Backspace = 8,
|
|
71
|
+
Delete = 46,
|
|
66
72
|
}
|
|
67
73
|
|
|
68
74
|
export function onKeyboardEvent(event: KeyboardEvent, pressed: boolean) {
|
|
75
|
+
const eventValue = getValueForKey(event);
|
|
76
|
+
|
|
77
|
+
fireEvent(eventValue as Key, pressed);
|
|
78
|
+
|
|
79
|
+
if (eventValue === Key.Shift) {
|
|
80
|
+
if (event.location === event.DOM_KEY_LOCATION_LEFT) {
|
|
81
|
+
fireEvent(Key.LeftShift, pressed);
|
|
82
|
+
}
|
|
83
|
+
else if (event.location === event.DOM_KEY_LOCATION_RIGHT) {
|
|
84
|
+
fireEvent(Key.RightShift, pressed);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (eventValue === Key.Control) {
|
|
88
|
+
if (event.location === event.DOM_KEY_LOCATION_LEFT) {
|
|
89
|
+
fireEvent(Key.LeftControl, pressed);
|
|
90
|
+
}
|
|
91
|
+
else if (event.location === event.DOM_KEY_LOCATION_RIGHT) {
|
|
92
|
+
fireEvent(Key.RightControl, pressed);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function fireEvent(key: Key, pressed: boolean) {
|
|
69
98
|
if (pressed) {
|
|
70
|
-
board().bus.queue(6866,
|
|
99
|
+
board().bus.queue(6866, key);
|
|
71
100
|
}
|
|
72
101
|
else {
|
|
73
|
-
board().bus.queue(6867,
|
|
102
|
+
board().bus.queue(6867, key);
|
|
74
103
|
}
|
|
75
104
|
}
|
|
76
105
|
|
|
@@ -249,6 +278,10 @@ namespace pxsim.browserEvents {
|
|
|
249
278
|
return Key.End;
|
|
250
279
|
case "Home":
|
|
251
280
|
return Key.Home;
|
|
281
|
+
case "Delete":
|
|
282
|
+
return Key.Delete;
|
|
283
|
+
case "Backspace":
|
|
284
|
+
return Key.Backspace;
|
|
252
285
|
default:
|
|
253
286
|
return 0;
|
|
254
287
|
}
|