foobar2000のwsh panel modのサンプルコードその3



テーマ『動作するボタンを作る』。
ボタンが作れるとfoobar2000のインターフェイスが格段に楽になるんじゃないかな。
単純な再生や停止だけではなく、メニューに現れるほぼすべての機能をボタンに出来ます。

まだサンプル画像&サンプルコードをダウンロードしてない人はこちらで。
置き場所はfoobar2000のwsh panel modのサンプルコード {+ foobar2000::カスタマイズ}に書いてあるのでよろしく。


『カーソルを置くと赤くなり、押すと次の曲に演奏が移るボタン』です。Playback/Nextと同等、というかそのものです。sample3.txtを読み込んでください。

スクリプトを晒します。


// ==PREPROCESSOR==
// @name "Sample3 Button"
// @author "Junya Renno"
// ==/PREPROCESSOR==

var imgpath = fb.ProfilePath+"/skin/sample/";

var g_hover = 0;
var button1 = gdi.Image(imgpath+"button_sample_1.png");
var button2 = gdi.Image(imgpath+"button_sample_2.png");

function on_paint(gr){
var button;
if (g_hover == 0){
button = button1;
} else if (g_hover == 1){
button = button2;
}

gr.DrawImage(button,0,0,button1.Width,button1.Height,0,0,button1.Width,button1.Height);
}

function on_mouse_lbtn_down() {
if (g_hover){
fb.RunMainMenuCommand("Playback/Next");
g_hover = 0;
}
}

function on_mouse_move(x,y){
if (x<button1.Width && y<button1.Height){
g_hover = 1;
} else {
g_hover = 0;
}
window.Repaint();
}

function on_mouse_leave(){
g_hover = 0;
window.Repaint();
}


今回説明すべき点は、on_mouse_move(x,y){}でカーソルが入ってきたことを検知してフラグを立て、on_paint(gr){}で画像を切り替えるところです。
on_mouse_leave(){}でカーソルが出て行ったところでフラグを戻します。

1パネル1ボタンであれば、どのボタンを押したか探す手間が省けます。悪くはない手です。
1枚のパネルで複数のボタンを作る場合は、カーソルのx,yを元に分岐処理します。

on_mouse_lbtn_down(){}のブロックに、マウスクリックされた場合の処理を書きます。
簡単な操作系ならfb.Play()とかfb.Stop()とかfb.Next()とかの命令を書けばいいんですが、ちょっと変わった命令をしたいときにはfb.RunMainMenuCommand()を使います。
これはメニューをそのまま実行できる便利なコマンドです。
書式とかはPreferencesのキーボードショートカットでActionのところにでてくる形式です。

ただ、厳密に同じ文字列でないと実行してくれません。Outputデバイスの指定のときに半角空白が何個か混じっていて、ひどく通すのに苦労した経験があります。

モード切替的なボタンのコードはsample4.txtに書きました。
こっちは『赤くなっている時、10秒たったら次の曲に移るボタン』です。
こちらはコールバックにon_playback_time(){}を使い、1秒ごとにチェックしています。


次回は『つまみ付きのボリューム・スライダ』を作ります。


では、また。



 

コメントは日本語でお願いします。(URLは入力禁止:Do not URL writing.) :System message: コメントを受けつけています。