Skip to content

Commit ae14223

Browse files
committed
✨ 增加了进入编辑状态的按键配置项
1 parent 7f75b41 commit ae14223

File tree

8 files changed

+86
-24
lines changed

8 files changed

+86
-24
lines changed

app/src/core/render/domElement/inputElement.tsx

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { getMultiLineTextSize } from "../../../utils/font";
2+
import { getEnterKey } from "../../../utils/keyboardFunctions";
23
import { Vector } from "../../dataStruct/Vector";
34
import { EntityDashTipEffect } from "../../service/feedbackService/effectEngine/concrete/EntityDashTipEffect";
45
import { EntityShakeEffect } from "../../service/feedbackService/effectEngine/concrete/EntityShakeEffect";
@@ -271,23 +272,7 @@ export namespace InputElement {
271272
for (const textNode of textNodes) {
272273
Stage.effectMachine.addEffect(EntityShakeEffect.fromEntity(textNode));
273274
}
274-
Stage.effectMachine.addEffect(TextRiseEffect.default("您可能记错了快捷键"));
275-
}
276-
277-
function getEnterKey(event: KeyboardEvent): "enter" | "ctrlEnter" | "shiftEnter" | "altEnter" | "other" {
278-
if (event.key === "Enter") {
279-
if (event.ctrlKey) {
280-
return "ctrlEnter";
281-
} else if (event.altKey) {
282-
return "altEnter";
283-
} else if (event.shiftKey) {
284-
return "shiftEnter";
285-
} else {
286-
return "enter";
287-
}
288-
} else {
289-
return "other";
290-
}
275+
Stage.effectMachine.addEffect(TextRiseEffect.default("您可能记错了退出或换行的控制设置"));
291276
}
292277

293278
let textNodeContentLineBreak: Settings.Settings["textNodeContentLineBreak"] = "enter";

app/src/core/service/Settings.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ export namespace Settings {
6262
mouseRightDragBackground: "cut" | "moveCamera";
6363
textNodeContentLineBreak: "enter" | "ctrlEnter" | "altEnter" | "shiftEnter";
6464
textNodeExitEditMode: "enter" | "ctrlEnter" | "altEnter" | "shiftEnter";
65+
textNodeStartEditMode: "enter" | "ctrlEnter" | "altEnter" | "shiftEnter";
6566
// 音效相关
6667
soundEnabled: boolean;
6768
cuttingLineStartSoundFile: string;
@@ -124,6 +125,7 @@ export namespace Settings {
124125
mouseRightDragBackground: "cut",
125126
textNodeContentLineBreak: "enter",
126127
textNodeExitEditMode: "ctrlEnter",
128+
textNodeStartEditMode: "enter",
127129
// 音效相关
128130
soundEnabled: true,
129131
cuttingLineStartSoundFile: "",

app/src/core/service/controlService/keyboardOnlyEngine/keyboardOnlyEngine.tsx

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
import { Dialog } from "../../../../components/dialog";
2+
import { getEnterKey } from "../../../../utils/keyboardFunctions";
23
import { Vector } from "../../../dataStruct/Vector";
34
import { EdgeRenderer } from "../../../render/canvas2d/entityRenderer/edge/EdgeRenderer";
45
import { Camera } from "../../../stage/Camera";
56
import { Stage } from "../../../stage/Stage";
67
import { StageManager } from "../../../stage/stageManager/StageManager";
78
import { ConnectableEntity } from "../../../stage/stageObject/abstract/ConnectableEntity";
9+
import { EntityDashTipEffect } from "../../feedbackService/effectEngine/concrete/EntityDashTipEffect";
10+
import { EntityShakeEffect } from "../../feedbackService/effectEngine/concrete/EntityShakeEffect";
11+
import { TextRiseEffect } from "../../feedbackService/effectEngine/concrete/TextRiseEffect";
12+
import { Settings } from "../../Settings";
813
import { editTextNode } from "../controller/concrete/utilsControl";
914
import { KeyboardOnlyDirectionController } from "./keyboardOnlyDirectionController";
1015
import { NewTargetLocationSelector } from "./newTargetLocationSelector";
@@ -23,9 +28,14 @@ export namespace KeyboardOnlyEngine {
2328
return targetLocationController.location;
2429
}
2530

31+
let textNodeStartEditMode: Settings.Settings["textNodeStartEditMode"] = "enter";
32+
2633
export function init() {
2734
bindKeyEvents();
2835
targetLocationController.init();
36+
Settings.watch("textNodeStartEditMode", (value) => {
37+
textNodeStartEditMode = value;
38+
});
2939
}
3040

3141
export function logicTick() {
@@ -43,12 +53,19 @@ export namespace KeyboardOnlyEngine {
4353
// createStart();
4454
// }
4555
} else if (event.key === "Enter") {
46-
// 这个还必须在down的位置上,因为在up上会导致无限触发
47-
const selectedNode = StageManager.getTextNodes().find((node) => node.isSelected);
48-
if (!selectedNode) return;
49-
event.preventDefault(); // 这个prevent必须开启,否则会立刻在刚创建的输入框里输入一个换行符。
50-
// 编辑节点
51-
editTextNode(selectedNode, false);
56+
const enterKeyDetail = getEnterKey(event);
57+
if (textNodeStartEditMode === enterKeyDetail) {
58+
// 这个还必须在down的位置上,因为在up上会导致无限触发
59+
const selectedNode = StageManager.getTextNodes().find((node) => node.isSelected);
60+
if (!selectedNode) return;
61+
event.preventDefault(); // 这个prevent必须开启,否则会立刻在刚创建的输入框里输入一个换行符。
62+
addSuccessEffect();
63+
// 编辑节点
64+
editTextNode(selectedNode, false);
65+
} else {
66+
// 用户可能记错了快捷键
67+
addFailEffect();
68+
}
5269
} else if (event.key === "F2") {
5370
const selectedNode = StageManager.getTextNodes().find((node) => node.isSelected);
5471
if (!selectedNode) return;
@@ -67,6 +84,20 @@ export namespace KeyboardOnlyEngine {
6784
// });
6885
}
6986

87+
function addSuccessEffect() {
88+
const textNodes = StageManager.getTextNodes().filter((textNode) => textNode.isSelected);
89+
for (const textNode of textNodes) {
90+
Stage.effectMachine.addEffect(new EntityDashTipEffect(50, textNode.collisionBox.getRectangle()));
91+
}
92+
}
93+
94+
function addFailEffect() {
95+
const textNodes = StageManager.getTextNodes().filter((textNode) => textNode.isSelected);
96+
for (const textNode of textNodes) {
97+
Stage.effectMachine.addEffect(EntityShakeEffect.fromEntity(textNode));
98+
}
99+
Stage.effectMachine.addEffect(TextRiseEffect.default("您可能记错了节点进入编辑状态的控制键设置"));
100+
}
70101
/**
71102
* 是否达到了按下Tab键的前置条件
72103
*/

app/src/locales/en.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,15 @@ settings:
320320
description: |
321321
注意不要和文本节点退出编辑模式的按键一样了,这样会导致冲突
322322
进而导致无法换行
323+
textNodeStartEditMode:
324+
title: 文本节点进入编辑模式
325+
options:
326+
enter: enter
327+
ctrlEnter: ctrlEnter
328+
altEnter: altEnter
329+
shiftEnter: shiftEnter
330+
description: |
331+
实际上按F2键也可以进入编辑模式,这里还可以再加选一种
323332
textNodeExitEditMode:
324333
title: 文本节点退出编辑模式
325334
options:

app/src/locales/zh_CN.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,15 @@ settings:
303303
description: |
304304
注意不要和文本节点退出编辑模式的按键一样了,这样会导致冲突
305305
进而导致无法换行
306+
textNodeStartEditMode:
307+
title: 文本节点进入编辑模式
308+
options:
309+
enter: enter
310+
ctrlEnter: ctrlEnter
311+
altEnter: altEnter
312+
shiftEnter: shiftEnter
313+
description: |
314+
实际上按F2键也可以进入编辑模式,这里还可以再加选一种
306315
textNodeExitEditMode:
307316
title: 文本节点退出编辑模式
308317
options:

app/src/locales/zh_TW.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,15 @@ settings:
291291
description: |
292292
注意不要和文本节点退出编辑模式的按键一样了,这样会导致冲突
293293
进而导致无法换行
294+
textNodeStartEditMode:
295+
title: 文本节点进入编辑模式
296+
options:
297+
enter: enter
298+
ctrlEnter: ctrlEnter
299+
altEnter: altEnter
300+
shiftEnter: shiftEnter
301+
description: |
302+
实际上按F2键也可以进入编辑模式,这里还可以再加选一种
294303
textNodeExitEditMode:
295304
title: 文本节点退出编辑模式
296305
options:

app/src/pages/settings/control.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
Keyboard,
66
ListCheck,
77
ListEnd,
8+
ListRestart,
89
Mouse,
910
MousePointerClick,
1011
Move,
@@ -20,12 +21,13 @@ export default function Control() {
2021
<>
2122
<FieldGroup title="Mouse 鼠标设定" icon={<Mouse />}>
2223
<SettingField icon={<MousePointerClick />} settingKey="mouseRightDragBackground" type="select" />
24+
<SettingField icon={<AlignStartVertical />} settingKey="enableDragAutoAlign" type="switch" />
2325
</FieldGroup>
2426

2527
<FieldGroup title="TextNode 文本节点" icon={<TextSelect />}>
28+
<SettingField icon={<ListRestart />} settingKey="textNodeStartEditMode" type="select" />
2629
<SettingField icon={<ListEnd />} settingKey="textNodeContentLineBreak" type="select" />
2730
<SettingField icon={<ListCheck />} settingKey="textNodeExitEditMode" type="select" />
28-
<SettingField icon={<AlignStartVertical />} settingKey="enableDragAutoAlign" type="switch" />
2931
</FieldGroup>
3032

3133
<FieldGroup title="Edge 连线" icon={<GitCompareArrows />}>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
export function getEnterKey(event: KeyboardEvent): "enter" | "ctrlEnter" | "shiftEnter" | "altEnter" | "other" {
2+
if (event.key === "Enter") {
3+
if (event.ctrlKey) {
4+
return "ctrlEnter";
5+
} else if (event.altKey) {
6+
return "altEnter";
7+
} else if (event.shiftKey) {
8+
return "shiftEnter";
9+
} else {
10+
return "enter";
11+
}
12+
} else {
13+
return "other";
14+
}
15+
}

0 commit comments

Comments
 (0)