Преглед на файлове

Add a Shortcut for Toggling Shape Lock (#1005)

* Update shortcuts.md for Lock

* Add 'Q' as a shortcut for toggling shape lock

* Add shortcut to LockIcon title

* use event.key instead

Co-authored-by: Faustino Kialungila <Faustino.kialungila@gmail.com>
vanilla_orig
Sanghyeon Lee преди 5 години
родител
ревизия
cb66adc716
No account linked to committer's email address
променени са 4 файла, в които са добавени 21 реда и са изтрити 12 реда
  1. 1
    1
      docs/shortcuts.md
  2. 15
    2
      src/components/App.tsx
  3. 3
    8
      src/components/LayerUI.tsx
  4. 2
    1
      src/components/LockIcon.tsx

+ 1
- 1
docs/shortcuts.md Целия файл

@@ -18,7 +18,7 @@
18 18
 | Arrow     | `A` or `5` | `A` or `5` |
19 19
 | Line      | `L` or `6` | `L` or `6` |
20 20
 | Text      | `T` or `7` | `T` or `7` |
21
-| Lock      |            |            |
21
+| Lock      |    `Q`     |    `Q`     |
22 22
 
23 23
 ### Editor
24 24
 

+ 15
- 2
src/components/App.tsx Целия файл

@@ -640,13 +640,16 @@ export class App extends React.Component<any, AppState> {
640 640
       );
641 641
       event.preventDefault();
642 642
     } else if (
643
-      shapesShortcutKeys.includes(event.key.toLowerCase()) &&
644 643
       !event.ctrlKey &&
645 644
       !event.altKey &&
646 645
       !event.metaKey &&
647 646
       this.state.draggingElement === null
648 647
     ) {
649
-      this.selectShapeTool(shape);
648
+      if (shapesShortcutKeys.includes(event.key.toLowerCase())) {
649
+        this.selectShapeTool(shape);
650
+      } else if (event.key === "q") {
651
+        this.toggleLock();
652
+      }
650 653
     } else if (event.key === KEYS.SPACE && gesture.pointers.size === 0) {
651 654
       isHoldingSpace = true;
652 655
       document.documentElement.style.cursor = CURSOR_TYPE.GRABBING;
@@ -791,6 +794,15 @@ export class App extends React.Component<any, AppState> {
791 794
     this.destroySocketClient();
792 795
   };
793 796
 
797
+  toggleLock = () => {
798
+    this.setState(prevState => ({
799
+      elementLocked: !prevState.elementLocked,
800
+      elementType: prevState.elementLocked
801
+        ? "selection"
802
+        : prevState.elementType,
803
+    }));
804
+  };
805
+
794 806
   private setElements = (elements: readonly ExcalidrawElement[]) => {
795 807
     globalSceneState.replaceAllElements(elements);
796 808
   };
@@ -816,6 +828,7 @@ export class App extends React.Component<any, AppState> {
816 828
           language={getLanguage()}
817 829
           onRoomCreate={this.createRoom}
818 830
           onRoomDestroy={this.destroyRoom}
831
+          onToggleLock={this.toggleLock}
819 832
         />
820 833
         <main>
821 834
           <canvas

+ 3
- 8
src/components/LayerUI.tsx Целия файл

@@ -33,6 +33,7 @@ interface LayerUIProps {
33 33
   setElements: (elements: readonly ExcalidrawElement[]) => void;
34 34
   onRoomCreate: () => void;
35 35
   onRoomDestroy: () => void;
36
+  onToggleLock: () => void;
36 37
 }
37 38
 
38 39
 export const LayerUI = React.memo(
@@ -46,6 +47,7 @@ export const LayerUI = React.memo(
46 47
     setElements,
47 48
     onRoomCreate,
48 49
     onRoomDestroy,
50
+    onToggleLock,
49 51
   }: LayerUIProps) => {
50 52
     const isMobile = useIsMobile();
51 53
 
@@ -157,14 +159,7 @@ export const LayerUI = React.memo(
157 159
                     </Island>
158 160
                     <LockIcon
159 161
                       checked={appState.elementLocked}
160
-                      onChange={() => {
161
-                        setAppState({
162
-                          elementLocked: !appState.elementLocked,
163
-                          elementType: appState.elementLocked
164
-                            ? "selection"
165
-                            : appState.elementType,
166
-                        });
167
-                      }}
162
+                      onChange={onToggleLock}
168 163
                       title={t("toolBar.lock")}
169 164
                       isButton={isMobile}
170 165
                     />

+ 2
- 1
src/components/LockIcon.tsx Целия файл

@@ -1,6 +1,7 @@
1 1
 import "./ToolIcon.scss";
2 2
 
3 3
 import React from "react";
4
+import { getShortcutKey } from "../utils";
4 5
 
5 6
 type LockIconSize = "s" | "m";
6 7
 
@@ -48,7 +49,7 @@ export function LockIcon(props: LockIconProps) {
48 49
       className={`ToolIcon ToolIcon__lock ${
49 50
         props.isButton ? "ToolIcon_type_button" : "ToolIcon_type_floating"
50 51
       } ${sizeCn}`}
51
-      title={props.title}
52
+      title={`${props.title} ${getShortcutKey("Q")}`}
52 53
     >
53 54
       <input
54 55
         className="ToolIcon_type_checkbox"

Loading…
Отказ
Запис