# 機能設計書 158-EndTooltip

## 概要

本ドキュメントはImGuiのEndTooltip機能について、その処理内容、入出力仕様、実装詳細を記述した機能設計書である。

### 本機能の処理概要

EndTooltipは、BeginTooltip()またはBeginItemTooltip()で開始されたツールチップウィンドウを終了するための関数である。内部でEnd()を呼び出してウィンドウを閉じる。

**業務上の目的・背景**：BeginTooltip()やBeginItemTooltip()とペアで使用され、ツールチップウィンドウを正しく終了させる。ImGuiのBegin/Endパターンに従い、ツールチップの開始関数がtrueを返した場合は必ずEndTooltipを呼び出す必要がある。

**機能の利用シーン**：BeginTooltip()またはBeginItemTooltip()がtrueを返した後、ツールチップ内のコンテンツを配置した後に呼び出す。Popups画面などで使用される。

**主要な処理内容**：
1. 現在のウィンドウがツールチップフラグを持つことをアサーション検証する
2. End()を呼び出してウィンドウを終了する

**関連システム・外部連携**：特になし。

**権限による制御**：特になし。BeginTooltip()またはBeginItemTooltip()が呼ばれていない状態での呼び出しはアサーションエラーとなる。

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 25 | Popups | 補助機能 | ツールチップの終了 |

## 機能種別

レイアウト処理 / 状態管理

## 入力仕様

### 入力パラメータ

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

### 入力データソース

- ImGuiWindow（現在のウィンドウ）

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| (なし) | void | 戻り値なし |

### 出力先

- ウィンドウスタックの状態更新

## 処理フロー

### 処理シーケンス

```
1. アサーション検証
   └─ GetCurrentWindowRead()で現在のウィンドウを取得
   └─ ImGuiWindowFlags_Tooltipフラグを持つことを確認
   └─ 持っていない場合はアサーションエラー

2. ウィンドウの終了
   └─ End()を呼び出し
```

### フローチャート

```mermaid
flowchart TD
    A[開始: EndTooltip] --> B[GetCurrentWindowRead]
    B --> C{Tooltipフラグ?}
    C -->|No| D[アサーションエラー]
    C -->|Yes| E[End]
    E --> F[終了]
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-158-01 | ペア呼び出し | BeginTooltip()またはBeginItemTooltip()がtrueを返した場合のみ呼び出す | 常時 |
| BR-158-02 | フラグ検証 | 現在のウィンドウがTooltipフラグを持つことを検証 | 常時 |

### 計算ロジック

特になし

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

データベース操作なし（UI状態管理のみ）

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | アサーション | ウィンドウがTooltipフラグを持たない | デバッグビルドでアサート |

### リトライ仕様

リトライ不要（フレームごとに再実行）

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

トランザクション管理なし（即時状態更新）

## パフォーマンス要件

- 単一フレーム内でBeginTooltip/BeginItemTooltipに対応して呼び出し
- End()の呼び出しのみのため軽量

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

- 特になし

## 備考

- BeginTooltip()とEndTooltip()は必ずペアで使用する
- BeginItemTooltip()がtrueを返した場合もEndTooltip()を使用する
- 非常にシンプルな関数で、End()を呼び出すだけ

---

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

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

### 推奨読解順序

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | imgui.h | `imgui.h` | 823行目: EndTooltip API宣言を確認 |
| 1-2 | imgui.h | `imgui.h` | ImGuiWindowFlags_Tooltipを確認 |

**読解のコツ**: EndTooltipは非常にシンプルな関数で、アサーション検証とEnd()の呼び出しのみ。

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | imgui.cpp | `imgui.cpp` | 12011-12015行目: EndTooltip関数の実装 |

**主要処理フロー**:
1. **12013行目**: アサーション検証（Tooltipフラグの確認）
2. **12014行目**: End()呼び出し

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

```
ImGui::EndTooltip()
    │
    ├─ GetCurrentWindowRead()
    │      └─ 現在のウィンドウを取得
    │
    ├─ IM_ASSERT()
    │      └─ Tooltipフラグを検証
    │
    └─ End()
           └─ ツールチップウィンドウを閉じる
```

### データフロー図

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

GetCurrentWindowRead() ───> ウィンドウ取得
                                  │
window->Flags ────────────────> Tooltipフラグ検証
                                  │
                                  └──────────────────────────> End()
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| imgui.h | `imgui.h` | ヘッダー | EndTooltip APIの宣言 |
| imgui.cpp | `imgui.cpp` | ソース | EndTooltip実装（12011-12015行目） |
