Skip to content

fix: 짧은 정답의 토스트가 설정한 위치보다 안쪽에 뜸 #8

Description

@jk030430-coder

증상

정답이 짧으면(객관식 번호 등) 정답 토스트가 설정한 위치에 붙지 않고 안쪽으로 밀려서 뜹니다. 오른쪽 위치(기본값 topRight)에서 가장 잘 보이고, 가운데 위치에서는 한쪽으로 치우칩니다.

토스트는 화면 가장자리에서 28pt 떨어진 곳에 오른쪽 끝을 맞춰야 합니다 (1470pt 폭 화면이면 오른쪽 끝 = 1442).

정답 토스트 폭 오른쪽 끝 어긋남
긴 답 147 1442 0
짧은 답 105 1427 15pt 안쪽
아주 짧은 답 89 1411 31pt 안쪽

PR #7 검증 중 토스트 창 크기를 0.05초 간격으로 기록하다 발견했습니다. 이 PR 전부터 있던 동작입니다.

재현

  1. 설정 → 결과 표시 → 토스트, 표시 위치 우측 상단
  2. 정답이 짧은 문제(예: 객관식 "③")를 ⌥⌘S로 캡처
  3. 긴 답이 나오는 문제와 비교하면 토스트 오른쪽 끝선이 다름

원인

Paxo/UI/ToastController.swift의 show():

  1. fittingSize를 최소 120pt로 올려 잡고(min(max(fitting.width, 120), 560)), 그 크기로 setContentSize · setFrameOrigin을 계산합니다.
  2. 이후 NSHostingView가 기본 sizingOptions에 따라 창을 실제 내용 크기(예: 89pt)로 다시 줄입니다.
  3. 줄일 때 왼쪽 끝(origin)은 그대로라서 오른쪽 끝이 120 − 실제 폭만큼 안쪽으로 밀립니다.

같은 원인으로, 토스트가 떠 있는 동안 내용이 바뀌면(상태 전환 등) 창 크기가 컨트롤러 모르게 바뀝니다. PR #7 검증에서 토스트가 사라지기 직전 폭이 2~6pt 바뀌는 현상도 이것으로 보입니다.

영향

  • 기능 문제는 없고 위치가 어긋나 보이는 표시 문제입니다.
  • 폭이 120pt보다 좁은 정답 토스트에서만 발생합니다.

제안

창 크기를 컨트롤러 한 곳에서만 정하게 합니다.

  • ensurePanel()에서 NSHostingView의 자동 크기 조정을 끄고(host.sizingOptions = []), show()가 계산한 크기 · 위치를 그대로 쓰게 합니다.
  • 또는 자동 크기 조정을 유지하되, 크기가 바뀐 뒤 PanelPosition.origin(for:on:margin:)으로 위치를 다시 계산합니다.

확인 방법: 짧은 답 · 긴 답 토스트의 오른쪽 끝이 같은지, 토스트가 떠 있는 동안 창 크기가 컨트롤러가 정한 값에서 바뀌지 않는지 (PR #7에서 쓴 창 크기 기록 방식으로 전후 비교).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions