Add global shortcuts logic

main
kts of kettek 2024-02-15 14:55:15 -08:00
parent b055fac886
commit 42fe902da4
3 changed files with 13 additions and 5 deletions

View File

@ -109,6 +109,12 @@
<Button isSelected={currentTool === toolBrush} kind="ghost" size="small" icon={PaintBrushAlt} iconDescription="paint" tooltipPosition="right" on:click={()=>swapTool(toolBrush)}></Button>
<Button isSelected={currentTool === toolPicker} kind="ghost" size="small" icon={Eyedropper} iconDescription="pick" tooltipPosition="right" on:click={()=>swapTool(toolPicker)}></Button>
<Button isSelected={currentTool === toolErase} kind="ghost" size="small" icon={Erase} iconDescription="erase" tooltipPosition="right" on:click={()=>swapTool(toolErase)}></Button>
<Shortcuts group='editor2D'>
<Shortcut global cmd='brush' keys={['b']} on:trigger={()=>swapTool(toolBrush)} />
<Shortcut global cmd='fill' keys={['f']} on:trigger={()=>swapTool(toolFill)} />
<Shortcut global cmd='picker' keys={['i']} on:trigger={()=>swapTool(toolPicker)} />
<Shortcut global cmd='erase' keys={['e']} on:trigger={()=>swapTool(toolErase)} />
</Shortcuts>
</menu>
<section class='middle'>
<menu class='toolsettings'>

View File

@ -8,9 +8,10 @@
export let group: string = 'default'
export let cmd: string
export let keys: string[]
export let global: boolean = false
const { registerShortcut } = getContext(SHORTCUTS) as ShortcutsType
registerShortcut({cmd, group, keys, callback: () => {
registerShortcut({cmd, group, global, keys, callback: () => {
dispatch('trigger', {})
}})

View File

@ -3,7 +3,7 @@
import { get, writable } from 'svelte/store'
export const SHORTCUTS = {}
export type ShortcutsType = {
registerShortcut: (opts: {cmd: string, group: string, keys: string[], callback: () => void}) => void,
registerShortcut: (opts: {cmd: string, group: string, global: boolean, keys: string[], callback: () => void}) => void,
}
let currentShortcuts = writable({id: {}, group: 'default'})
@ -12,6 +12,7 @@
id: {},
cmd: string,
keys: string[],
global: boolean,
callback: () => void,
group: string,
}
@ -43,7 +44,7 @@
let cur = get(currentShortcuts)
for (let shortcut of get(shortcuts)) {
if (shortcut.group !== cur.group) continue
if (shortcut.id !== cur.id) continue
if (!shortcut.global && shortcut.id !== cur.id) continue
if (shortcut.keys.includes(keystring)) {
shortcut.callback()
}
@ -86,12 +87,12 @@
})(id, group, active)
setContext(SHORTCUTS, {
registerShortcut: (opts: {cmd: string, keys: string[], callback: () => void}) => {
registerShortcut: (opts: {cmd: string, keys: string[], global: boolean, callback: () => void}) => {
shortcuts.update(shortcuts => {
let keys = opts.keys.map(v => {
return v.replaceAll('ctrl', 'control')
})
shortcuts.push({id, cmd: opts.cmd, group: group, keys: keys.map(v=>keysToString(v.split('+'))), callback: opts.callback})
shortcuts.push({id, cmd: opts.cmd, group: group, global: opts.global, keys: keys.map(v=>keysToString(v.split('+'))), callback: opts.callback})
return shortcuts
})