Add global shortcuts logic
parent
b055fac886
commit
42fe902da4
|
@ -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'>
|
||||
|
|
|
@ -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', {})
|
||||
}})
|
||||
|
||||
|
|
|
@ -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
|
||||
})
|
||||
|
||||
|
|
Loading…
Reference in New Issue