mirror of
https://github.com/penpot/penpot.git
synced 2026-05-13 20:13:58 +00:00
260 lines
10 KiB
Clojure
260 lines
10 KiB
Clojure
;; This Source Code Form is subject to the terms of the Mozilla Public
|
|
;; License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
;;
|
|
;; Copyright (c) UXBOX Labs SL
|
|
|
|
(ns app.main.data.workspace.shortcuts
|
|
(:require
|
|
[app.main.data.shortcuts :as ds]
|
|
[app.main.data.workspace :as dw]
|
|
[app.main.data.workspace.colors :as mdc]
|
|
[app.main.data.workspace.common :as dwc]
|
|
[app.main.data.workspace.undo :as dwu]
|
|
[app.main.data.workspace.drawing :as dwd]
|
|
[app.main.data.workspace.libraries :as dwl]
|
|
[app.main.data.workspace.texts :as dwtxt]
|
|
[app.main.data.workspace.transforms :as dwt]
|
|
[app.main.store :as st]
|
|
[app.util.dom :as dom]
|
|
[potok.core :as ptk]))
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;; Shortcuts
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
;; Shortcuts format https://github.com/ccampbell/mousetrap
|
|
|
|
(def shortcuts
|
|
{:toggle-layers {:tooltip (ds/alt "L")
|
|
:command (ds/a-mod "l")
|
|
:fn #(st/emit! (dw/go-to-layout :layers))}
|
|
|
|
:toggle-assets {:tooltip (ds/alt "I")
|
|
:command (ds/a-mod "i")
|
|
:fn #(st/emit! (dw/go-to-layout :assets))}
|
|
|
|
:toggle-history {:tooltip (ds/alt "H")
|
|
:command (ds/a-mod "h")
|
|
:fn #(st/emit! (dw/go-to-layout :document-history))}
|
|
|
|
:toggle-palette {:tooltip (ds/alt "P")
|
|
:command (ds/a-mod "p")
|
|
:fn #(st/emit! (dw/toggle-layout-flags :colorpalette))}
|
|
|
|
:toggle-rules {:tooltip (ds/meta-shift "R")
|
|
:command (ds/c-mod "shift+r")
|
|
:fn #(st/emit! (dw/toggle-layout-flags :rules))}
|
|
|
|
:select-all {:tooltip (ds/meta "A")
|
|
:command (ds/c-mod "a")
|
|
:fn #(st/emit! (dw/select-all))}
|
|
|
|
:toggle-grid {:tooltip (ds/meta "'")
|
|
:command (ds/c-mod "'")
|
|
:fn #(st/emit! (dw/toggle-layout-flags :display-grid))}
|
|
|
|
:toggle-snap-grid {:tooltip (ds/meta-shift "'")
|
|
:command (ds/c-mod "shift+'")
|
|
:fn #(st/emit! (dw/toggle-layout-flags :snap-grid))}
|
|
|
|
:toggle-alignment {:tooltip (ds/meta "\\")
|
|
:command (ds/c-mod "\\")
|
|
:fn #(st/emit! (dw/toggle-layout-flags :dynamic-alignment))}
|
|
|
|
:increase-zoom {:tooltip "+"
|
|
:command "+"
|
|
:fn #(st/emit! (dw/increase-zoom nil))}
|
|
|
|
:decrease-zoom {:tooltip "-"
|
|
:command "-"
|
|
:fn #(st/emit! (dw/decrease-zoom nil))}
|
|
|
|
:group {:tooltip (ds/meta "G")
|
|
:command (ds/c-mod "g")
|
|
:fn #(st/emit! dw/group-selected)}
|
|
|
|
:ungroup {:tooltip (ds/shift "G")
|
|
:command "shift+g"
|
|
:fn #(st/emit! dw/ungroup-selected)}
|
|
|
|
:mask {:tooltip (ds/meta "M")
|
|
:command (ds/c-mod "m")
|
|
:fn #(st/emit! dw/mask-group)}
|
|
|
|
:unmask {:tooltip (ds/meta-shift "M")
|
|
:command (ds/c-mod "shift+m")
|
|
:fn #(st/emit! dw/unmask-group)}
|
|
|
|
:create-component {:tooltip (ds/meta "K")
|
|
:command (ds/c-mod "k")
|
|
:fn #(st/emit! dwl/add-component)}
|
|
|
|
:flip-vertical {:tooltip (ds/shift "V")
|
|
:command "shift+v"
|
|
:fn #(st/emit! (dw/flip-vertical-selected))}
|
|
|
|
:flip-horizontal {:tooltip (ds/shift "H")
|
|
:command "shift+h"
|
|
:fn #(st/emit! (dw/flip-horizontal-selected))}
|
|
|
|
:reset-zoom {:tooltip (ds/shift "0")
|
|
:command "shift+0"
|
|
:fn #(st/emit! dw/reset-zoom)}
|
|
|
|
:fit-all {:tooltip (ds/shift "1")
|
|
:command "shift+1"
|
|
:fn #(st/emit! dw/zoom-to-fit-all)}
|
|
|
|
:zoom-selected {:tooltip (ds/shift "2")
|
|
:command "shift+2"
|
|
:fn #(st/emit! dw/zoom-to-selected-shape)}
|
|
|
|
:duplicate {:tooltip (ds/meta "D")
|
|
:command (ds/c-mod "d")
|
|
:fn #(st/emit! dw/duplicate-selected)}
|
|
|
|
:undo {:tooltip (ds/meta "Z")
|
|
:command (ds/c-mod "z")
|
|
:fn #(st/emit! dwc/undo)}
|
|
|
|
:redo {:tooltip (ds/meta "Y")
|
|
:command [(ds/c-mod "shift+z") (ds/c-mod "y")]
|
|
:fn #(st/emit! dwc/redo)}
|
|
|
|
:clear-undo {:tooltip (ds/meta "Q")
|
|
:command (ds/c-mod "q")
|
|
:fn #(st/emit! dwu/reinitialize-undo)}
|
|
|
|
:draw-frame {:tooltip "A"
|
|
:command "a"
|
|
:fn #(st/emit! (dwd/select-for-drawing :frame))}
|
|
|
|
:draw-rect {:tooltip "R"
|
|
:command "r"
|
|
:fn #(st/emit! (dwd/select-for-drawing :rect))}
|
|
|
|
:draw-ellipse {:tooltip "E"
|
|
:command "e"
|
|
:fn #(st/emit! (dwd/select-for-drawing :circle))}
|
|
|
|
:draw-text {:tooltip "T"
|
|
:command "t"
|
|
:fn #(st/emit! dwtxt/start-edit-if-selected
|
|
(dwd/select-for-drawing :text))}
|
|
|
|
:draw-path {:tooltip "P"
|
|
:command "p"
|
|
:fn #(st/emit! (dwd/select-for-drawing :path))}
|
|
|
|
:draw-curve {:tooltip (ds/shift "C")
|
|
:command "shift+c"
|
|
:fn #(st/emit! (dwd/select-for-drawing :curve))}
|
|
|
|
:add-comment {:tooltip "C"
|
|
:command "c"
|
|
:fn #(st/emit! (dwd/select-for-drawing :comments))}
|
|
|
|
:insert-image {:tooltip "K"
|
|
:command "k"
|
|
:fn #(-> "image-upload" dom/get-element dom/click)}
|
|
|
|
:copy {:tooltip (ds/meta "C")
|
|
:command (ds/c-mod "c")
|
|
:fn #(st/emit! (dw/copy-selected))}
|
|
|
|
:cut {:tooltip (ds/meta "X")
|
|
:command (ds/c-mod "x")
|
|
:fn #(st/emit! (dw/copy-selected) dw/delete-selected)}
|
|
|
|
:paste {:tooltip (ds/meta "V")
|
|
:disabled true
|
|
:command (ds/c-mod "v")}
|
|
|
|
:delete {:tooltip (ds/supr)
|
|
:command ["del" "backspace"]
|
|
:fn #(st/emit! dw/delete-selected)}
|
|
|
|
:bring-forward {:tooltip (ds/meta ds/up-arrow)
|
|
:command (ds/c-mod "up")
|
|
:fn #(st/emit! (dw/vertical-order-selected :up))}
|
|
|
|
:bring-backward {:tooltip (ds/meta ds/down-arrow)
|
|
:command (ds/c-mod "down")
|
|
:fn #(st/emit! (dw/vertical-order-selected :down))}
|
|
|
|
:bring-front {:tooltip (ds/meta-shift ds/up-arrow)
|
|
:command (ds/c-mod "shift+up")
|
|
:fn #(st/emit! (dw/vertical-order-selected :top))}
|
|
|
|
:bring-back {:tooltip (ds/meta-shift ds/down-arrow)
|
|
:command (ds/c-mod "shift+down")
|
|
:fn #(st/emit! (dw/vertical-order-selected :bottom))}
|
|
|
|
:move-fast-up {:tooltip (ds/shift ds/up-arrow)
|
|
:command "shift+up"
|
|
:fn #(st/emit! (dwt/move-selected :up true))}
|
|
|
|
:move-fast-down {:tooltip (ds/shift ds/down-arrow)
|
|
:command "shift+down"
|
|
:fn #(st/emit! (dwt/move-selected :down true))}
|
|
|
|
:move-fast-right {:tooltip (ds/shift ds/right-arrow)
|
|
:command "shift+right"
|
|
:fn #(st/emit! (dwt/move-selected :right true))}
|
|
|
|
:move-fast-left {:tooltip (ds/shift ds/left-arrow)
|
|
:command "shift+left"
|
|
:fn #(st/emit! (dwt/move-selected :left true))}
|
|
|
|
:move-unit-up {:tooltip ds/up-arrow
|
|
:command "up"
|
|
:fn #(st/emit! (dwt/move-selected :up false))}
|
|
|
|
:move-unit-down {:tooltip ds/down-arrow
|
|
:command "down"
|
|
:fn #(st/emit! (dwt/move-selected :down false))}
|
|
|
|
:move-unit-left {:tooltip ds/right-arrow
|
|
:command "right"
|
|
:fn #(st/emit! (dwt/move-selected :right false))}
|
|
|
|
:move-unit-right {:tooltip ds/left-arrow
|
|
:command "left"
|
|
:fn #(st/emit! (dwt/move-selected :left false))}
|
|
|
|
:open-color-picker {:tooltip "I"
|
|
:command "i"
|
|
:fn #(st/emit! (mdc/picker-for-selected-shape ))}
|
|
|
|
:open-viewer {:tooltip "G V"
|
|
:command "g v"
|
|
:fn #(st/emit! (dw/go-to-viewer))}
|
|
|
|
:open-dashboard {:tooltip "G D"
|
|
:command "g d"
|
|
:fn #(st/emit! (dw/go-to-dashboard))}
|
|
|
|
:escape {:tooltip (ds/esc)
|
|
:command "escape"
|
|
:fn #(st/emit! :interrupt (dw/deselect-all true))}
|
|
|
|
:start-editing {:tooltip (ds/enter)
|
|
:command "enter"
|
|
:fn #(st/emit! (dw/start-editing-selected))}
|
|
|
|
:start-measure {:tooltip (ds/alt "")
|
|
:command ["alt" "."]
|
|
:type "keydown"
|
|
:fn #(st/emit! (dw/toggle-distances-display true))}
|
|
|
|
:stop-measure {:tooltip (ds/alt "")
|
|
:command ["alt" "."]
|
|
:type "keyup"
|
|
:fn #(st/emit! (dw/toggle-distances-display false))}
|
|
})
|
|
|
|
(defn get-tooltip [shortcut]
|
|
(assert (contains? shortcuts shortcut) (str shortcut))
|
|
(get-in shortcuts [shortcut :tooltip]))
|