# 画面設計書 25-Rendering（レンダリング設定）

## 概要

本ドキュメントは、Windows Terminal のレンダリング設定画面（Rendering）の設計を記述する。GPUアクセラレーション、テキストレンダリングオプションに関する設定を管理するコンパクトな画面である。

### 本画面の処理概要

**業務上の目的・背景**：ターミナルのテキスト描画パフォーマンスを調整するための設定画面である。Graphics APIの選択（Direct3D 11、Direct2D等）、部分無効化の無効化、ソフトウェアレンダリングの有効化など、描画エンジンの挙動を細かく制御できる。GPUドライバーとの互換性問題が発生した場合のトラブルシューティングにも使用される。

**画面へのアクセス方法**：MainPage（設定ナビゲーション）の左側ナビゲーションから「レンダリング」項目をクリックすることでアクセスする。

**主要な操作・処理内容**：
1. Graphics APIの選択（ComboBox で API の種類を選択）
2. 部分無効化の無効化設定（ToggleSwitch）
3. ソフトウェアレンダリングの有効化設定（ToggleSwitch）

**画面遷移**：
- 遷移元：MainPage（設定ナビゲーション）
- 遷移先：なし（MainPageのcontentFrame内で表示される設定ページ）

**権限による表示制御**：特に権限による制御はない。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 82 | 設定の読み込み・保存 | 主機能 | GPUアクセラレーション・テキストレンダリングオプションの設定を編集 |
| 84 | 設定UI | 主機能 | レンダリング設定のUI表示と編集 |
| 90 | Atlas レンダリングエンジン | 補助機能 | Atlasレンダリングエンジン関連の設定 |

## 画面種別

編集（設定）

## URL/ルーティング

UWP/WinUI アプリケーションのためURL/ルーティングは適用されない。MainPage の contentFrame 内に Frame.Navigate で表示される。ナビゲーションパラメータとして RenderingViewModel が渡される。

## 入出力項目

| 項目名 | 入出力 | データ型 | 説明 |
|--------|--------|----------|------|
| CurrentGraphicsAPI | 入出力 | EnumEntry | Graphics API の選択 |
| DisablePartialInvalidation | 入出力 | Boolean | 部分無効化の無効化 |
| SoftwareRendering | 入出力 | Boolean | ソフトウェアレンダリング |

## 表示項目

| 表示領域 | 項目名 | コントロール種別 | 説明 |
|----------|--------|-----------------|------|
| レンダリング設定 | Globals_GraphicsAPI | ComboBox | Graphics API 選択 |
| レンダリング設定 | Globals_DisablePartialInvalidation | ToggleSwitch | 部分無効化の無効化 |
| レンダリング設定 | Globals_SoftwareRendering | ToggleSwitch | ソフトウェアレンダリング |

## イベント仕様

### 1-OnNavigatedTo

MainPage からナビゲートされた時に発火する。ナビゲーションパラメータから RenderingViewModel を取得する。テレメトリログとして "NavigatedToPage" イベント（PageId="rendering"）を記録する。

### 2-各設定項目の変更

各設定項目は x:Bind の Mode=TwoWay で ViewModel と双方向バインドされている。

## データベース更新仕様

### 操作別データベース影響一覧

| 操作（イベント） | 対象テーブル | 操作種別 | 概要 |
|----------------|-------------|---------|------|
| 設定変更 | settings.json（ファイル） | UPDATE | MainPage の SaveButton 経由で全設定を一括保存 |

### テーブル別更新項目詳細

本画面自体は直接ファイルに書き込まない。MainPage の SaveButton 経由で永続化される。

## メッセージ仕様

特になし。

## 例外処理

特になし。

## 備考

- 全3項目のみで構成されるシンプルな設定画面。
- Graphics API はEnumリスト（GraphicsAPIList）から選択する。
- DisablePartialInvalidation と SoftwareRendering はトラブルシューティング用の設定であり、通常はデフォルト値のまま使用される。

---

## コードリーディングガイド

本画面を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: データ構造を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | RenderingViewModel.idl | `src/cascadia/TerminalSettingsEditor/RenderingViewModel.idl` | GraphicsAPIList, DisablePartialInvalidation, SoftwareRendering の3項目を確認する |

#### Step 2: エントリーポイントを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Rendering.cpp | `src/cascadia/TerminalSettingsEditor/Rendering.cpp` | コンストラクタ（行12-15）とOnNavigatedTo（行17-28）を確認。非常にシンプルな構造 |

#### Step 3: XAML レイアウトを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | Rendering.xaml | `src/cascadia/TerminalSettingsEditor/Rendering.xaml` | 3つの SettingContainer のみで構成されるシンプルなレイアウト |

### プログラム呼び出し階層図

```
MainPage._Navigate("Rendering_Nav")
    |
    +-- contentFrame.Navigate(typeof(Rendering), RenderingViewModel)
            |
            +-- Rendering::OnNavigatedTo
                    +-- RenderingViewModel 取得
                    +-- TraceLogging
```

### データフロー図

```
[入力]                        [処理]                      [出力]

RenderingViewModel ---------> Rendering Page       -----> ComboBox / ToggleSwitch
(設定データ)                    |                           |
                                +-- x:Bind TwoWay           +-- ViewModel プロパティ更新
                                                             |
CascadiaSettings -------------> ViewModel           -----> settings.json (MainPage経由)
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Rendering.xaml | `src/cascadia/TerminalSettingsEditor/Rendering.xaml` | テンプレート | UI レイアウト定義 |
| Rendering.cpp | `src/cascadia/TerminalSettingsEditor/Rendering.cpp` | ソース | 初期化・ナビゲーション処理 |
| RenderingViewModel.idl | `src/cascadia/TerminalSettingsEditor/RenderingViewModel.idl` | IDL | ViewModel インターフェース定義 |
| RenderingViewModel.h | `src/cascadia/TerminalSettingsEditor/RenderingViewModel.h` | ソース | ViewModel クラス定義 |
| RenderingViewModel.cpp | `src/cascadia/TerminalSettingsEditor/RenderingViewModel.cpp` | ソース | ViewModel 実装 |
| CommonResources.xaml | `src/cascadia/TerminalSettingsEditor/CommonResources.xaml` | リソース | 共通スタイル定義 |
