# 機能設計書 54-GetFontSize

## 概要

本ドキュメントは、ImGuiライブラリのGetFontSize関数の設計仕様を定義する。GetFontSizeは現在のフォントサイズ（ピクセル単位の高さ）を取得するための機能であり、グローバルスケール係数が適用された後の値を返す。

### 本機能の処理概要

GetFontSize関数は、現在のImGuiコンテキストで使用されているフォントのサイズ（ピクセル単位の高さ）を返す。この値はグローバルスケール係数（FontScaleMain、FontScaleDpi等）が適用された後の実効サイズである。

**業務上の目的・背景**：GUIアプリケーションでは、テキストのレイアウト計算やカスタムウィジェットの描画において、実際に描画されるフォントサイズを知る必要がある。GetFontSizeはスケーリング適用後の実効サイズを返すため、正確なピクセル単位のレイアウト計算が可能となる。

**機能の利用シーン**：
- テキストの高さに基づいたレイアウト計算
- カスタムウィジェットのサイズ決定
- 行間隔の計算
- UIアイテムのサイズ調整

**主要な処理内容**：
1. グローバルコンテキストから現在のフォントサイズを取得
2. フォントサイズ（float）を返却

**関連システム・外部連携**：スタイルシステムと連携し、FontScaleMain、FontScaleDpi等のスケーリング係数を反映した値を返す。

**権限による制御**：特になし。すべてのコンテキストで利用可能。

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 8 | Font Atlas | 主機能 | フォントサイズの取得 |

## 機能種別

参照 / 状態取得

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| なし | - | - | パラメータなし | - |

### 入力データソース

- ImGuiContext.FontSize（スケーリング後のフォントサイズ）

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| fontSize | float | 現在のフォントサイズ（ピクセル単位の高さ、スケーリング適用後） |

### 出力先

- 呼び出し元への戻り値

## 処理フロー

### 処理シーケンス

```
1. グローバルコンテキストの参照
   └─ GImGuiを参照
2. 現在のフォントサイズを返却
   └─ GImGui->FontSizeを返す
```

### フローチャート

```mermaid
flowchart TD
    A[開始] --> B[GImGuiコンテキスト参照]
    B --> C[GImGui->FontSizeを返却]
    C --> D[終了]
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-54-01 | スケーリング適用済み | 返される値はグローバルスケール係数適用後の値 | 常時 |
| BR-54-02 | PushFont非引数 | この値をPushFontに渡すとスケーリングが二重適用される | 常時 |
| BR-54-03 | 基本サイズ参照 | スケーリング前の値はstyle.FontSizeBaseを使用 | 常時 |

### 計算ロジック

フォントサイズの計算式：
```
GetFontSize() = style.FontSizeBase * style.FontScaleMain * style.FontScaleDpi * その他スケーリング係数
```

## データベース操作仕様

該当なし（メモリ内操作のみ）

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | - | コンテキスト未初期化 | CreateContext()を先に呼び出す |

### リトライ仕様

該当なし

## トランザクション仕様

該当なし（メモリ内操作のみ）

## パフォーマンス要件

- 単純な値参照のため、O(1)の時間計算量
- インライン化可能な軽量実装

## セキュリティ考慮事項

特になし

## 備考

- **重要**: GetFontSize()の値をPushFont()に渡してはならない。スケーリングが二重適用される
- スケーリング前の値が必要な場合はImGui::GetStyle().FontSizeBaseを使用する
- PushFont/PopFontによりフォントが変更されると、GetFontSizeの戻り値も変わる

---

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

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

### 推奨読解順序

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

フォントサイズの管理方法を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | imgui.h | `imgui.h` | GetFontSize関数シグネチャとコメント（524行目） |

**読解のコツ**: コメントに「AFTER global scale factors applied」「DO NOT PASS THIS VALUE TO PushFont()」という重要な注意書きがある。

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

GetFontSize関数の実装を確認する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | imgui.cpp | `imgui.cpp` | GetFontSize関数の実装（8660-8666行目） |

**主要処理フロー**:
1. **8660-8662行目**: 関数コメント（スケーリング適用後の値であることの説明）
2. **8665行目**: GImGui->FontSizeを返却

#### Step 3: 関連情報を理解する

スケーリング係数との関係を確認する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | imgui.h | `imgui.h` | ImGuiStyle構造体のFontSizeBase, FontScaleMain, FontScaleDpi |

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

```
ImGui::GetFontSize()
    │
    └─ return GImGui->FontSize
```

### データフロー図

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

なし                ───▶ GImGui->FontSize参照      ───▶ float (ピクセル)

[スケーリング計算]
style.FontSizeBase
        ↓
    * FontScaleMain
        ↓
    * FontScaleDpi
        ↓
    * その他係数
        ↓
= GImGui->FontSize ───▶ GetFontSize()戻り値
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| imgui.h | `imgui.h` | ヘッダー | GetFontSize関数の宣言（524行目） |
| imgui.cpp | `imgui.cpp` | ソース | GetFontSize関数の実装（8663-8666行目） |
