choiminyeong 5e5ef8c36f 플랫폼 최초 커밋 + 자동 업데이트 배포 폴더(dist)
소스(Core/Shell/Launcher)와 실행 PC가 받아갈 업데이트 파일(dist)을 함께 올린다.
Launcher가 켤 때 이 저장소의 dist와 D:\UbisamPlatform\bin을 비교해 새 버전이면 받아간다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-21 21:56:35 +09:00

64 lines
3.9 KiB
Markdown

# 패치 11 — 토스트 메시지 (Success · Fail · Error)
기존 토스트는 판 전체를 상태색으로 채우고 흰 글자를 얹는 방식이라, 셸의 다른 표면과 재질이 달랐고 다크에서 특히 튀었습니다. **판은 셸과 같은 재질로 두고 색은 좌측 3px 바와 아이콘에만** 쓰도록 바꿉니다.
`ToastType` enum(`Info` · `Success` · `Warning` · `Error`)은 그대로입니다. 요청하신 3종은 이렇게 매핑됩니다.
| 요청 | enum | 의미 | 라이트 | 다크 | 아이콘 |
| --- | --- | --- | --- | --- | --- |
| **Success** | `ToastType.Success` | 완료 | `#2E8B4F` | `#5FC97E` | `circle-check` |
| **Fail** | `ToastType.Warning` | 동작이 되지 않음 (예외는 아님) | `#B8791A` | `#E0A63C` | `triangle-alert` |
| **Error** | `ToastType.Error` | 예외 · 시스템 오류 | `#C93B3B` | `#F07070` | `circle-x` |
`Info`는 accent 색 + `circle-info`로 남습니다 — 기존 `ShowToast` 호출이 그대로 동작합니다.
종류마다 **색과 도형을 둘 다** 다르게 했습니다. 색만으로 구분하면 색약 사용자가 성공과 실패를 구별할 수 없습니다.
## 1. 갱신 파일
| 파일 | 변경 |
| --- | --- |
| `src/UbisamBase.Core/Converters/ToastTypeToBrushConverter.cs` | 하드코딩된 색 → 테마 브러시 리소스 조회 |
| `src/UbisamBase.Core/Converters/ToastTypeToGeometryConverter.cs` | **신규** — 종류별 아이콘 |
| `src/UbisamBase.Core/Themes/ShellStyles.xaml` | 새 컨버터 등록 (`ToastTypeToGeometry`) |
| `src/UbisamBase.Core/Shell/ShellWindow.xaml` | 토스트 `ItemTemplate` 교체 |
| `src/UbisamBase.Core/Themes/Colors.Light.xaml` | `Success` `#2E8B4F` / `Warning` `#B8791A` 추가 |
| `src/UbisamBase.Core/Themes/Colors.Dark.xaml` | `Success` `#5FC97E` / `Warning` `#E0A63C` 추가 |
`code/` 아래 같은 경로의 파일을 그대로 덮어쓰세요. `ToastService.cs`와 `ToastMessage.cs`는 손대지 않습니다.
## 2. 쓰는 법 (변화 없음)
```csharp
MessageUtil.ShowSavedToast(logger); // Success
MessageUtil.ShowSuccessToast("검사가 완료되었습니다.", logger); // Success
MessageUtil.ShowWarningToast("값이 허용 범위를 벗어났습니다.", logger); // Fail
MessageUtil.ShowErrorToast("장비 통신이 끊어졌습니다.", logger); // Error
MessageUtil.ShowToast("레시피를 불러왔습니다.", logger); // Info
```
표시 시간은 `ToastService.Show(text, type, durationMs)`의 기본 3000ms입니다. 오류는 더 길게 두는 편이 낫습니다 — 필요하시면 종류별 기본값을 다르게 만들어 드립니다.
## 3. 모양
- 판 배경은 `Sidebar.Background`(라이트 #FFFFFF / 다크 #2A2E34), 1px 헤어라인, 각진 모서리
- 좌측 3px 상태색 바 — 색이 들어가는 유일한 면
- 아이콘 19px, 상태색 스트로크 1.5, 상단 정렬(메시지가 길어도 위에 고정)
- 글자는 본문색 13px/19 — 상태색으로 쓰지 않습니다(가독성)
- 최소 폭 280 / 최대 380, 그림자는 `Ubisam.Effect.Popup`
- 위치는 기존과 같이 우상단, 아래로 8px 간격 쌓임
## 4. 확인
1. 세 종류의 좌측 바 색과 아이콘 도형이 서로 다른지
2. 다크에서 판이 어두운 회색이고 글자가 흰색인지 (색으로 채워진 판이 뜨면 파일이 안 바뀐 것)
3. 여러 개가 동시에 뜰 때 아래로 쌓이는지
4. 3초 후 사라지는지
5. 긴 메시지가 380px에서 줄바꿈되고 아이콘은 위에 고정되는지
6. 테마를 바꾼 뒤 새로 뜬 토스트의 색이 그 테마를 따르는지
## 주의
- 컨버터가 색을 **호출 시점에** 읽으므로, 테마를 바꿔도 이미 떠 있는 토스트는 이전 색입니다. 3초 후 사라지니 실질적인 문제는 없습니다.
- 판 전체를 상태색으로 채우는 이전 방식을 원하시면 알려주세요 — 그 경우 흰 글자 대비를 위해 색을 한 단계 어둡게 조정해야 합니다.