VST GUIにおけるコンボボックスコントロールの実装
VST GUIにおいてコンボボックスコントロールを実装する方法を説明いたします。
なお、VST GUIの基本的な作成方法として下記をご理解いただいている前提で進めさせていただきます。
コンボボックスコントロールは下記のようなコントロールです。クリックして表示されるポップアップからメニューアイテムを選択することで操作します。
コンボボックスは一番上のアイテムを選んだときにに値が0.0、一番下のアイテムを選んだときに値が1.0になります。
今回作成するコンボボックスは3つのアイテムがあるので、それぞれ「0.0」「0.5」「1.0」の値となります。
(4つのアイテムなら「0.0」「0.33…」「0.66…」「1.0」、5つのアイテムなら「0.0」「0.25」「0.5」「0.75」「1.0」、のようになります。)
コンボボックスコントロールを実装するには、VST GUIクラスのopen()関数内でコンボボックスコントロールを生成する処理を追記いたします。
コントロールを生成する処理は関数にしております。関数作成自体は必須ではありませんが、複数のコントロールを作る場合などに便利なためです。
【guieditor.cpp】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
CControl* MyVSTGUIEditor::createCombobox(ParamID tag, int x, int y, UTF8String item[], int itemnum) { // コンボボックスコントロールを作成する // コントロールのサイズを設定(サイズは適当) CRect size; size(0, 0, 60, 16); size.offset(x, y); // 位置を設定(frameの左上が0,0となる) // コントロール作成 COptionMenu* control = new COptionMenu(size, this, tag); // コントロールに選択肢(アイテム)を追加する for (int i = 0; i < itemnum; i++) { control->addEntry(item[i]); } // パラメータの現在の値を取得し、コントロールに反映 ParamValue value = controller->getParamNormalized(tag); control->setValueNormalized(value); // 小型フォントを指定 control->setFont(kNormalFontSmaller); // 文字色・背景色を設定 control->setFontColor(kWhiteCColor); control->setBackColor(kBlackCColor); control->setFrameColor(kRedCColor); // コントロールをフレームに登録 frame->addView(control); // 作成したコントロールのポインタを返す return control; } |
createCombobox()関数の引数には、パラメータータグ(ID)、座標(x、y)、メニューアイテムの文字列配列(UTF-8)、メニューアイテム数を指定するようにしています。
(UTF8StringクラスはVST GUIで定義されたUTF-8の文字列用のクラスになります。std::stringのような使い方のできるクラスです。詳細は割愛します。)
createCombobox()関数ではまず、コンボボックスコントロールのサイズをCRect sizeに設定します。
また、このsizeはコントロールサイズだけでなくフレーム上の配置位置も兼ねています。CRectのoffset()関数を使用して位置を設定します。
配置位置・サイズが決まれば、コンボボックスコントロール用のクラスであるCOptionMenuクラスを作成します。
COptionMenuクラスのコンストラクタには、「サイズ」「VST GUIクラスのポインタ」「パラメータータグ(ID)」の順に指定します。
これでコンボボックスコントロールが作成できるので、次はコンボボックスコントロールにaddEntry()関数を使用してアイテムを追加します。
アイテムを追加した後はパラメータの現在の値をコンボボックスコントロールに反映します。
最後は必要に応じてフォントや文字・背景色等を設定し、フレームに登録すれば表示させることができます。
今回はSDKで定義済みのフォントと色を指定しています。定義済みフォントと色は下記に一覧を記載しております。
作成したコントロール生成処理関数がコントロールのポインタを返すのは、後で他のコントロールと同期させたりするのに利用するためです。
また、VST GUIクラスのopen()関数内での呼び出しは下記のようにします。
注意点として、指定する文字列はダブルクォーテーションの前に「u8」プレフィックスを付けてUTF-8の文字列としてください。
(VST GUIでは文字列をUTF-8で扱っているためです。)
【guieditor.cpp】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
bool PLUGIN_API MyVSTGUIEditor::open(void* parent, const PlatformType& platformType) { // GUIウィンドウが開かれたときに、UIを作成する ~~ 中略 ~~ // --------------------------------------------- // ここから各コントロールの作成 UTF8String items[3] = { u8"Item 1", u8"Item 2", u8"Item 3" }; createCombobox(1, 10, 10, items, 3); ~~ 中略 ~~ // GUIウィンドウのオープンに成功した場合はtrueを返す return true; } |
以上でコンボボックスコントロールを追加することができます。
上記以外にもVST3.6についての情報があります。下記をご参照ください。
また、質問やご指摘はコメント欄や掲示板、Twitterでいただけばとおもいます。
■掲示板
■Twitterアカウント:@vstcpp URL:https://twitter.com/vstcppps://twitter.com/vstcpp”>https://twitter.com/vstcpp