From 150a0759aa9801a79cbf59b3c63a6b0f5b201b5b Mon Sep 17 00:00:00 2001 From: chenshenhai Date: Sat, 11 Sep 2021 16:20:21 +0800 Subject: [PATCH] feat: add keyboard event for undo --- packages/idraw/src/index.ts | 5 +++-- packages/idraw/src/lib/keyboard-watcher.ts | 3 +++ packages/idraw/src/mixins/keyboard.ts | 4 ++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/idraw/src/index.ts b/packages/idraw/src/index.ts index 81a45c7..9e5fc2a 100644 --- a/packages/idraw/src/index.ts +++ b/packages/idraw/src/index.ts @@ -11,7 +11,7 @@ import { import { redo, undo } from './mixins/record'; import { exportDataURL } from './mixins/file'; import { copyElements, pasteElements, cutElements, deleteElements, - keyArrowUp, keyArrowDown, keyArrowLeft, keyArrowRight, + keyArrowUp, keyArrowDown, keyArrowLeft, keyArrowRight, keyUndo, } from './mixins/keyboard'; class iDraw extends Core { @@ -68,7 +68,8 @@ class iDraw extends Core { .on('keyboardArrowUp', () => keyArrowUp(this)) .on('keyboardArrowDown', () => keyArrowDown(this)) .on('keyboardArrowLeft', () => keyArrowLeft(this)) - .on('keyboardArrowRight', () => keyArrowRight(this)); + .on('keyboardArrowRight', () => keyArrowRight(this)) + .on('keyboardUndo', () => keyUndo(this)); } this[_hasInited] = true; } diff --git a/packages/idraw/src/lib/keyboard-watcher.ts b/packages/idraw/src/lib/keyboard-watcher.ts index 8db83fd..2ea8c84 100644 --- a/packages/idraw/src/lib/keyboard-watcher.ts +++ b/packages/idraw/src/lib/keyboard-watcher.ts @@ -9,6 +9,7 @@ export type TypeKeyboardEventArgMap = { 'keyboardArrowLeft': void; 'keyboardArrowUp': void; 'keyboardArrowDown': void; + 'keyboardUndo': void; } export interface TypeKeyboardEvent { @@ -35,6 +36,8 @@ export class KeyboardWatcher implements TypeKeyboardEvent { this.trigger('keyboardPaste', undefined); } else if ((e.metaKey === true || e.ctrlKey === true) && e.key === 'x') { this.trigger('keyboardCut', undefined); + } else if ((e.metaKey === true || e.ctrlKey === true) && e.key === 'z') { + this.trigger('keyboardUndo', undefined); } else if (e.key === 'Backspace') { this.trigger('keyboardDelete', undefined); } else if (e.key === 'ArrowUp') { diff --git a/packages/idraw/src/mixins/keyboard.ts b/packages/idraw/src/mixins/keyboard.ts index 0772a63..725082b 100644 --- a/packages/idraw/src/mixins/keyboard.ts +++ b/packages/idraw/src/mixins/keyboard.ts @@ -99,4 +99,8 @@ export function keyArrowRight(idraw: iDraw) { const { scrollLeft } = idraw.getScreenTransform(); idraw.scrollLeft(scrollLeft + keyArrowMoveDistance); } +} + +export function keyUndo(idraw: iDraw) { + idraw.undo(); } \ No newline at end of file