本文へスキップ

ImKit 4.0 API

4.0で公開APIに加わったものと、その置き場所をまとめます。どれも描画の呼び出しです。値、状態、寿命はアプリが持ち、返ってきた要求もアプリが処理します。既定値の変更と、なくなった転送は移行ガイドにあります。

ヘッダー CMakeターゲット 追加するもの Galleryの画面
imkit/theme.h imkit::imkit MakeBrandTheme、BrandPalette、SetCornerStyle、PushTextRole、SerializeTheme、ParseTheme、枠線(アウトライン)、硬い影 Theme Studio
imkit/skin.h imkit::imkit Skin: ボタン、バッジ、カードの枠を差し替える Skins
imkit/charts.h imkit::imkit DonutChart、BarChart、Gauge、Sparkline、ChartColor Charts
imkit/ptz.h imkit::imkit PtzControl: パン、チルト、ズーム、プリセット PTZ camera
imkit/range_slider.h imkit::imkit RangeSlider、RangeSliderInt Numbers and units
imkit/components.h imkit::imkit DrawShadow、IMKIT_DEPRECATED、AxisVector3Field、CompactIconActionButton Before / After、Workspace
imkit/workflow.h imkit::imkit BeginCollapsibleInspectorCard、EndCollapsibleInspectorCard、HierarchyRowView::accentColor Workspace
imkit/show.h imkit::show 操作部品、キューリスト、ミキサー、ルール、スケジュール、ビート、スクリプト、画像、コントロールサーフェス、LED、アドレス Show

MakeBrandTheme は、4色から、コントロールの状態、選択色、補助文字、枠線を導きます。文字と枠線は、どの面の上でも読めるように保たれます。結果は ValidateContrast で確かめてください。値が低くても警告で、そのテーマは使えます。

#include <imkit/imkit.h>
imkit::BrandPalette brand;
brand.canvas = {0.063f, 0.067f, 0.075f, 1};
brand.surface = {0.102f, 0.106f, 0.118f, 1};
brand.text = {0.925f, 0.933f, 0.945f, 1};
brand.accent = {0.471f, 0.839f, 0.776f, 1};
auto theme = imkit::MakeBrandTheme(brand);
imkit::SetCornerStyle(theme, imkit::CornerStyle::Round);
theme.elevation.hard = true; // ずらして重ねる、硬い影
theme.elevation.offset = {0, 3};
imkit::ApplyTheme(theme, 1.0f); // ImGui::NewFrame() より前

テーマはテキストでも表せます。SerializeTheme(theme) が key = value の行を書き出し、ParseTheme(text, theme) がそれを適用します。未知のキーは警告つきで読み飛ばし、残りの行は止めません。ImKitはファイルを読みません。読み込みはアプリが行います。キーの一覧は自分の世界観を作るにあります。

スキンが差し替えるのは、部品の枠と背景だけです。ラベル、アイコン、フォーカスリング、アクセシビリティ、入力、戻り値は、ImKitが担当します。テーマを受け取る部品(ComponentOptions::theme)にスキンが効きます。

static bool DrawFrame(const imkit::SkinFrame& f, void* user) {
if (f.part != imkit::SkinPart::Button) return false; // 既定の描画のまま
f.draw->AddRect(f.min, f.max, IM_COL32(120, 214, 198, 255), f.rounding, 0, 2.f);
return true;
}
imkit::Skin skin{&DrawFrame, nullptr};
theme.skin = &skin; // theme.fonts と同じく、所有しない

グラフ、カメラ操作、範囲スライダー

Section titled “グラフ、カメラ操作、範囲スライダー”
呼び出し 戻り値 備考
DonutChart(id, view, layout, options) クリックした区間、なければ-1 ホバーで区間が膨らみ、値を表示する。
BarChart(id, view, layout, options) クリックした棒、なければ-1 縦・横、格子、値ラベルを選べる。
Gauge(id, view, layout, options) ゾーンでリングの色が変わる。負の割合は「取得できない」表示になる。
Sparkline(id, view, layout, options) 最後の点を強調し、ホバーで値を表示する。
PtzControl(id, view, state, layout, options) PtzRequest カメラを動かすのはアプリ。操作部は速度とプリセットの要求を返す。
RangeSlider(label, &low, &high, min, max, ...) 変化したフレームでtrue つまみは2つ。帯をドラッグすると両方が動く。
const std::array<imkit::ChartDatum, 3> usage{{{"Render", 44}, {"Cache", 25}, {"Decode", 15}}};
imkit::DonutChart("storage", {usage, "84 GB", "Used"});
static float low = 20, high = 80;
imkit::RangeSlider("Range", &low, &high, 0, 100, "%.0f");

imkit::show は任意のモジュールで、imkit::show をリンクして使います。操作部品(Fader、Knob、XYPad、PadGrid、MeterBar、HoldButton)、ライブ部品(CueList、GoBar、ClipLauncher、Mixer、EffectRack)、コードなしの RuleBuilder、スケジュール、ビート、スクリプトパネル、画像ボタン、自由に並べる ControlSurface、LED、DMXのアドレス用の部品を含みます。連続値の部品は ValueEdit を返します。部品ごとの説明と所有の規則は、Showガイドにあります。

ImKitがすること アプリが持ち続けるもの
描画し、要求(PtzRequest、GoBarRequest、グラフのクリック)を返す カメラ、キューの進行、グラフの元データ
呼び出しの間だけ Skin と Theme を読む その両方の寿命、フォントアトラス
渡されたテーマのテキストを解析する テーマファイルの読み書き