간격을 숫자로 넣는다 — 4px 씩 12왕복에서 한 번으로
여기까지 간격을 정하는 길은 4px 씩 넓게/좁게뿐이었다. 20px 를 32px 로 바꾸려면 3번, 로고 아래 4단 메뉴로 하면 12왕복이고 매번 마우스가 좌상단까지 갔다. 단축키(Alt+[ / Alt+])로 왕복은 없앴지만 여전히 4px 씩이다. 드래그 스냅은 형제 간격을 정확히 계산해 분홍 표식까지 그리는데(SnapSolver), <b>명령 경로에는 그 값을 넣을 칸이 없었다</b>. 인스펙터에 세로·가로 칸을 붙인다. <b>둘</b>부터 뜬다 — 라벨과 입력칸 한 쌍이 가장 흔한 경우다. 균등 나누기가 셋을 요구하는 것과 기준이 다르므로 표시 조건을 따로 뒀다(CanSpaceExactly). <b>첫 항목은 움직이지 않는다.</b> 기준이 흔들리면 같은 값을 두 번 넣어도 자리가 계속 밀린다 — "24 를 넣었는데 블록이 아래로 기어간다"가 되고, 그건 사용자가 자기 조작을 의심하게 만든다. 검사에서 8 을 두 번 넣어 첫 항목의 Y 가 그대로인지 본다. <b>값이 갈리면 빈 칸이다.</b> 하나로 보여 주면 그 값이 이미 적용된 것처럼 읽혀서, 사용자는 이미 고른 상태라고 믿고 넘어간다. 음수·NaN 은 무시한다 — 조용히 뒤엉킨 배치가 되는 것보다 아무 일도 안 하는 쪽이 낫다. 실측 6건: 갈린 값 빈 칸 · 24 로 놓으면 24 · 첫 항목 고정 · 재입력 시 안 밀림 · 음수 무시 · NaN 무시. 게이트: 테스트 291/291, --edit-smoke 0실패(신규 6), --dialog-shots 글자 2,531개 FAIL 0 대조군 4/4, --modal-check 0실패, --cleartype 11/11, --maxrect 0실패, --scale-budget 5/5, 빌드 경고 0, --db-smoke 1271건 diff 0, --db-render P062 md5 8d683835f5d81e7bb41c79071d6bf954 동일. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
6d06f0a4c8
commit
2f5c9bf82d
@@ -212,6 +212,34 @@ public static class EditSmoke
|
||||
Check("완성: Esc 는 값을 바꾸지 않는다", tagRow.ValueText == before && !tagRow.ShowCompletions);
|
||||
}
|
||||
|
||||
// 간격을 숫자로 놓는다 — 4px 씩이 아니라 정확한 값으로.
|
||||
{
|
||||
var gaps = new DesignerViewModel(new FormDesignDataBusiness().CreateNew());
|
||||
gaps.AddControlAt("Label", new Point(60, 100));
|
||||
gaps.AddControlAt("Label", new Point(60, 160));
|
||||
gaps.AddControlAt("Label", new Point(60, 260));
|
||||
var rows = gaps.Pages[0].Controls.Where(c => c.Type == "Label").OrderBy(c => c.Y).ToList();
|
||||
gaps.Selection.Set(rows);
|
||||
|
||||
Check("간격값: 갈린 값은 빈 칸", gaps.CurrentSpacing(horizontal: false) is null);
|
||||
gaps.SetExactSpacing(24, horizontal: false);
|
||||
Check("간격값: 24 로 놓으면 24 가 된다", gaps.CurrentSpacing(horizontal: false) == 24,
|
||||
$"실제 {gaps.CurrentSpacing(horizontal: false)}");
|
||||
|
||||
var head = rows.First();
|
||||
var headY = head.Y;
|
||||
gaps.SetExactSpacing(8, horizontal: false);
|
||||
Check("간격값: 첫 항목은 움직이지 않는다", Math.Abs(head.Y - headY) < 0.5,
|
||||
$"{headY} → {head.Y}");
|
||||
Check("간격값: 다시 넣어도 밀리지 않는다", gaps.CurrentSpacing(horizontal: false) == 8);
|
||||
|
||||
// 음수·헛값은 무시한다 — 조용히 뒤엉킨 배치가 되는 것보다 아무 일도 안 하는 쪽이 낫다
|
||||
gaps.SetExactSpacing(-4, horizontal: false);
|
||||
Check("간격값: 음수는 무시한다", gaps.CurrentSpacing(horizontal: false) == 8);
|
||||
gaps.SetExactSpacing(double.NaN, horizontal: false);
|
||||
Check("간격값: 숫자가 아니면 무시한다", gaps.CurrentSpacing(horizontal: false) == 8);
|
||||
}
|
||||
|
||||
// 미리보기가 인쇄 필터를 <b>실제로 쓰는가</b>.
|
||||
// PrintFilter 단위 테스트는 판정이 옳다는 것만 말한다 — 렌더 경로가 그 판정을 부르는지는
|
||||
// 다른 문제이고, 이 앱에서 "코드는 맞아 보이는데 화면은 다른" 일이 여러 번 있었다.
|
||||
|
||||
Reference in New Issue
Block a user