feat(487 CAD 글 테두리 · 리본 켜짐): 스침 테두리 = 더블클릭 입력 칸 한 벌(text-frame) · 잡는 범위 = 테두리 안 · 리본 켜짐 하나만
- 새 helpers/text-frame.ts — 정렬 · 가운데 맞춤 · 실제 글꼴 폭(굵게 · 기울임) · 회전 · 여러 줄 묶음 · 도각 칸 = 테두리 한 셈 - TextEntity 스침 · 고름 테두리 = 그 네 귀(여러 줄은 묶음 하나) · distanceTo = 테두리 안 0 · getBoundingBox 그대로 - 입력 칸 자리 · 폭 · 높이 = 같은 셈(여유 = 안쪽 여백) · 더블클릭 범위 = 테두리 + 집기 반경 - measureTextScreen 글꼴 받음 · 디버그 창구 textFrame(화면 네 귀) - 리본 스침 = 바탕만(hover 기기만) · 켜짐 = 테두리 + 밑줄 · 누른 뒤 blur(초점 테두리 남음 막음) - 시험 text-frame.test.ts 새로 · text-inplace-edit.test.ts 칸 폭 · 여백 · test_cad_host_tabs 줄바꿈 무관 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -17,6 +17,8 @@ import {
|
||||
} from '../state';
|
||||
import { Point } from '@flatten-js/core';
|
||||
import { isEntityHidden } from './visibility';
|
||||
import type { TextEntity } from '../entities/TextEntity';
|
||||
import { textFrame, textFrameCorners, textLinesOf } from './text-frame';
|
||||
|
||||
export function registerCadDebugHook(): void {
|
||||
(window as unknown as Record<string, unknown>).__aisloCad = {
|
||||
@@ -59,5 +61,21 @@ export function registerCadDebugHook(): void {
|
||||
const point = getScreenCanvasDrawController().worldToTarget(new Point(x, y));
|
||||
return { x: point.x, y: point.y };
|
||||
},
|
||||
// 글 스침 테두리 네 귀(화면 좌표 · 왼위부터) — 더블클릭 입력 칸과 픽셀로 견줌(487).
|
||||
textFrame: (id: string) => {
|
||||
const entity = getEntities().find((item) => item.id === id) as TextEntity | undefined;
|
||||
if (!entity?.getTextOptions) return null;
|
||||
const controller = getScreenCanvasDrawController();
|
||||
const lines = textLinesOf(entity, getEntities());
|
||||
const scale = controller.getScreenScale();
|
||||
const rows = lines.map((line) => line.previewLabel ?? line.getLabel());
|
||||
const frame = textFrame(lines, rows, scale, (row, px, font) =>
|
||||
controller.measureTextScreen(row, px, font)
|
||||
);
|
||||
return textFrameCorners(lines, frame, scale).map((corner) => {
|
||||
const point = controller.worldToTarget(corner);
|
||||
return { x: point.x, y: point.y };
|
||||
});
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user