Cmen
3 years ago
11 changed files with 78 additions and 4 deletions
@ -0,0 +1,8 @@ |
|||||||
|
import { Dispatch } from "react"; |
||||||
|
import { editorAction, IEditorState } from "@store"; |
||||||
|
import { MapEditor } from "@map"; |
||||||
|
|
||||||
|
// 注册地图的事件钩子
|
||||||
|
export function registerMapEventHooks(map: MapEditor, dispatch: Dispatch<any>) { |
||||||
|
//
|
||||||
|
} |
@ -0,0 +1,3 @@ |
|||||||
|
export enum EventTypes { |
||||||
|
FinishCreateOverlay = "finishCreateOverlay", |
||||||
|
} |
@ -0,0 +1,34 @@ |
|||||||
|
export type HotkeyConfig = { |
||||||
|
ctrl?: boolean; |
||||||
|
alt?: boolean; |
||||||
|
shift?: boolean; |
||||||
|
callback: () => void; |
||||||
|
}; |
||||||
|
|
||||||
|
const Hotkeys: Record<string, HotkeyConfig[]> = {}; |
||||||
|
|
||||||
|
export const registerHotkey = (key: string, config: HotkeyConfig) => { |
||||||
|
Hotkeys[key] = Hotkeys[key] || []; |
||||||
|
Hotkeys[key].push(config); |
||||||
|
}; |
||||||
|
|
||||||
|
window.onkeydown = function (e) { |
||||||
|
const { key } = e; |
||||||
|
const listeners = Hotkeys[key]; |
||||||
|
|
||||||
|
if (listeners == null || listeners.length === 0) return; |
||||||
|
e.stopPropagation(); |
||||||
|
e.preventDefault(); |
||||||
|
|
||||||
|
// 异或操作.
|
||||||
|
const xor = (a: boolean, b: boolean) => a !== b; |
||||||
|
|
||||||
|
listeners.forEach((config) => { |
||||||
|
const { callback, shift = false, ctrl = false, alt = false } = config; |
||||||
|
if (xor(ctrl, e.ctrlKey)) return; |
||||||
|
if (xor(shift, e.shiftKey)) return; |
||||||
|
if (xor(alt, e.altKey)) return; |
||||||
|
|
||||||
|
callback(); |
||||||
|
}); |
||||||
|
}; |
Loading…
Reference in new issue