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

75 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 패치 04 — 입력 컨트롤 · 표 스타일
TextBox / ComboBox / CheckBox / Button / ListBox / ListView(GridView) 를 셸과 같은 도면 톤으로 맞춥니다.
각진 모서리 · 1px 헤어라인 · 포커스는 accent 테두리 + 옅은 글로우. 라이트/다크 모두 토큰으로 전환됩니다.
전부 **암시적 스타일**(`x:Key` 없음)이라 각 View를 고칠 필요가 없습니다 — 셸 안의 모든 해당 컨트롤에 자동 적용됩니다.
예외를 두려면 그 컨트롤에 `Style="{x:Null}"`을 주세요.
## 1. 새 파일
`src/UbisamBase.Core/Themes/Controls.xaml` — 이 프로젝트의 `code/UbisamBase.Core/Themes/Controls.xaml`을 그대로 복사하세요.
## 2. `Themes/ShellStyles.xaml`
머지 목록에 Controls.xaml을 추가하고, ComboBox 드롭다운 그림자를 정의합니다.
```xml
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/UbisamBase.Core;component/Themes/Icons.xaml"/>
<ResourceDictionary Source="pack://application:,,,/UbisamBase.Core;component/Themes/Controls.xaml"/>
</ResourceDictionary.MergedDictionaries>
```
```xml
<DropShadowEffect x:Key="Ubisam.Effect.Popup" BlurRadius="12" ShadowDepth="3" Direction="270" Opacity="0.22" Color="#000000"/>
```
## 3. `Themes/Colors.Light.xaml` / `Colors.Dark.xaml`
입력·표 토큰을 추가합니다 (`code/`의 두 파일에 이미 들어 있습니다).
| 키 | 라이트 | 다크 |
| --- | --- | --- |
| `Ubisam.Brush.Input.Background` | #FFFFFF | #1B1D23 |
| `Ubisam.Brush.Input.Border` | #C9C9CC | #33363E |
| `Ubisam.Brush.Input.BorderHover` | #A8A8AC | #4A4E57 |
| `Ubisam.Brush.Input.DisabledBackground` | #EDEDEF | #191A1F |
| `Ubisam.Brush.Input.DisabledBorder` | #DEDEE1 | #26282F |
| `Ubisam.Color.AccentGlow` (Color) | #2196F3 | #22D3EE |
| `Ubisam.Brush.Table.HeaderBackground` | #EDEDEF | #1B1D23 |
| `Ubisam.Brush.Table.RowBorder` | #EDEDEF | #1F2127 |
## 4. 버튼 종류
암시적 Button은 **보조(외곽선)** 입니다. 주 동작에는 키를 지정하세요.
```xml
<Button Content="저장" Command="{Binding SaveCommand}" Style="{StaticResource Ubisam.Style.Button.Primary}"/>
<Button Content="되돌리기" Style="{StaticResource Ubisam.Style.Button.Ghost}"/>
```
`AllSettingsView.xaml`의 "저장" 버튼에 Primary를 적용하고, 거기 붙어 있는 `Padding="14,6"`은 지우세요(스타일이 정합니다).
## 5. 확인
1. `설정 → 설정값` 화면의 TextBox/ComboBox/CheckBox가 각진 모양으로 바뀌고, 클릭 시 테두리가 accent로 변하는지
2. ComboBox를 열면 드롭다운이 입력창 아래에 붙고, 선택 항목이 accent 채움인지
3. `로그` 화면 표의 헤더가 회색 판 + 1px 경계, 행 hover/선택이 accent 틴트인지
4. 다크 테마로 바꿨을 때 입력창 배경이 `#1B1D23`으로 함께 바뀌는지
5. 비활성 컨트롤이 흐리게(45%) 보이는지
## 주의
- `Controls.xaml`은 폰트 리소스를 `DynamicResource`로 참조합니다. `StaticResource`로 바꾸면 머지 시점 때문에 로드가 실패합니다.
- 암시적 `ListBox`/`ListBoxItem` 스타일이 추가되지만, 하단 탭과 서브탭 바는 `Style`/`ItemContainerStyle`을 명시적으로 지정하고 있어 영향받지 않습니다.
- `ScrollBar`와 `Slider`는 이번 패치에 없습니다 — 필요하면 알려주세요.
## 6. 아이콘 세트 갱신 (Icons.xaml 재발행)
`Themes/Icons.xaml`을 Lucide 원본 경로 기준으로 다시 만들었습니다. 이전 버전은 손으로 근사한 도형이라 실제 Lucide와 미세하게 달랐습니다 — `code/UbisamBase.Core/Themes/Icons.xaml`을 그대로 덮어쓰세요.
- 좌표계·스트로크 규칙은 동일(24×24, 1.5, 둥근 캡)해서 XAML 다른 곳은 고칠 필요가 없습니다.
- 리소스 키(`Ubisam.Icon.Home` 등)와 `AddMain`에 넘기는 이름도 그대로입니다.
- SVG 원본은 `icons/` 폴더에 있고, 각 아이콘의 Lucide 이름은 `icons/readme.md` 표에 적어뒀습니다. 새 아이콘은 그 이름으로 lucide.dev에서 찾아 추가하세요.