本文へスキップ

アイコン

編集toolの操作に同梱icon catalogを使い、atlas uploadとGPU resourceはrenderer側で管理します。

ImKitのicon atlasとicon buttonを表示するGallery画面。

Icons — atlasとlabel付き操作 · Galleryの操作映像を開く

#include <imkit/icons.h>
bool DrawSaveAction(imkit::IconAtlas& icons) {
return imkit::IconButton("save", icons, imkit::IconId::Save, "Save document");
}

例の種別: 完結した関数例です。描画前にatlas textureを登録し、戻り値の操作はアプリ側で処理します。

7種類からatlas sizeを選んでアプリのrendererでuploadし、IconAtlasへ登録します。描画完了後にGPU resourceを解放します。

Iconsはrenderer、image decoder、file検索、OS accessibility bridgeを追加しません。


ImKit は、280種類以上の Lucide ベクターアイコンを埋め込みアトラスとして提供しており、専用のヘッダー <imkit/icons.h> をインクルードすることで利用できます。


アイコンアトラスのテクスチャ生成および GPU への転送はホスト側で行い、描画時に imkit::IconAtlas を渡します:

#include <imkit/icons.h>
#include <imkit/imkit.h>
// 1. 初期化時: GPU テクスチャアトラスの準備
imkit::IconAtlas icons;
for (int size : imkit::IconPixelSizes) {
const auto atlasPixels = imkit::GetIconAtlasPixels(size);
// ホストのグラフィックスAPI(OpenGL / Metal / DirectX)でテクスチャを作成
ImTextureID textureId = HostCreateTexture(atlasPixels.width, atlasPixels.height, atlasPixels.rgba.data());
icons.SetTexture(size, textureId);
}
// 2. フレームループ内での描画
// アイコン単体の描画
imkit::Icon(icons, imkit::IconId::Search, 16);
// ツールバー向けのアイコンボタン(ツールチップ付き)
if (imkit::IconButton("play_btn", icons, imkit::IconId::Play, "再生")) {
// 再生ボタンが押されたときの処理
}
// アイコン+テキストラベル付きボタン
if (imkit::IconActionButton("設定を開く", icons, imkit::IconId::Settings)) {
// 設定ボタンが押されたときの処理
}

  • マルチスケール対応: 12px、16px、20px、24px、32px、48px、64px の7サイズのアトラスがあらかじめ生成されており、表示スケールや DPI に合わせて鮮明に描画されます。
  • テクスチャ未設定時の安全性: テクスチャがまだロードされていない場合や無効な ID が指定された場合でもクラッシュせず、安全に空白領域を確保(またはボタンを無効化)します。
  • テーマカラーへの追従: アイコンの色は theme.semantic.text やボタンの前景カラーに自動的にティントされます。

assets/icons/{12,16,20,24,32,48,64} には 2,016 枚の透過 PNG が、assets/icons/atlases には 7 枚のアトラス画像が収録されています。 アイコンアセットを再構築する場合は、Python 環境で python tools/build_icons.py を実行します。アトラス領域やハッシュ検証は python tools/build_icons.py --check で確認できます(C++ 利用者がビルド時に Python や Pillow を導入する必要はありません)。


Gallery アプリの Icons 画面(ページID: 6)では、全321種類のアイコンカタログをリアルタイム検索し、異なるサイズやテーマでの外観を確認できます。 実装コードは examples/gallery/gallery.cpp を参照してください。

ライセンス条件やアセットの出典情報については THIRD_PARTY_NOTICES.md をご覧ください。