works fine here. I've added a cover rotation
not perfect but it gives you the way to do it
//VARIABLES=========================
var imgdir = fb.FoobarPath + "images\\jkTurntable\\";
//turntable
var tth = 0;
var ttv = 0;
var ww = window.Width;
var wh = window.Height;
var ang = 0;
var arm = gdi.Image(imgdir + "arm.png");
var tt = gdi.Image(imgdir + "techblank.png");
var ttstop = gdi.Image(imgdir + "tech.png");
var disc = gdi.Image(imgdir + "disc.png");
var nocover = gdi.Image(imgdir + "nocover.png");
//volume
var v_drag = 0;
var volx = 547 + tth;
var voly = 245 + ttv;
var volxmax = volx + 26;
var volymin = 250 + ttv;
var volymax = 400 + ttv;
var travel = 22;
//progress
var px = 360 + tth;
var py = 270 + tth;
var pw = 100;
var ph = 130;
var p_drag = 0;
var pxmin = px - pw;
var pymax = py + ph;
var g_timer;
//album art
AlbumArtId = {
front: 0,
back: 1,
disc: 2,
icon: 3
};
var cover = null;
//BUTTON OBJECT=======================================
button = function () {
this._attrb = {};
this.create = function (path_normal, path_hover, path_down) {
this._attrb.normal = gdi.Image(path_normal);
this._attrb.hover = gdi.Image(path_hover);
this._attrb.down= gdi.Image(path_down);
if (typeof this._attrb.x == "undefined") this._attrb.x= 0;
if (typeof this._attrb.y == "undefined") this._attrb.y= 0;
this._attrb.w = this._attrb.normal.Width;
this._attrb.h= this._attrb.normal.Height;
if (typeof this._attrb.state == "undefined") this._attrb.state=0;
}
this.draw = function (gr, bx, by, alpha) {
var image;
this._attrb.x = bx;
this._attrb.y = by;
switch(this._attrb.state)
{
case 0:
image = this._attrb.normal;
break;
case 1:
image = this._attrb.hover;
break;
case 2:
image = this._attrb.down;
break;
}
gr.DrawImage(image, bx, by, this._attrb.w, this._attrb.h, 0, 0, this._attrb.w, this._attrb.h, 0, alpha);
}
this.checkstate = function (action, x, y) {
switch(action)
{
case "down":
if (x>this._attrb.x && x<this._attrb.x+this._attrb.w && y>this._attrb.y && y<this._attrb.y+this._attrb.h)
{
this._attrb.state=2;
window.Repaint();
} else if (this._attrb.state==2){
this._attrb.state=0;
window.Repaint();
}
break;
case "move":
if (x>this._attrb.x && x<this._attrb.x+this._attrb.w && y>this._attrb.y && y<this._attrb.y+this._attrb.h)
{
this._attrb.state=1;
window.Repaint();
} else if (this._attrb.state==1){
this._attrb.state=0;
window.Repaint();
}
break;
case "up":
if (x>this._attrb.x && x<this._attrb.x+this._attrb.w && y>this._attrb.y && y<this._attrb.y+this._attrb.h)
{
this._attrb.state=1;
} else {
this._attrb.state=0;
}
break;
}
return this._attrb.state;
}
}
//BUTTON VARIABLES=====================================
var btn01 = new button;
var btn02 = new button;
var btn03 = new button;
var btn04 = new button;
var btn05 = new button;
var btn06 = new button;
var btn07 = new button;
var btn08 = new button;
var btndir = imgdir +"buttons\\";
var ButtonStates = {normal: 0,hover: 1,down: 2};
var ww;
var wh;
var angulus;
//PAINT===============================================
function on_paint(gr)
{
var coversize = 405
var slider = gdi.image(imgdir + "volslider.png");
var volume = fb.Volume;
var pos = 135 * ((100+volume)/100);
var sliderhz = (pos * -1) + 135;
gr.DrawImage(nocover, 33 + tth, 31 + ttv, coversize, coversize, 0, 0, nocover.Width, nocover.Height);
cover && gr.DrawImage(cover, 33+ tth, 31 + ttv, coversize, coversize, 0, 0, cover.Width, cover.Height, (angulus>=0 && angulus<=359)?angulus:0);
gr.DrawImage(disc, 33 + tth, 31 + ttv, coversize, coversize, 0, 0, disc.Width, disc.Height);
if(fb.IsPlaying || fb.IsPaused){
gr.DrawImage(tt, tth, ttv, tt.Width, tt.Height, 0, 0, tt.Width, tt.Height);
gr.DrawImage(arm,203 + tth, -193 + ttv, arm.Width, arm.Height, 0, 0, arm.Width, arm.Height,angle = ang)};
else{
gr.DrawImage(ttstop,tth,ttv,ttstop.Width,ttstop.Height,0,0,ttstop.Width,ttstop.Height)};
gr.Drawimage(slider,volx,voly + sliderhz,slider.Width,slider.Height,0,0,slider.Width,slider.Height);
//buttons
//menu
btn01.draw(gr,tth + 545,ttv + 435,255);
//album list
btn02.draw(gr,tth + 20,ttv + 20,255);
//search
btn03.draw(gr,tth + 514,ttv + 435,255);
//stop
btn04.draw(gr,tth + 76,ttv + 441,255);
//prev
btn05.draw(gr,tth + 109,ttv + 441,255);
//playpause
btn06.draw(gr,tth + 538,ttv + 108,255);
//next
btn07.draw(gr,tth + 13,ttv + 409,255);
//playback order
btn08.draw(gr,tth + 13,ttv + 357,255);
}
//SIZE==(create buttons)===================================
function on_size() {
ww = window.Width;
wh = window.Height;
btn01.create(btndir+"menu.png", btndir+"menu1.png", btndir+"menu.png");
btn02.create(btndir+"albumlist.png", btndir+"albumlist1.png", btndir+"albumlist.png");
btn03.create(btndir+"search.png", btndir+"search1.png", btndir+"search.png");
btn04.create(btndir+"stop.png", btndir+"stop1.png", btndir+"stop.png");
btn05.create(btndir+"prev.png", btndir+"prev1.png", btndir+"prev.png");
btn06.create(btndir+"playpause.png", btndir+"playpause1.png", btndir+"playpause.png");
btn07.create(btndir+"next.png", btndir+"next1.png", btndir+"next.png");
btn08.create(btndir+"shuffle.png", btndir+"shuffle1.png", btndir+"shuffle.png");
}
//TIME================================================
function on_playback_time(time)
{
ang = travel * fb.PlaybackTime / fb.PlaybackLength;
if(fb.IsPlaying && !fb.IsPaused) {
btn06.create(btndir+"playpause.png", btndir+"playpause1.png", btndir+"playpause.png");
}
else {
btn06.create(btndir+"playpause.png", btndir+"playpause1.png", btndir+"playpause.png");
}
window.Repaint();
}
//MOUSE LBTN DOWN=====================================
function on_mouse_lbtn_down(x,y){
if(x > volx && x < volxmax && y > volymin && y < volymax){v_drag = 1};
if(x > pxmin && x < px && y > py && y < pymax){p_drag = 1};
//buttons
var state;
if (btn01.checkstate("down",x,y)==ButtonStates.down) {
fb.RunMainMenuCommand("View/Dockable Panels/Activate/1 - Menu");
}
if (btn02.checkstate("down",x,y)==ButtonStates.down) {
fb.RunMainMenuCommand("View/Dockable Panels/Activate/2 - Album list");
}
if (btn03.checkstate("down",x,y)==ButtonStates.down) {
fb.RunMainMenuCommand("Library/Search");
}
if (btn04.checkstate("down",x,y)==ButtonStates.down) {
fb.Stop();
}
if (btn05.checkstate("down",x,y)==ButtonStates.down) {
fb.Prev();
}
if (btn06.checkstate("down",x,y)==ButtonStates.down) {
fb.PlayOrPause();
}
if (btn07.checkstate("down",x,y)==ButtonStates.down) {
fb.Next();
}
if (btn08.checkstate("down",x,y)==ButtonStates.down) {
fb.RunMainMenuCommand("View/Dockable Panels/Activate/3 - Playback order");
}
}
//MOUSE LBTN UP========================================
function on_mouse_lbtn_up(x,y){
on_mouse_move(x,y);
v_drag = 0;
p_drag = 0;
btn01.checkstate("up",x,y);
btn02.checkstate("up",x,y);
btn03.checkstate("up",x,y);
btn04.checkstate("up",x,y);
btn05.checkstate("up",x,y);
btn06.checkstate("up",x,y);
btn07.checkstate("up",x,y);
btn08.checkstate("up",x,y);
window.Repaint();
}
//MOUSE MOVE==========================================
function on_mouse_move(x,y){
if(v_drag){
var v =(y - (voly+115)) / -100;
v = (v<0) ? 0 : (v<1) ? v : 1;
v = -100 * (1-v);
if(fb.Volume != v)
fb.Volume = v;
}
if(p_drag){
var pxx = (x-px) + pw
var v = pxx/pw;
v = (v<0) ? 0 : (v<1) ? v : 1;
fb.PlaybackTime = fb.PlaybackLength - (fb.PlaybackLength * v);
}
btn01.checkstate("move",x,y);
btn02.checkstate("move",x,y);
btn03.checkstate("move",x,y);
btn04.checkstate("move",x,y);
btn05.checkstate("move",x,y);
btn06.checkstate("move",x,y);
btn07.checkstate("move",x,y);
btn08.checkstate("move",x,y);
}
//MOUSE LEAVE==========================================
function on_mouse_leave() {
btn01.checkstate("up",0,0);
btn02.checkstate("up",0,0);
btn03.checkstate("up",0,0);
btn04.checkstate("up",0,0);
btn05.checkstate("up",0,0);
btn06.checkstate("up",0,0);
btn07.checkstate("up",0,0);
btn08.checkstate("up",0,0);
window.Repaint();
}
//MOUSE WHEEL=========================================
function on_mouse_wheel(delta){
if(delta>0)
fb.VolumeUp();
else
fb.VolumeDown();
}
//VOLUME CHANGE=======================================
function on_volume_change(val){
window.Repaint();
}
//SEEK================================================
function on_playback_seek(time){
window.Repaint();
}
//ALBUM ART============================================
function get_album_art(metadb) {
if (metadb)
// Get front cover
return utils.GetAlbumArt(metadb.RawPath, AlbumArtId.front);
}
cover = get_album_art(fb.GetNowPlaying());
//NEW TRACK===========================================
function on_playback_new_track(metadb) {
angulus=0;
cover = get_album_art(metadb);
window.Repaint();
}
function on_playback_stop()
{
if(g_timer){
window.KillTimer(g_timer);
}
window.Repaint();
}
// ==============================================================/ Playback starting
function on_playback_starting(cmd, is_paused)
{
g_timer = window.CreateTimerInterval(33);
window.Repaint();
}
// ==============================================================/ Redraw more than once per sec
function on_timer(id)
{
angulus = (angulus>360)?0:angulus+10;
window.Repaint();
}
//EOF
try it.