# API設計書

## 概要

本ドキュメントは、Dear ImGui (v1.92.7 WIP) のC++ APIリファレンスです。Dear ImGuiは即時モードGUI（Immediate Mode GUI）ライブラリであり、ゲームエンジン、ツール、デバッグインターフェースなどで広く使用されています。本ドキュメントでは、ライブラリの主要なパブリックAPI関数、構造体、列挙型について記載しています。

**注意**: Dear ImGuiはHTTPベースのWeb APIではなく、C++プログラミングAPIを提供するライブラリです。

## 共通仕様

### 名前空間

```cpp
namespace ImGui
```

すべてのAPI関数は `ImGui` 名前空間内で提供されます。

### ヘッダーファイル

| ファイル | 説明 |
| --- | --- |
| `imgui.h` | メインAPIヘッダー（エンドユーザー向け） |
| `imgui_internal.h` | 内部API（上級ユーザー向け） |
| `imconfig.h` | コンパイル時設定 |

### バージョン情報

| マクロ | 説明 |
| --- | --- |
| `IMGUI_VERSION` | バージョン文字列 (例: "1.92.7 WIP") |
| `IMGUI_VERSION_NUM` | 数値バージョン (例: 19262) |
| `IMGUI_CHECKVERSION()` | バージョン整合性チェックマクロ |

### 基本データ型

| 型 | 説明 |
| --- | --- |
| `ImGuiID` | ウィジェットの一意識別子 (unsigned int) |
| `ImS8` / `ImU8` | 8ビット符号付き/符号なし整数 |
| `ImS16` / `ImU16` | 16ビット符号付き/符号なし整数 |
| `ImS32` / `ImU32` | 32ビット符号付き/符号なし整数 |
| `ImS64` / `ImU64` | 64ビット符号付き/符号なし整数 |
| `ImVec2` | 2Dベクトル (float x, y) |
| `ImVec4` | 4Dベクトル (float x, y, z, w) |
| `ImTextureID` | バックエンド固有のテクスチャ識別子 (デフォルト: ImU64) |
| `ImTextureRef` | テクスチャ参照 (ImTextureIDまたはImTextureData*) |

## API一覧

| カテゴリ | 関数名 | 説明 |
| --- | --- | --- |
| Context | CreateContext | コンテキストを作成 |
| Context | DestroyContext | コンテキストを破棄 |
| Context | GetCurrentContext | 現在のコンテキストを取得 |
| Context | SetCurrentContext | 現在のコンテキストを設定 |
| Main | GetIO | ImGuiIO構造体を取得 |
| Main | GetStyle | ImGuiStyle構造体を取得 |
| Main | NewFrame | 新しいフレームを開始 |
| Main | EndFrame | フレームを終了 |
| Main | Render | 描画データを生成 |
| Main | GetDrawData | 描画データを取得 |
| Windows | Begin | ウィンドウを開始 |
| Windows | End | ウィンドウを終了 |
| Child Windows | BeginChild | 子ウィンドウを開始 |
| Child Windows | EndChild | 子ウィンドウを終了 |
| Widgets | Button | ボタン |
| Widgets | Checkbox | チェックボックス |
| Widgets | RadioButton | ラジオボタン |
| Widgets | InputText | テキスト入力 |
| Widgets | SliderFloat | フロートスライダー |
| Widgets | DragFloat | フロートドラッグ |
| Widgets | ColorEdit4 | カラーエディター |
| Widgets | TreeNode | ツリーノード |
| Widgets | Selectable | 選択可能アイテム |
| Widgets | BeginCombo | コンボボックス開始 |
| Widgets | BeginTable | テーブル開始 |
| Popups | BeginPopup | ポップアップ開始 |
| Popups | OpenPopup | ポップアップを開く |
| Menus | BeginMenuBar | メニューバー開始 |
| Menus | MenuItem | メニューアイテム |
| Tabs | BeginTabBar | タブバー開始 |
| Tabs | BeginTabItem | タブアイテム開始 |
| Drag & Drop | BeginDragDropSource | ドラッグソース開始 |
| Drag & Drop | BeginDragDropTarget | ドロップターゲット開始 |
| Input | IsKeyDown | キーが押下中か |
| Input | IsMouseDown | マウスボタンが押下中か |
| Drawing | GetWindowDrawList | ウィンドウ描画リスト取得 |

## 各APIエンドポイント定義

### Context Management

#### 1. CreateContext

コンテキストを作成します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API ImGuiContext* CreateContext(ImFontAtlas* shared_font_atlas = NULL)` |
| 戻り値 | ImGuiContext* |
| 必須 | いいえ（自動作成される場合あり） |

**パラメータ**

| パラメータ名 | 型 | 必須 | デフォルト | 説明 |
| --- | --- | --- | --- | --- |
| shared_font_atlas | ImFontAtlas* | - | NULL | 複数コンテキスト間で共有するフォントアトラス |

**使用例**

```cpp
ImGuiContext* ctx = ImGui::CreateContext();
```

---

#### 2. DestroyContext

コンテキストを破棄します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API void DestroyContext(ImGuiContext* ctx = NULL)` |
| 戻り値 | void |

**パラメータ**

| パラメータ名 | 型 | 必須 | デフォルト | 説明 |
| --- | --- | --- | --- | --- |
| ctx | ImGuiContext* | - | NULL | 破棄するコンテキスト（NULLで現在のコンテキスト） |

---

#### 3. GetCurrentContext / SetCurrentContext

現在のコンテキストを取得・設定します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API ImGuiContext* GetCurrentContext()` |
| シグネチャ | `IMGUI_API void SetCurrentContext(ImGuiContext* ctx)` |

---

### Main Functions

#### 4. GetIO

ImGuiIO構造体への参照を取得します。マウス/キーボード入力、時間、設定オプションにアクセスできます。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API ImGuiIO& GetIO()` |
| 戻り値 | ImGuiIO& |

---

#### 5. GetStyle

ImGuiStyle構造体への参照を取得します。スタイル（色、サイズ）にアクセスできます。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API ImGuiStyle& GetStyle()` |
| 戻り値 | ImGuiStyle& |

**注意**: フレーム中にスタイルを変更する場合は、PushStyleColor()、PushStyleVar()を使用してください。

---

#### 6. NewFrame

新しいDear ImGuiフレームを開始します。この呼び出しからRender()/EndFrame()まで任意のコマンドを送信できます。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API void NewFrame()` |
| 戻り値 | void |

---

#### 7. EndFrame

Dear ImGuiフレームを終了します。Render()から自動的に呼び出されます。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API void EndFrame()` |
| 戻り値 | void |

---

#### 8. Render

フレームを終了し、描画データを確定します。その後GetDrawData()を呼び出せます。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API void Render()` |
| 戻り値 | void |

---

#### 9. GetDrawData

描画データを取得します。Render()の後、次のNewFrame()呼び出しまで有効です。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API ImDrawData* GetDrawData()` |
| 戻り値 | ImDrawData* |

---

### Windows

#### 10. Begin

ウィンドウをスタックにプッシュし、追加を開始します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0)` |
| 戻り値 | bool - ウィンドウが折りたたまれているか完全にクリップされている場合false |

**パラメータ**

| パラメータ名 | 型 | 必須 | デフォルト | 説明 |
| --- | --- | --- | --- | --- |
| name | const char* | ○ | - | ウィンドウ名（IDとしても使用） |
| p_open | bool* | - | NULL | クローズボタン用のブール値ポインタ |
| flags | ImGuiWindowFlags | - | 0 | ウィンドウフラグ |

**使用例**

```cpp
if (ImGui::Begin("My Window", &show_window)) {
    ImGui::Text("Hello, World!");
}
ImGui::End(); // 必ず呼び出す
```

**注意**: Begin()の戻り値に関わらず、必ず対応するEnd()を呼び出してください。

---

#### 11. End

ウィンドウをスタックからポップします。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API void End()` |
| 戻り値 | void |

---

### Child Windows

#### 12. BeginChild

子ウィンドウを開始します。独立したスクロール/クリッピング領域を作成します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0, 0), ImGuiChildFlags child_flags = 0, ImGuiWindowFlags window_flags = 0)` |
| 戻り値 | bool |

**パラメータ**

| パラメータ名 | 型 | 必須 | デフォルト | 説明 |
| --- | --- | --- | --- | --- |
| str_id | const char* | ○ | - | 子ウィンドウID |
| size | const ImVec2& | - | ImVec2(0, 0) | サイズ（0で残り全体） |
| child_flags | ImGuiChildFlags | - | 0 | 子ウィンドウフラグ |
| window_flags | ImGuiWindowFlags | - | 0 | ウィンドウフラグ |

---

### Widgets: Text

#### 13. Text

フォーマットされたテキストを表示します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API void Text(const char* fmt, ...)` |
| 戻り値 | void |

**使用例**

```cpp
ImGui::Text("Hello %s, count = %d", name, count);
```

---

#### 14. TextUnformatted

生のテキストを表示します（フォーマットなし）。大量のテキストに推奨されます。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL)` |
| 戻り値 | void |

---

### Widgets: Buttons

#### 15. Button

ボタンを表示します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0, 0))` |
| 戻り値 | bool - 押された場合true |

**パラメータ**

| パラメータ名 | 型 | 必須 | デフォルト | 説明 |
| --- | --- | --- | --- | --- |
| label | const char* | ○ | - | ボタンラベル |
| size | const ImVec2& | - | ImVec2(0, 0) | ボタンサイズ |

---

#### 16. SmallButton

小さいボタン（FramePadding.y == 0）を表示します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API bool SmallButton(const char* label)` |
| 戻り値 | bool |

---

#### 17. Checkbox

チェックボックスを表示します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API bool Checkbox(const char* label, bool* v)` |
| 戻り値 | bool - 値が変更された場合true |

**パラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| label | const char* | ○ | ラベル |
| v | bool* | ○ | チェック状態へのポインタ |

---

### Widgets: Input

#### 18. InputText

テキスト入力フィールドを表示します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = NULL, void* user_data = NULL)` |
| 戻り値 | bool - 値が変更された場合true |

**パラメータ**

| パラメータ名 | 型 | 必須 | デフォルト | 説明 |
| --- | --- | --- | --- | --- |
| label | const char* | ○ | - | ラベル |
| buf | char* | ○ | - | テキストバッファ |
| buf_size | size_t | ○ | - | バッファサイズ |
| flags | ImGuiInputTextFlags | - | 0 | 入力フラグ |
| callback | ImGuiInputTextCallback | - | NULL | コールバック関数 |
| user_data | void* | - | NULL | ユーザーデータ |

---

#### 19. InputFloat

浮動小数点入力フィールドを表示します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, const char* format = "%.3f", ImGuiInputTextFlags flags = 0)` |
| 戻り値 | bool |

---

#### 20. InputInt

整数入力フィールドを表示します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags flags = 0)` |
| 戻り値 | bool |

---

### Widgets: Sliders

#### 21. SliderFloat

フロートスライダーを表示します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* format = "%.3f", ImGuiSliderFlags flags = 0)` |
| 戻り値 | bool |

**パラメータ**

| パラメータ名 | 型 | 必須 | デフォルト | 説明 |
| --- | --- | --- | --- | --- |
| label | const char* | ○ | - | ラベル |
| v | float* | ○ | - | 値へのポインタ |
| v_min | float | ○ | - | 最小値 |
| v_max | float | ○ | - | 最大値 |
| format | const char* | - | "%.3f" | 表示フォーマット |
| flags | ImGuiSliderFlags | - | 0 | スライダーフラグ |

---

#### 22. SliderInt

整数スライダーを表示します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* format = "%d", ImGuiSliderFlags flags = 0)` |
| 戻り値 | bool |

---

### Widgets: Drag

#### 23. DragFloat

フロートドラッグコントロールを表示します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", ImGuiSliderFlags flags = 0)` |
| 戻り値 | bool |

**注意**: v_min >= v_maxの場合、制限なし。Ctrl+クリックで直接入力が可能。

---

### Widgets: Color

#### 24. ColorEdit4

カラーエディターを表示します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0)` |
| 戻り値 | bool |

**パラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| label | const char* | ○ | ラベル |
| col | float[4] | ○ | RGBA値配列 |
| flags | ImGuiColorEditFlags | - | カラー編集フラグ |

---

### Widgets: Trees

#### 25. TreeNode

ツリーノードを表示します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API bool TreeNode(const char* label)` |
| 戻り値 | bool - ノードが開いている場合true |

**注意**: trueを返した場合、TreePop()を呼び出す必要があります。

---

#### 26. CollapsingHeader

折りたたみ可能なヘッダーを表示します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0)` |
| 戻り値 | bool - ヘッダーが開いている場合true |

---

### Widgets: Selectables

#### 27. Selectable

選択可能なアイテムを表示します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0, 0))` |
| 戻り値 | bool - クリックされた場合true |

---

### Widgets: Combo Box

#### 28. BeginCombo / EndCombo

コンボボックスを開始・終了します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0)` |
| シグネチャ | `IMGUI_API void EndCombo()` |

**注意**: EndCombo()はBeginCombo()がtrueを返した場合のみ呼び出します。

---

### Widgets: Tables

#### 29. BeginTable / EndTable

テーブルを開始・終了します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API bool BeginTable(const char* str_id, int columns, ImGuiTableFlags flags = 0, const ImVec2& outer_size = ImVec2(0.0f, 0.0f), float inner_width = 0.0f)` |
| シグネチャ | `IMGUI_API void EndTable()` |

**使用例**

```cpp
if (ImGui::BeginTable("my_table", 3)) {
    ImGui::TableSetupColumn("Name");
    ImGui::TableSetupColumn("Value");
    ImGui::TableSetupColumn("Action");
    ImGui::TableHeadersRow();

    ImGui::TableNextRow();
    ImGui::TableSetColumnIndex(0);
    ImGui::Text("Item 1");

    ImGui::EndTable();
}
```

---

### Popups

#### 30. OpenPopup

ポップアップを開きます。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API void OpenPopup(const char* str_id, ImGuiPopupFlags popup_flags = 0)` |
| 戻り値 | void |

---

#### 31. BeginPopup / EndPopup

ポップアップを開始・終了します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API bool BeginPopup(const char* str_id, ImGuiWindowFlags flags = 0)` |
| シグネチャ | `IMGUI_API void EndPopup()` |

---

#### 32. BeginPopupModal

モーダルポップアップを開始します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0)` |
| 戻り値 | bool |

---

### Menus

#### 33. BeginMenuBar / EndMenuBar

メニューバーを開始・終了します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API bool BeginMenuBar()` |
| シグネチャ | `IMGUI_API void EndMenuBar()` |

---

#### 34. BeginMenu / EndMenu

メニューを開始・終了します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API bool BeginMenu(const char* label, bool enabled = true)` |
| シグネチャ | `IMGUI_API void EndMenu()` |

---

#### 35. MenuItem

メニューアイテムを表示します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true)` |
| 戻り値 | bool - 選択された場合true |

---

### Tab Bars

#### 36. BeginTabBar / EndTabBar

タブバーを開始・終了します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API bool BeginTabBar(const char* str_id, ImGuiTabBarFlags flags = 0)` |
| シグネチャ | `IMGUI_API void EndTabBar()` |

---

#### 37. BeginTabItem / EndTabItem

タブアイテムを開始・終了します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API bool BeginTabItem(const char* label, bool* p_open = NULL, ImGuiTabItemFlags flags = 0)` |
| シグネチャ | `IMGUI_API void EndTabItem()` |

---

### Drag and Drop

#### 38. BeginDragDropSource / EndDragDropSource

ドラッグソースを開始・終了します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0)` |
| シグネチャ | `IMGUI_API void EndDragDropSource()` |

---

#### 39. SetDragDropPayload

ドラッグドロップのペイロードを設定します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t sz, ImGuiCond cond = 0)` |
| 戻り値 | bool |

**パラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| type | const char* | ○ | ペイロードタイプ（最大32文字） |
| data | const void* | ○ | データポインタ |
| sz | size_t | ○ | データサイズ |
| cond | ImGuiCond | - | 条件 |

---

#### 40. BeginDragDropTarget / EndDragDropTarget

ドロップターゲットを開始・終了します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API bool BeginDragDropTarget()` |
| シグネチャ | `IMGUI_API void EndDragDropTarget()` |

---

### Input Functions

#### 41. IsKeyDown / IsKeyPressed / IsKeyReleased

キー入力状態を取得します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API bool IsKeyDown(ImGuiKey key)` |
| シグネチャ | `IMGUI_API bool IsKeyPressed(ImGuiKey key, bool repeat = true)` |
| シグネチャ | `IMGUI_API bool IsKeyReleased(ImGuiKey key)` |

---

#### 42. IsMouseDown / IsMouseClicked / IsMouseReleased

マウス入力状態を取得します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API bool IsMouseDown(ImGuiMouseButton button)` |
| シグネチャ | `IMGUI_API bool IsMouseClicked(ImGuiMouseButton button, bool repeat = false)` |
| シグネチャ | `IMGUI_API bool IsMouseReleased(ImGuiMouseButton button)` |

---

### Item/Widget Query

#### 43. IsItemHovered / IsItemActive / IsItemClicked

アイテム状態をクエリします。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0)` |
| シグネチャ | `IMGUI_API bool IsItemActive()` |
| シグネチャ | `IMGUI_API bool IsItemClicked(ImGuiMouseButton mouse_button = 0)` |

---

### Utilities

#### 44. GetTime / GetFrameCount

時間とフレーム情報を取得します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API double GetTime()` |
| シグネチャ | `IMGUI_API int GetFrameCount()` |

---

#### 45. CalcTextSize

テキストのサイズを計算します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| シグネチャ | `IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f)` |
| 戻り値 | ImVec2 |

---

## フラグ・列挙型

### ImGuiWindowFlags_

ウィンドウフラグ

| フラグ | 値 | 説明 |
| --- | --- | --- |
| ImGuiWindowFlags_None | 0 | なし |
| ImGuiWindowFlags_NoTitleBar | 1 << 0 | タイトルバーを無効化 |
| ImGuiWindowFlags_NoResize | 1 << 1 | リサイズを無効化 |
| ImGuiWindowFlags_NoMove | 1 << 2 | 移動を無効化 |
| ImGuiWindowFlags_NoScrollbar | 1 << 3 | スクロールバーを無効化 |
| ImGuiWindowFlags_NoCollapse | 1 << 5 | 折りたたみを無効化 |
| ImGuiWindowFlags_AlwaysAutoResize | 1 << 6 | 常に自動リサイズ |
| ImGuiWindowFlags_NoBackground | 1 << 7 | 背景を無効化 |
| ImGuiWindowFlags_MenuBar | 1 << 10 | メニューバーあり |
| ImGuiWindowFlags_HorizontalScrollbar | 1 << 11 | 水平スクロールバーを許可 |

### ImGuiInputTextFlags_

テキスト入力フラグ

| フラグ | 値 | 説明 |
| --- | --- | --- |
| ImGuiInputTextFlags_None | 0 | なし |
| ImGuiInputTextFlags_CharsDecimal | 1 << 0 | 数字のみ許可 |
| ImGuiInputTextFlags_CharsHexadecimal | 1 << 1 | 16進数のみ許可 |
| ImGuiInputTextFlags_CharsUppercase | 1 << 3 | 大文字に変換 |
| ImGuiInputTextFlags_CharsNoBlank | 1 << 4 | スペース/タブを除外 |
| ImGuiInputTextFlags_EnterReturnsTrue | 1 << 6 | Enterでtrue返却 |
| ImGuiInputTextFlags_ReadOnly | 1 << 9 | 読み取り専用 |
| ImGuiInputTextFlags_Password | 1 << 10 | パスワードモード |

### ImGuiTreeNodeFlags_

ツリーノードフラグ

| フラグ | 値 | 説明 |
| --- | --- | --- |
| ImGuiTreeNodeFlags_None | 0 | なし |
| ImGuiTreeNodeFlags_Selected | 1 << 0 | 選択状態として描画 |
| ImGuiTreeNodeFlags_Framed | 1 << 1 | 背景付きフレームで描画 |
| ImGuiTreeNodeFlags_DefaultOpen | 1 << 5 | デフォルトで開く |
| ImGuiTreeNodeFlags_Leaf | 1 << 8 | 葉ノード |
| ImGuiTreeNodeFlags_Bullet | 1 << 9 | 矢印の代わりに点 |

### ImGuiKey

キー識別子

| 値 | 説明 |
| --- | --- |
| ImGuiKey_Tab | Tabキー |
| ImGuiKey_LeftArrow | 左矢印 |
| ImGuiKey_RightArrow | 右矢印 |
| ImGuiKey_UpArrow | 上矢印 |
| ImGuiKey_DownArrow | 下矢印 |
| ImGuiKey_Enter | Enterキー |
| ImGuiKey_Escape | Escapeキー |
| ImGuiKey_A - ImGuiKey_Z | A-Zキー |
| ImGuiKey_0 - ImGuiKey_9 | 0-9キー |
| ImGuiKey_F1 - ImGuiKey_F12 | ファンクションキー |
| ImGuiMod_Ctrl | Ctrlモディファイア |
| ImGuiMod_Shift | Shiftモディファイア |
| ImGuiMod_Alt | Altモディファイア |

## 主要構造体

### ImGuiIO

入出力設定・状態を保持する構造体

| メンバー | 型 | 説明 |
| --- | --- | --- |
| ConfigFlags | ImGuiConfigFlags | 設定フラグ |
| BackendFlags | ImGuiBackendFlags | バックエンドフラグ |
| DisplaySize | ImVec2 | 表示サイズ |
| DeltaTime | float | フレーム時間 |
| IniFilename | const char* | 設定ファイル名 |
| MousePos | ImVec2 | マウス位置 |
| MouseDown[5] | bool | マウスボタン状態 |
| MouseWheel | float | マウスホイール |
| KeyCtrl | bool | Ctrl押下状態 |
| KeyShift | bool | Shift押下状態 |
| KeyAlt | bool | Alt押下状態 |
| WantCaptureMouse | bool | ImGuiがマウス入力を要求 |
| WantCaptureKeyboard | bool | ImGuiがキーボード入力を要求 |

### ImGuiStyle

スタイル設定を保持する構造体

| メンバー | 型 | 説明 |
| --- | --- | --- |
| Alpha | float | グローバルアルファ |
| WindowPadding | ImVec2 | ウィンドウパディング |
| WindowRounding | float | ウィンドウ角丸 |
| FramePadding | ImVec2 | フレームパディング |
| FrameRounding | float | フレーム角丸 |
| ItemSpacing | ImVec2 | アイテム間隔 |
| Colors[ImGuiCol_COUNT] | ImVec4 | カラー配列 |

### ImDrawList

描画コマンドリスト

| メソッド | 説明 |
| --- | --- |
| AddLine | 線を描画 |
| AddRect | 矩形を描画 |
| AddRectFilled | 塗りつぶし矩形を描画 |
| AddCircle | 円を描画 |
| AddCircleFilled | 塗りつぶし円を描画 |
| AddText | テキストを描画 |
| AddImage | 画像を描画 |

## バックエンド

Dear ImGuiは以下のバックエンドをサポートしています。

### プラットフォームバックエンド

| ファイル | プラットフォーム |
| --- | --- |
| imgui_impl_glfw | GLFW |
| imgui_impl_sdl2 | SDL2 |
| imgui_impl_sdl3 | SDL3 |
| imgui_impl_win32 | Win32 |
| imgui_impl_osx | macOS |
| imgui_impl_android | Android |

### レンダラーバックエンド

| ファイル | レンダラー |
| --- | --- |
| imgui_impl_opengl2 | OpenGL 2 |
| imgui_impl_opengl3 | OpenGL 3+ |
| imgui_impl_vulkan | Vulkan |
| imgui_impl_dx9 | DirectX 9 |
| imgui_impl_dx10 | DirectX 10 |
| imgui_impl_dx11 | DirectX 11 |
| imgui_impl_dx12 | DirectX 12 |
| imgui_impl_metal | Metal |
| imgui_impl_wgpu | WebGPU |

## 備考

- Dear ImGuiは即時モードGUIパラダイムを採用しており、状態はライブラリ内部で管理されます
- すべてのウィジェット関数は `ImGui::` 名前空間で呼び出します
- Begin/End系の関数は必ずペアで呼び出す必要があります
- 詳細なドキュメントとサンプルコードは `imgui_demo.cpp` を参照してください
- 最新情報は公式リポジトリ https://github.com/ocornut/imgui を確認してください
