横型スライダーコントロールのスタイルの変更
「横型スライダーの実装」で実装したスライダーはハンドルが右にある時に1.0、左にある時に0.0となります。
UIを作成する上で、逆の方向(ハンドルが左にある時に0.0、右にある時に1.0)にしたい場合があります。
このような場合は、CHorizontalSliderクラスのsetStyle()関数を使用します。setStyle()関数には下記のどちらかを引数として指定します。
引数 | 意味 |
---|---|
kRight | kHorizontal | スライダーハンドルが右にある時に1.0、左にある時に0.0となる (デフォルトはこちら) |
kLeft | kHorizontal | スライダーハンドルが左にある時に0.0、右にある時に1.0となる |
【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 37 38 39 |
CControl* MyVSTGUIEditor::createHSlider(ParamID tag, int x, int y) { // 横型スライダーコントロールの作成 // まずは画像ファイルを読み込む CBitmap *backbmp = new CBitmap("slider_h.png"); CBitmap *handlebmp = new CBitmap("slider_h_handle.png"); // 画像ファイルからサイズを取得する CRect size; size(0, 0, backbmp->getWidth(), backbmp->getHeight()); size.offset(x, y); // 位置を設定(frameの左上が0,0となる) // コントロールの作成 // スライダーハンドルはスライダー背景画像の上から下まで動かないよう、 // 若干のマージンを持たせる。このマージンは画像によって変わる int bmpmargin = 1; CHorizontalSlider* control = new CHorizontalSlider(size, this, tag, x + bmpmargin, x + backbmp->getWidth() - (handlebmp->getWidth() + bmpmargin), handlebmp, backbmp); // コントロールのスタイルを変更し、ハンドルの動きを左から右に control->setStyle(kLeft | kHorizontal); // パラメータの現在の値を取得し、コントロールに反映 ParamValue value = controller->getParamNormalized(tag); control->setValueNormalized(value); // スライダーをフレームに登録 frame->addView(control); // 読み込んだ画像は忘れず解放 backbmp->forget(); handlebmp->forget(); // 作成したコントロールのポインタを返す return control; } |
CHorizontalSliderクラスのコンストラクタに指定する「最大時のハンドル位置」「最小時のハンドル位置」(横型スライダーの実装 参照)は変更する必要はありません。
以上です。
上記以外にもVST3.6についての情報があります。下記をご参照ください。
また、質問やご指摘はコメント欄や掲示板、Twitterでいただけばとおもいます。
■掲示板
■Twitterアカウント:@vstcpp URL:https://twitter.com/vstcpp
どうしてもスライダーの増減方向を変えたくてあれこれ探していたらすでにうつぼかずらさんが記事にされていてとても助かりました。
しかしどういうわけかウチではkLeft、kHorizontalともに「定義されていません」と出てしまい、
cslider.hを見たら
private:
enum StyleEnum
{
StyleHorizontal = 0,
StyleVertical,
StyleLeft,
StyleRight,
StyleTop,
StyleBottom,
};
public:
enum Style
{
kHorizontal = 1 << StyleHorizontal,
kVertical = 1 << StyleVertical,
kLeft = 1 << StyleLeft,
kRight = 1 << StyleRight,
kTop = 1 << StyleTop,
kBottom = 1 << StyleBottom,
};
と書かれていたので、setStyle(kLeft | kHorizontal);を
setStyle(4 | 1);と置き換えてビルドしたら行けました。
すっかり忘れていましたが、VST2.4で作ってた時に「おま環」対処みたいなのがとても多かったのを思い出してきました・・・。
猫十さん
どこかのSDKバージョンで変わったようですね…。
kLeftやkHorizontalがCSliderBaseクラス内で定義されているので、
指定の際は「CSliderBase::kLeft」のように名前空間を指定すると大丈夫だと思います。