증상
정답이 짧으면(객관식 번호 등) 정답 토스트가 설정한 위치에 붙지 않고 안쪽으로 밀려서 뜹니다. 오른쪽 위치(기본값 topRight)에서 가장 잘 보이고, 가운데 위치에서는 한쪽으로 치우칩니다.
토스트는 화면 가장자리에서 28pt 떨어진 곳에 오른쪽 끝을 맞춰야 합니다 (1470pt 폭 화면이면 오른쪽 끝 = 1442).
| 정답 |
토스트 폭 |
오른쪽 끝 |
어긋남 |
| 긴 답 |
147 |
1442 |
0 |
| 짧은 답 |
105 |
1427 |
15pt 안쪽 |
| 아주 짧은 답 |
89 |
1411 |
31pt 안쪽 |
PR #7 검증 중 토스트 창 크기를 0.05초 간격으로 기록하다 발견했습니다. 이 PR 전부터 있던 동작입니다.
재현
- 설정 → 결과 표시 → 토스트, 표시 위치 우측 상단
- 정답이 짧은 문제(예: 객관식 "③")를 ⌥⌘S로 캡처
- 긴 답이 나오는 문제와 비교하면 토스트 오른쪽 끝선이 다름
원인
Paxo/UI/ToastController.swift의 show():
fittingSize를 최소 120pt로 올려 잡고(min(max(fitting.width, 120), 560)), 그 크기로 setContentSize · setFrameOrigin을 계산합니다.
- 이후
NSHostingView가 기본 sizingOptions에 따라 창을 실제 내용 크기(예: 89pt)로 다시 줄입니다.
- 줄일 때 왼쪽 끝(origin)은 그대로라서 오른쪽 끝이
120 − 실제 폭만큼 안쪽으로 밀립니다.
같은 원인으로, 토스트가 떠 있는 동안 내용이 바뀌면(상태 전환 등) 창 크기가 컨트롤러 모르게 바뀝니다. PR #7 검증에서 토스트가 사라지기 직전 폭이 2~6pt 바뀌는 현상도 이것으로 보입니다.
영향
- 기능 문제는 없고 위치가 어긋나 보이는 표시 문제입니다.
- 폭이 120pt보다 좁은 정답 토스트에서만 발생합니다.
제안
창 크기를 컨트롤러 한 곳에서만 정하게 합니다.
ensurePanel()에서 NSHostingView의 자동 크기 조정을 끄고(host.sizingOptions = []), show()가 계산한 크기 · 위치를 그대로 쓰게 합니다.
- 또는 자동 크기 조정을 유지하되, 크기가 바뀐 뒤
PanelPosition.origin(for:on:margin:)으로 위치를 다시 계산합니다.
확인 방법: 짧은 답 · 긴 답 토스트의 오른쪽 끝이 같은지, 토스트가 떠 있는 동안 창 크기가 컨트롤러가 정한 값에서 바뀌지 않는지 (PR #7에서 쓴 창 크기 기록 방식으로 전후 비교).
증상
정답이 짧으면(객관식 번호 등) 정답 토스트가 설정한 위치에 붙지 않고 안쪽으로 밀려서 뜹니다. 오른쪽 위치(기본값
topRight)에서 가장 잘 보이고, 가운데 위치에서는 한쪽으로 치우칩니다.토스트는 화면 가장자리에서 28pt 떨어진 곳에 오른쪽 끝을 맞춰야 합니다 (1470pt 폭 화면이면 오른쪽 끝 = 1442).
PR #7 검증 중 토스트 창 크기를 0.05초 간격으로 기록하다 발견했습니다. 이 PR 전부터 있던 동작입니다.
재현
원인
Paxo/UI/ToastController.swift의show():fittingSize를 최소 120pt로 올려 잡고(min(max(fitting.width, 120), 560)), 그 크기로setContentSize·setFrameOrigin을 계산합니다.NSHostingView가 기본sizingOptions에 따라 창을 실제 내용 크기(예: 89pt)로 다시 줄입니다.120 − 실제 폭만큼 안쪽으로 밀립니다.같은 원인으로, 토스트가 떠 있는 동안 내용이 바뀌면(상태 전환 등) 창 크기가 컨트롤러 모르게 바뀝니다. PR #7 검증에서 토스트가 사라지기 직전 폭이 2~6pt 바뀌는 현상도 이것으로 보입니다.
영향
제안
창 크기를 컨트롤러 한 곳에서만 정하게 합니다.
ensurePanel()에서NSHostingView의 자동 크기 조정을 끄고(host.sizingOptions = []),show()가 계산한 크기 · 위치를 그대로 쓰게 합니다.PanelPosition.origin(for:on:margin:)으로 위치를 다시 계산합니다.확인 방법: 짧은 답 · 긴 답 토스트의 오른쪽 끝이 같은지, 토스트가 떠 있는 동안 창 크기가 컨트롤러가 정한 값에서 바뀌지 않는지 (PR #7에서 쓴 창 크기 기록 방식으로 전후 비교).