fix(B07): 우클릭 뒤에도 선택 도구가 살아 있게 하고, 커서 옆 글자를 줄인다

선택 아이콘을 누르고 우클릭하면 커서 옆 안내가 사라졌다. 우클릭은 ENTER이고,
선택 도구는 ENTER로 최종 상태(SELECTION_COMPLETED, type: final)에 들어가 멈춘다.
그 끝남은 move·copy·rotate가 선택을 자식으로 불러 쓸 때 onDone으로 필요하므로 두고,
선택이 그 자체로 활성 도구일 때만 새로 세운다.

커서를 따라다니는 글자가 18px이라 컸다. 쓰이지 않던 상수
CANVAS_INPUT_FIELD_FONT_SIZE를 12로 낮춰 두 곳이 함께 쓰게 했다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-30 21:23:24 +09:00
co-authored by Claude Opus 5
parent 8666bfdcfa
commit b4a653e682
2 changed files with 15 additions and 4 deletions
@@ -197,7 +197,7 @@ export const CANVAS_INPUT_FIELD_SELECTION_TEXT_COLOR = '#000';
/**
* Canvas input field text size in pixels
*/
export const CANVAS_INPUT_FIELD_FONT_SIZE = 16;
export const CANVAS_INPUT_FIELD_FONT_SIZE = 12;
/**
* Canvas input field instruction text color
@@ -1,7 +1,9 @@
import { Point } from '@flatten-js/core';
import { compact, round } from 'es-toolkit';
import { Actor } from 'xstate';
import {
CANVAS_INPUT_FIELD_BACKGROUND_COLOR,
CANVAS_INPUT_FIELD_FONT_SIZE,
CANVAS_INPUT_FIELD_HEIGHT,
CANVAS_INPUT_FIELD_INSTRUCTION_TEXT_COLOR,
CANVAS_INPUT_FIELD_MOUSE_OFFSET,
@@ -39,6 +41,7 @@ import {
getSnapPoint,
getSnapPointOnAngleGuide,
redo,
setActiveToolActor,
setAngleStep,
setGhostHelperEntities,
setGridEnabled,
@@ -50,7 +53,7 @@ import {
undo,
} from '../state.ts';
import { Tool } from '../tools.ts';
import { SelectState } from '../tools/select-tool.ts';
import { SelectState, selectToolStateMachine } from '../tools/select-tool.ts';
import {
type AbsolutePointInputEvent,
ActorEvent,
@@ -139,7 +142,7 @@ export class InputController {
{
textAlign: 'left',
textColor: CANVAS_INPUT_FIELD_TEXT_COLOR,
fontSize: 18,
fontSize: CANVAS_INPUT_FIELD_FONT_SIZE,
}
);
}
@@ -496,10 +499,18 @@ export class InputController {
text: this.text,
activeTool: getActiveToolActor(),
});
const wasSelectTool = this.isSelectToolActive();
// Send the ENTER event to the active tool
getActiveToolActor()?.send({
type: ActorEvent.ENTER,
});
// 선택 도구는 ENTER(우클릭)로 최종 상태에 들어가 **멈춘다**. 다른 도구가 선택을
// 자식으로 불러 쓸 때는 그 끝남이 필요하지만(move·copy·rotate의 onDone),
// 선택이 그 자체로 활성 도구일 때 멈추면 커서 옆 안내가 사라지고 이후 클릭도
// 안 먹는다(2026-08-30 사용자 지적). 그 경우에만 새로 세워 준다.
if (wasSelectTool && getActiveToolActor()?.getSnapshot()?.status === 'done') {
setActiveToolActor(new Actor(selectToolStateMachine));
}
} else if (activeToolCanHandleTextInput) {
console.log('TEXT_INPUT: ', {
text: this.text,
@@ -643,7 +654,7 @@ export class InputController {
{
textAlign: 'left',
textColor: CANVAS_INPUT_FIELD_INSTRUCTION_TEXT_COLOR,
fontSize: 18,
fontSize: CANVAS_INPUT_FIELD_FONT_SIZE,
}
);
});