fix(window): 디스플레이 이동의 종횡비·상대 위치 계약 확정 (#101)#104
Merged
Conversation
…displays Closes #101 두 가지가 문서화된 계약과 어긋나 있었다. - 위치: 창 origin을 화면 전체 크기로 정규화해, 해상도가 다른 화면으로 옮기면 중앙에 있던 창이 중앙을 벗어났다. 1920 화면 정중앙의 960 폭 창(x=480)은 1440 화면에서 360이 됐지만 중앙은 240이다. 이제 "창이 실제로 움직일 수 있는 범위"(작업영역 − 창 크기)로 정규화한다. 가장자리 창은 기존에도 clamp 덕에 같은 값이었고, 그 동작은 테스트로 고정했다. - 크기: 대상 화면보다 큰 축만 독립적으로 캡해 종횡비가 바뀌었다. 1600×900 창을 1000×1000 작업영역으로 옮기면 1000×900이 됐다. 이제 들어가지 않을 때 두 축을 같은 배율로 줄인다. 창이 대상 작업영역에 들어가면 픽셀 크기를 그대로 유지하는 계약은 그대로다(화면 점유 비율로 축소하지 않음) — 선행 수정 계획이 정한 "절대 크기 유지, 초과 시에만 축소"는 유지하고, 그 계획이 명시하지 않았던 "초과 시 어떻게 줄일 것인가"만 종횡비 보존으로 확정한다. README·manual.html·index.html의 문구를 실제 동작에 맞춘다(3중 문자열 en/ko/가시 텍스트 모두). 기존 "preserving its shape"는 이 변경으로 비로소 참이 된다.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Closes #101. 감사 M-1 —
displayMoveRect의 위치 공식과 크기 정책을 문서화된 계약에 맞춘다.감사는 이 둘을 하나의 결정으로 묶었지만 실제로는 독립적이라 각각 확정했다.
1. 위치 — 화면 전체 크기 → 이동 가능 범위로 정규화
작업영역 1920×1080 → 1440×900, 폭 960 창을 정중앙(x=480)에 두고 이동:
480/1920 = 0.25→0.25 × 1440480/(1920−960) = 0.5→0.5 × (1440−960)가장자리 창은 기존에도 clamp가 같은 값을 냈다(오른쪽 끝 → 양쪽 모두 x=2480). 회귀 방지로
좌·우 가장자리 케이스를 테스트에 고정했다.
2. 크기 — 축별 cap → uniform scale
1600×900 창(16:9)을 1000×1000 작업영역으로:
min(1600,1000) × min(900,1000)= 1000×900 = 10:9 — 찌그러짐scale = min(1, 1000/1600, 1000/900) = 0.625→ 1000×562.5 = 16:9창이 목적지에 들어가면 두 방식 모두 크기 변화가 없다 — 차이는 안 들어갈 때만 난다.
선행 결정과의 관계
window-geometry-remediation-plan-2026-07-21.md가 정한 "절대 크기 유지, 대상 화면 초과 시에만축소" 계약은 그대로 유지된다 —
scale = min(1, …)이라 들어가는 창은 픽셀 크기가 보존되고,화면 점유 비율로 축소하지 않는다. 그 계획이 명시하지 않았던 "초과 시 어떻게 줄일 것인가" 만
종횡비 보존으로 확정한다. 계획 문서가 주장한 "종횡비·픽셀 크기 모두 보존됨"은 사실 창이 들어갈
때만 참이었고, 이 변경으로 실제로 참이 된다.
Type
Checklist
make lintclean — 0 violations / 48 filesmake testpasses (194 → 199 checks);make coverage100%docs/manual.html,docs/index.html의 3중 문자열(data-en/data-ko/가시 텍스트) 모두.docs/not staged (gitignored)Notes / risk
동작 변경 PR이다. 다중 모니터 사용자가 체감하는 지점:
순수 함수라 5개 신규 케이스로 전수 검증했다(중앙 유지 · 좌/우 가장자리 · uniform scale 2종 ·
travel=0 퇴화). 기존
testDisplayMove케이스는 같은 해상도 화면끼리라 두 공식이 동일한 값을 내그대로 통과한다 — "축별 cap" 기대값 하나만 갱신했다.
TCC/AX를 건드리지 않는 순수 기하 변경이라
make run수동 검증은 실제 멀티모니터 확인용으로만필요하다(가능하면 해상도가 다른 두 화면에서 중앙 창 이동을 확인).