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