7차 E-4 기록: 창 크기를 마음대로 조절할 수 있게(플랫폼 셸)

셸 창이 최대화 전용이었다. 끌어 크기 조절(최소 1280x720) · 두 번 누르기 최대화/복원 · 화면 이동이 크기를 지킴 ·
크기와 모니터 기억. 최대화는 작업 표시줄까지 덮고(사용자 결정), 크기를 바꿀 때 깜빡이지 않게(검은 칠 99.7% -> 3%).
확인 받고 D:\UbisamPlatform\bin 배포, MergeHub 다시 빌드. MergeHub 네 탭은 최소 크기에서 잘리지 않음. MergeHub 코드 변경 없음.
7차 지시서 E-4 판정 기준을 사용자 결정대로 고침.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
김승준 2026-09-15 17:01:54 +09:00
parent aebfd6b089
commit f256f0f038
4 changed files with 73 additions and 2 deletions

View File

@ -261,6 +261,74 @@ MergeSaveTest 125건 · EncTest 48 · FolderTest 62 · ReportTest 31 · SearchTe
- revert 충돌은 같은 길(`AfterConflicts` · `CommitPendingOperation`)을 쓰지만 화면으로 끝까지는 안 봤다.
- 자동 조작 쪽: cherry-pick 첫 확인에서 [모든 브랜치] 를 켠 직후 목록 선택이 앱에 안 닿아 Accept 가 한 개만 풀렸다. 기다림을 넣고 다시 해 24 → 1 로 확인했다.
## E-4. 창 크기를 마음대로 조절할 수 있게 (2026-09-15, 추가 요청, 완료 · 플랫폼)
사용자: "현재는 화면크기 최대화만 지원인데 이거 크기를 마음대로 조절할수있게 할수있겠어?" — 하는 중에 두 가지를 더 정했다.
- "화면크기 최대화하면 작업표시줄 안보이게 화면을 채워줘" → 지시서의 "작업 표시줄을 덮지 않는다" 를 **덮는다** 로 바꿈.
- "화면 크기를 조절할때 엄청 깜빡거려 깜빡거리지 않게 해줘" → 깜빡임 없애기를 기준에 더함.
고친 곳은 모두 **플랫폼 셸 창**(`UbisamBase.Core/Shell`)이다. MergeHub 코드는 바꾸지 않았다.
### 고치기 전에 쟀다 (2560×1600@150% · 1920×1080@100% 두 모니터)
| 확인 | 결과 |
|---|---|
| 켠 직후 | 최대화 2560×1600, 크기 조절 테두리(WS_THICKFRAME) **없음** |
| 브랜딩 바 두 번 누르기 | 아무 일 없음 |
| 브랜딩 바 끌기 | 끄는 동안 1792×1069 로 줄었다가 **놓으면 다시 최대화** |
| Win+↓ | 2560×1528 "보통" 창 — 작업 영역만 하고 크기를 바꿀 수 없음 |
### 고친 것 (플랫폼)
| 파일 | 무엇 |
|---|---|
| `Shell/ShellWindow.xaml` | `ResizeMode=CanResize` · 최소 1280×720 · `WindowChrome`(끌어 크기 조절 테두리 6px, 제목 영역 0, 유리 틀 아래 1px) · 브랜딩 바 끌기 처리기 |
| `Shell/ShellWindow.xaml.cs` | 두 번 누르기 = 최대화 ↔ 복원 · 보통 크기에서 끌면 크기 그대로 옮김(놓아도 다시 최대화하지 않음) · 최대화에서 끌면 **실제로 움직일 때** 복원 크기로 줄여 따라옴 · 화면 이동은 보통 크기면 DIP 크기와 상대 위치를 지키고 최대화면 그 모니터를 채움 · Win+↓ 로 작업 영역만 한 창이 남으면 복원 크기로 · 마지막 크기 · 위치 · 최대화 여부 기억(창을 보이기 전에 복원) · **최대화 동안 크기 조절 틀을 떼고** 보통 크기로 돌아오면 다시 붙임 · 창 그리기 바탕을 앱 배경색으로 |
| `Shell/MonitorLayout.cs` | 창 사각형 읽기 · `WM_GETMINMAXINFO` — 최대화 = 그 모니터 전체(작업 표시줄 포함), 최대 끌기 크기도 그 모니터로, 최소 끌기 크기 |
| `Shell/WindowPlacementMath.cs` (새 파일) | 최소 크기(화면이 작으면 작업 영역에 맞춤) · 복원 크기(기억 없으면 작업 영역 80%) · 커서 아래로 줄이기 · 모니터 사이 옮기기(배율 비) · 작업 영역 안으로 · 작업 영역을 덮는지 · 기억한 자리가 지금 모니터에 보이는지 |
| `Shell/ShellWindowPlacement.cs` (새 파일) | `{설정 폴더}\ShellWindowPlacement.json` — UI 설정 파일과 따로(그쪽은 [저장] 을 눌러야 씀) |
| `Settings/UiSettingsService.cs` | `SettingsDirectory` |
| 하네스 `PlacementTest` (새로 만듦) | 계산 · 기억 파일 검사 37건 |
### 확인하며 찾아 고친 것
| # | 무엇 | 어떻게 알았나 · 고침 |
|---|---|---|
| 1 | **최대화하면 작업 표시줄이 창 위에 떠 하단 탭 바를 가림** — [화면 이동] · [종료] 가 안 눌림(사용자도 지적) | 그 자리의 창이 `Shell_TrayWnd`. 예전 셸과 창 크기 · 스타일 비트가 **같았고**, 다른 것은 크기 조절 틀(WindowChrome) 하나였다. 최대화 중 테두리만 떼기 · 작업 표시줄에 전체 화면이라고 알리기(`MarkFullscreenWindow`)는 효과가 없어 되돌렸고, **최대화 동안 틀을 떼자** 두 모니터 모두 앱 창이 받았다 |
| 2 | **크기를 바꿀 때 창이 통째로 검게 깜빡임**(사용자 지적) | 오른쪽 가장자리를 끄는 동안 40장 찍어 검은 픽셀 비율: 고치기 전 **최대 99.7%** → 창 그리기 바탕을 앱 배경색으로 + 유리 틀 1px → **최대 3.0%(파일 비교) · 2.0%(폴더 비교), 절반 넘게 검은 장 0**. 끌지 않을 때는 0% |
| 3 | 기억한 보통 크기로 켰는데 Windows 는 "최대화" 로 봄 | XAML 의 최대화가 복원보다 늦게 걸림 → 창을 보이기 전(생성자)에 보통 상태로 정함 |
| 4 | 보통 크기로 한 번도 안 쓰고 옆 모니터에서 최대화로 끄면 다음에 주 모니터로 켜짐 | 그 모니터의 복원 자리를 함께 기억 |
| 5 | 최대화로 넘어가는 순간의 모니터만 한 크기가 "보통 크기" 로 기억됨 | 작업 영역을 거의 덮는 크기는 기억하지 않음 |
| - | (측정 쪽) 옆 모니터 창이 1.5배 크게 재짐 | 앱은 모니터별 배율 인식(2)인데 측정한 PowerShell 이 시스템 배율(1)이라 좌표가 부풀려졌다. 측정 스레드를 모니터별 배율로 바꿔 다시 쟀다 |
### 확인한 것 (실제 픽셀, 배포 전 앱 폴더에 새 Core 를 넣어서)
| 확인 | 결과 |
|---|---|
| 켠 직후(기억 없음) | 최대화 2560×1600 = 모니터 전체 · 테두리 없음 · 하단 바를 앱 창이 받음 |
| 두 번 누르기 | 보통 2048×1222(작업 영역 80%, 가운데) ↔ 최대화 |
| 가장자리 · 모서리 끌기 | 가로 1920px · 세로 1080px(= **1280×720 DIP**)에서 멈춤 · 모서리로 키우기 됨 |
| 보통 크기에서 브랜딩 바 끌기 | **크기 그대로** 자리만 옮김, 보통 크기 유지 |
| 최대화에서 한 번 누르기 · 끌기 | 한 번 누르기는 그대로 · 끌면 2048×1222 로 줄어 따라오고 보통 크기로 남음 |
| Win+↑ · Win+↓ | 모니터 전체로 최대화 ↔ 기억한 보통 크기. 옆 모니터에서 Win+↑ = 1920×1080 전체 |
| 화면 이동(보통) 20번 | 150% 2048×1222px ↔ 100% 1365×815px, **DIP 1365×815 로 20번 모두 같음** |
| 화면 이동(최대화) | 주 ↔ 옆 모니터 전체로 옮김, 하단 바를 앱 창이 받음 |
| 보통 크기로 [종료] → 다시 켬 | 같은 자리 · 크기, 최대화 아님 |
| 옆 모니터 최대화로 [종료] → 다시 켬 | 옆 모니터(2560,0 1920×1080)에서 최대화 |
| 보통 크기로 내리면 | 작업 표시줄이 다시 보이고 테두리가 붙음 |
| MergeHub 네 탭 · 최소 1280×720 DIP | 폴더 비교 · 파일 비교 네 칸 · Git 충돌 · 설정 모두 **잘리지 않음**. 파일 비교 머리의 [새로고침] 과 폴더 비교 [비교] · [결과 닫기] 가 다음 줄로 접히고, ACTIONS 칸 · 충돌 목록은 스크롤 |
| MergeHub 네 탭 · 옆 모니터 최대화 1920×1080 | 모두 잘리지 않음 |
사용자 확인 뒤 `publish-platform.ps1` 로 `D:\UbisamPlatform\bin` 배포(Core · Shell Release 경고 0 · 오류 0, 파일 48 · pdb 0), MergeHub 다시 빌드(경고 0 · 오류 0, 앱 폴더 Core = 배포본). 배포본으로 켜 최대화 · 하단 바 · 두 번 누르기 · [종료] 다시 확인.
설정 폴더: 시험마다 기억 파일을 "기억 없음"(크기 0 · 최대화)으로 되돌림, 다른 설정 파일은 그대로(해시).
### 남긴 것
- 기억이 없을 때 **처음 Win+↓** 는 XAML 기본 크기(1600×900 DIP)로 내려온다. 두 번 누르기는 작업 영역 80%. 둘 다 쓸 수 있는 크기라 맞추지 않았다.
- 보통 크기 창 가장자리에 Windows 기본 테두리 선이 1px 보인다(유리 틀 1px).
- 창 끌어 스냅(화면 왼쪽 · 오른쪽 반쪽)은 따로 재지 않았다.
- **모든 소비 프로그램에 영향** — 플랫폼 changelog 에 적었다. 처음 켜면 지금처럼 최대화로 작업 표시줄을 덮으므로 크기를 안 바꾸는 사람에게는 같다.
## E-2. 폴더 비교 탭에 폴더를 하나씩 끌어다 놓으면 첫 칸 → 둘째 칸 차례로 (2026-09-14, 추가 요청, 완료)
사용자: "폴더비교 탭 첫번째 드래그 첫번째 폴더 경로에 들어가고 두번째는 드래그앤드롭은 두번째로 들어가게해줘 경로텍스트 박스에 안넣어도 그냥 화면에다 넣어둬 기능 동작하도록".

View File

@ -8,6 +8,7 @@
| 날짜 | 항목 | 커밋 |
|---|---|---|
| 2026-09-15 | **7차 E-4** — 셸 창이 최대화 전용이었다. 가장자리를 끌어 크기 조절(최소 1280×720 DIP) · 브랜딩 바 두 번 누르기 최대화 ↔ 복원 · 보통 크기로 끌면 크기 그대로 · 화면 이동이 DIP 크기를 지킴 · 마지막 크기 · 모니터 · 최대화 기억. 최대화는 작업 표시줄까지 덮는다(사용자 결정 — 틀을 붙인 뒤 작업 표시줄이 하단 탭 바를 가려 최대화 동안 틀을 뗌). 크기를 바꿀 때 창이 검게 깜빡이던 것(99.7% → 3%). 플랫폼 수정 · 배포, MergeHub 코드 변경 없음 | 아래 |
| 2026-09-15 | **7차 C-2** — rebase · cherry-pick 충돌을 화면이 모두 "병합" 으로 불렀다(REMOTE · THEIRS, cherry-pick 에 "병합 진행 중", 다 풀면 끝낼 단추가 없음, 로그에 `RebaseContinue()` · `Commit()`, 다른 브랜치 커밋을 cherry-pick 할 수 없음). 작업 상태(`GitOperationState`)로 칸 제목 · 머리 글 · 진행 표시 · 끝내기 단추(병합 커밋 · 계속 · 커밋)를 정하고, cherry-pick · revert 는 원래 메시지 · 작성자로 커밋. 머지 주석 자동 풀기도 함께. 이력 탭 [모든 브랜치]. 두 길 모두 MergeHub 만으로 끝까지, 줄끝 바뀐 파일 0 | 아래 |
| 2026-09-14 | **7차 지시서에 E-4 추가** — 사용자 요청 "창 크기를 마음대로 조절". 지금은 셸이 최대화 전용(테두리 없음 · 크기 고정 · 끌면 다시 최대화). 걸리는 곳(크기 조절 테두리 · 배율 다른 모니터 · 크기 기억 · MergeHub 고정 폭과 네 칸 정렬 · 모든 소비 프로그램)과 판정 기준을 적음. 코드 변경 없음 | 아래 |
| 2026-09-14 | **7차 C-1** — pull 로 받은 충돌은 머지 주석만 다른 파일까지 사람에게 물었고(26 · 0/26), 알림도 커밋 메시지도 없었다. [Merge] 의 뒷일을 `AfterMerge` 로 빼 pull 도 같게(24 · 2/26 · 같은 알림). pull 병합 커밋 메시지는 git 과 같은 "Merge remote-tracking branch 'origin/feature/mine' into feature/mine" | 아래 |

View File

@ -155,7 +155,9 @@
**판정 기준**
- 창 가장자리 · 모서리를 끌어 크기를 바꿀 수 있다. 1280 × 720 보다 작게는 안 줄어든다.
- 브랜딩 바 두 번 누르기 · Win+↑/↓ 로 최대화 ↔ 복원. 최대화했을 때 화면 밖으로 넘치지 않고 작업 표시줄을 덮지 않는다.
- 브랜딩 바 두 번 누르기 · Win+↑/↓ 로 최대화 ↔ 복원. 최대화했을 때 화면 밖으로 넘치지 않고 **작업 표시줄까지 덮어 화면을 채운다**
(2026-09-15 사용자 결정 "최대화하면 작업표시줄 안보이게 화면을 채워줘" — 처음에는 "덮지 않는다" 였다). 하단 탭 바를 작업 표시줄이 가리지 않는다.
- 크기를 바꾸는 동안 창이 깜빡이지 않는다(2026-09-15 사용자 요청).
- 보통 크기에서 브랜딩 바를 끌면 **크기가 그대로** 옮겨진다. 최대화 상태에서 끌면 지금처럼 줄어들어 따라온다.
- "화면 이동" 을 150% ↔ 100% 모니터 사이로 10번 왕복해도 보통 크기 창의 크기가 모니터 배율대로 맞고(틀어짐 없음), 최대화 창은 그 모니터를 채운다.
- 껐다 켜면 마지막 크기 · 위치 · 최대화 여부로 뜬다. 그 모니터가 없으면 주 모니터 안에 뜬다.

View File

@ -179,7 +179,7 @@
| **완료** | E-1 [해결로 저장] 이름을 [Save] 로 — 하는 일은 그대로, 알림 · 안내 · 웹 문서 이름도 |
| **완료** | E-2 폴더 비교 탭에 폴더를 하나씩 끌어다 놓으면 첫 칸 → 둘째 칸 차례로 (경로 칸 위가 아니어도) — 양쪽이 차면 바로 비교, 칸 위에 놓은 것도 차례에 침 |
| **완료** | E-3 사용자 이름을 저장하기 전에는 화면을 쓸 수 없게 — 이름 창이 끌어도 안 움직이고 저장 없이 닫히지 않음(플랫폼, 배포함) |
| 대기 | E-4 창 크기를 마음대로 조절할 수 있게 — 지금은 최대화만. 셸(테두리 · 최대화 ↔ 복원 · 배율 다른 모니터 · 크기 기억)과 MergeHub(최소 1280×720 에서 잘림 · 네 칸 정렬). 플랫폼이라 배포는 확인 뒤 |
| **완료** | E-4 창 크기를 마음대로 조절할 수 있게 — 끌어 크기 조절(최소 1280×720) · 두 번 누르기 최대화 ↔ 복원 · 화면 이동이 크기를 지킴 · 크기 · 모니터 기억. 최대화는 작업 표시줄까지 덮고(사용자 결정) 크기를 바꿀 때 깜빡이지 않음(검은 칠 99.7% → 3%). 플랫폼, 배포함. MergeHub 네 탭 최소 크기에서 안 잘림 |
---