Skip to content

fix(window): 디스플레이 이동의 종횡비·상대 위치 계약 확정 (#101)#104

Merged
pignuante merged 1 commit into
mainfrom
fix/display-move-geometry
Jul 22, 2026
Merged

fix(window): 디스플레이 이동의 종횡비·상대 위치 계약 확정 (#101)#104
pignuante merged 1 commit into
mainfrom
fix/display-move-geometry

Conversation

@pignuante

Copy link
Copy Markdown
Contributor

Summary

Closes #101. 감사 M-1 — displayMoveRect위치 공식크기 정책을 문서화된 계약에 맞춘다.
감사는 이 둘을 하나의 결정으로 묶었지만 실제로는 독립적이라 각각 확정했다.

1. 위치 — 화면 전체 크기 → 이동 가능 범위로 정규화

작업영역 1920×1080 → 1440×900, 폭 960 창을 정중앙(x=480)에 두고 이동:

계산 결과
기존 480/1920 = 0.250.25 × 1440 x=360 — 중앙(240)에서 120pt 치우침
변경 480/(1920−960) = 0.50.5 × (1440−960) x=240 — 정중앙 유지

가장자리 창은 기존에도 clamp가 같은 값을 냈다(오른쪽 끝 → 양쪽 모두 x=2480). 회귀 방지로
좌·우 가장자리 케이스를 테스트에 고정했다.

2. 크기 — 축별 cap → uniform scale

1600×900 창(16:9)을 1000×1000 작업영역으로:

결과
기존 (축별 cap) min(1600,1000) × min(900,1000) = 1000×900 = 10:9 — 찌그러짐
변경 (uniform scale) scale = min(1, 1000/1600, 1000/900) = 0.6251000×562.5 = 16:9

창이 목적지에 들어가면 두 방식 모두 크기 변화가 없다 — 차이는 안 들어갈 때만 난다.

선행 결정과의 관계

window-geometry-remediation-plan-2026-07-21.md가 정한 "절대 크기 유지, 대상 화면 초과 시에만
축소"
계약은 그대로 유지된다 — scale = min(1, …)이라 들어가는 창은 픽셀 크기가 보존되고,
화면 점유 비율로 축소하지 않는다. 그 계획이 명시하지 않았던 "초과 시 어떻게 줄일 것인가"
종횡비 보존으로 확정한다. 계획 문서가 주장한 "종횡비·픽셀 크기 모두 보존됨"은 사실 창이 들어갈
때만 참이었고, 이 변경으로 실제로 참이 된다.

Type

  • fix — bug fix (문서화된 동작과 구현 불일치)
  • docs

Checklist

  • make lint clean — 0 violations / 48 files
  • make test passes (194 → 199 checks); make coverage 100%
  • Docs 갱신 — README, 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 수동 검증은 실제 멀티모니터 확인용으로만
필요하다(가능하면 해상도가 다른 두 화면에서 중앙 창 이동을 확인).

…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"는 이 변경으로 비로소 참이 된다.
@pignuante pignuante self-assigned this Jul 22, 2026
@pignuante
pignuante merged commit bd0c752 into main Jul 22, 2026
3 checks passed
@pignuante
pignuante deleted the fix/display-move-geometry branch July 22, 2026 17:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

README의 'preserves shape' 문구가 한 축만 캡될 때 부정확

1 participant