Compare commits

..

No commits in common. "15398be065a4522f812e581c9213ba06e1b252f4" and "1845451c09fc4b0b071d895c1fda9864eb340f3f" have entirely different histories.

3 changed files with 6 additions and 27 deletions

View File

@ -42,12 +42,10 @@
let toolBrush = new BrushTool() let toolBrush = new BrushTool()
let toolPicker = new PickerTool() let toolPicker = new PickerTool()
let currentTool: Tool = toolBrush let currentTool: Tool = toolBrush
let previousTool: Tool = null
let brushSize: number = 1 let brushSize: number = 1
let brushType: BrushType = 'circle' let brushType: BrushType = 'circle'
function swapTool(tool: Tool) { function swapTool(tool: Tool) {
previousTool = currentTool
currentTool = tool currentTool = tool
} }
@ -118,7 +116,6 @@
<Shortcuts group='editor2D'> <Shortcuts group='editor2D'>
<Shortcut global cmd='selection' keys={['s']} on:trigger={()=>swapTool(toolSelection)} /> <Shortcut global cmd='selection' keys={['s']} on:trigger={()=>swapTool(toolSelection)} />
<Shortcut global cmd='brush' keys={['b']} on:trigger={()=>swapTool(toolBrush)} /> <Shortcut global cmd='brush' keys={['b']} on:trigger={()=>swapTool(toolBrush)} />
<Shortcut global cmd='brushToPicker' keys={['alt']} on:trigger={()=>currentTool===toolBrush?swapTool(toolPicker):null} on:release={()=>previousTool===toolBrush&&currentTool===toolPicker?swapTool(toolBrush):null} />
<Shortcut global cmd='fill' keys={['f']} on:trigger={()=>swapTool(toolFill)} /> <Shortcut global cmd='fill' keys={['f']} on:trigger={()=>swapTool(toolFill)} />
<Shortcut global cmd='picker' keys={['i']} on:trigger={()=>swapTool(toolPicker)} /> <Shortcut global cmd='picker' keys={['i']} on:trigger={()=>swapTool(toolPicker)} />
<Shortcut global cmd='erase' keys={['e']} on:trigger={()=>swapTool(toolErase)} /> <Shortcut global cmd='erase' keys={['e']} on:trigger={()=>swapTool(toolErase)} />

View File

@ -11,10 +11,8 @@
export let global: boolean = false export let global: boolean = false
const { registerShortcut } = getContext(SHORTCUTS) as ShortcutsType const { registerShortcut } = getContext(SHORTCUTS) as ShortcutsType
registerShortcut({cmd, group, global, keys, trigger: () => { registerShortcut({cmd, group, global, keys, callback: () => {
dispatch('trigger', {}) dispatch('trigger', {})
}, release: () => {
dispatch('release', {})
}}) }})
</script> </script>

View File

@ -3,7 +3,7 @@
import { get, writable } from 'svelte/store' import { get, writable } from 'svelte/store'
export const SHORTCUTS = {} export const SHORTCUTS = {}
export type ShortcutsType = { export type ShortcutsType = {
registerShortcut: (opts: {cmd: string, group: string, global: boolean, keys: string[], trigger: () => void, release: () => void}) => void, registerShortcut: (opts: {cmd: string, group: string, global: boolean, keys: string[], callback: () => void}) => void,
} }
let currentShortcuts = writable({id: {}, group: 'default'}) let currentShortcuts = writable({id: {}, group: 'default'})
@ -13,12 +13,10 @@
cmd: string, cmd: string,
keys: string[], keys: string[],
global: boolean, global: boolean,
trigger: () => void, callback: () => void,
release: () => void,
group: string, group: string,
} }
let triggered: Set<string> = new Set()
let keys: Set<string> = new Set() let keys: Set<string> = new Set()
let keystring = '' let keystring = ''
@ -48,25 +46,11 @@
if (shortcut.group !== cur.group) continue if (shortcut.group !== cur.group) continue
if (!shortcut.global && shortcut.id !== cur.id) continue if (!shortcut.global && shortcut.id !== cur.id) continue
if (shortcut.keys.includes(keystring)) { if (shortcut.keys.includes(keystring)) {
triggered.add(keystring) shortcut.callback()
shortcut.trigger()
} }
} }
}) })
window.addEventListener('keyup', (event: KeyboardEvent) => { window.addEventListener('keyup', (event: KeyboardEvent) => {
keystring = keysToString([...keys])
if (triggered.has(keystring)) {
triggered.delete(keystring)
for (let shortcut of get(shortcuts)) {
if (shortcut.group !== get(currentShortcuts).group) continue
if (!shortcut.global && shortcut.id !== get(currentShortcuts).id) continue
if (shortcut.keys.includes(keystring)) {
shortcut.release()
}
}
}
let key = normalizeKey(event) let key = normalizeKey(event)
keys.delete(key.toLowerCase()) keys.delete(key.toLowerCase())
keystring = keysToString([...keys]) keystring = keysToString([...keys])
@ -103,12 +87,12 @@
})(id, group, active) })(id, group, active)
setContext(SHORTCUTS, { setContext(SHORTCUTS, {
registerShortcut: (opts: {cmd: string, keys: string[], global: boolean, trigger: () => void, release: () => void}) => { registerShortcut: (opts: {cmd: string, keys: string[], global: boolean, callback: () => void}) => {
shortcuts.update(shortcuts => { shortcuts.update(shortcuts => {
let keys = opts.keys.map(v => { let keys = opts.keys.map(v => {
return v.replaceAll('ctrl', 'control') return v.replaceAll('ctrl', 'control')
}) })
shortcuts.push({id, cmd: opts.cmd, group: group, global: opts.global, keys: keys.map(v=>keysToString(v.toLowerCase().split('+'))), trigger: opts.trigger, release: opts.release}) shortcuts.push({id, cmd: opts.cmd, group: group, global: opts.global, keys: keys.map(v=>keysToString(v.toLowerCase().split('+'))), callback: opts.callback})
return shortcuts return shortcuts
}) })