coverflow
prerequisite:
- in foobar2000: Library | Search | %tracknumber% IS 01 | Create Playlist
- select all tracks in playlist | rightclick | Utilities | Text Tools | Advanced | Track Pattern: "%path%", | Copy
- open editor (notepad++) | Paste | replace \ by \\ and remove last comma
- Insert created paths in WSH Panel mod script at line 20 (array) | Apply
//coverflow by grimes
//fb2k 1.0+, WSH Panel Mod 1.3.2+ required
//DUI/CUI ready
function RGB(r, g, b) {
return (0xff000000 | (r << 16) | (g << 8) | (b));
}
var dui = window.InstanceType;
//var g_font = gdi.Font("Segoe UI", 12, 0);
var g_font = dui === 1 ? window.GetFontDUI(0) : window.GetFontCUI(0);
//var color = RGB(200,0,0);
var color = dui === 1 ? window.GetColorDUI(2) : RGB(200, 0, 0);
//var color2 = RGB(0,0,0);
var color2 = dui === 1 ? window.GetColorDUI(0) : window.GetColorCUI(0);
var id = 0;
var zz = 0;
var ww = 0,
wh = 0;
var patharray = new Array(
//insert paths
);
var g_img;
var g_img2;
var g_img3;
var g_img4;
var g_img5;
function get_image() {
g_img = utils.GetAlbumArt(patharray[zz], id);
g_img2 = utils.GetAlbumArt(patharray[zz - 2], id);
g_img3 = utils.GetAlbumArt(patharray[zz - 1], id);
g_img4 = utils.GetAlbumArt(patharray[zz + 1], id);
g_img5 = utils.GetAlbumArt(patharray[zz + 2], id);
}
get_image();
function on_paint(gr) {
gr.FillSolidRect(0, 0, ww * 6, wh, dui === 1 ? window.GetColorDUI(1) : window.GetColorCUI(3));
if (g_img && g_img2 && g_img3 && g_img4 && g_img5) {
var scale = 0;
var y = 0;
var scale_w = ww / g_img.Width;
var scale_h = wh / g_img.Height;
if (scale_w * 2 <= scale_h) {
scale = scale_w * 2;
y = (wh - g_img.Height * scale) / 2;
} else {
scale = scale_h;
}
var scale2 = 0;
var y2 = 0;
var scale_w2 = ww / g_img2.Width;
var scale_h2 = wh / g_img2.Height;
if (scale_w2 <= scale_h2) {
scale2 = scale_w2;
y2 = (wh - g_img2.Height * scale2) / 2;
} else {
scale2 = scale_h2;
}
var scale3 = 0;
var y3 = 0;
var scale_w3 = ww / g_img3.Width;
var scale_h3 = wh / g_img3.Height;
if (scale_w3 <= scale_h3) {
scale3 = scale_w3;
y3 = (wh - g_img3.Height * scale3) / 2;
} else {
scale3 = scale_h3;
}
var scale4 = 0;
var y4 = 0;
var scale_w4 = ww / g_img4.Width;
var scale_h4 = wh / g_img4.Height;
if (scale_w4 <= scale_h4) {
scale4 = scale_w4;
y4 = (wh - g_img4.Height * scale4) / 2;
} else {
scale4 = scale_h4;
}
var scale5 = 0;
var y5 = 0;
var scale_w5 = ww / g_img5.Width;
var scale_h5 = wh / g_img5.Height;
if (scale_w5 <= scale_h5) {
scale5 = scale_w5;
y5 = (wh - g_img5.Height * scale5) / 2;
} else {
scale5 = scale_h5;
}
gr.DrawImage(g_img, ww * 3 - g_img.Width * scale / 2, y, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height);
gr.DrawImage(g_img2, 0, y2, g_img2.Width * scale2, g_img2.Height * scale2, 0, 0, g_img2.Width, g_img2.Height);
gr.DrawImage(g_img3, ww, y3, g_img3.Width * scale3, g_img3.Height * scale3, 0, 0, g_img3.Width, g_img3.Height);
gr.DrawImage(g_img4, ww * 5 - g_img4.Width * scale4, y4, g_img4.Width * scale4, g_img4.Height * scale4, 0, 0, g_img4.Width, g_img4.Height);
gr.DrawImage(g_img5, ww * 6 - g_img5.Width * scale5, y5, g_img5.Width * scale5, g_img5.Height * scale5, 0, 0, g_img5.Width, g_img5.Height);
gr.GdiDrawText(zz + 1, g_font, color, 10, 5, window.Width - 10, window.Height, 0x00000010);
} else {
gr.GdiDrawText("error: no stub image path defined", g_font, color2, 10, 5, window.Width - 10, window.Height, 0x00000010);
}
}
function on_size() {
ww = window.Width / 6;
wh = window.Height;
}
function on_playback_stop(reason) {
window.Repaint();
}
function on_mouse_lbtn_down(x, y) {
if (x > ww * 3 && y < wh) {
if (zz === patharray.length - 1) {
zz = 0;
} else if (zz < patharray.length - 1) {
zz += 100;
}
if (zz >= patharray.length - 1) {
zz = patharray.length - 1;
}
}
if (x < ww * 3 && y < wh) {
if (zz === 0) {
zz = patharray.length - 1;
} else if (zz > 0) {
zz -= 100;
}
if (zz < 0) {
zz = 0;
}
}
if (g_img) {
get_image();
}
window.Repaint();
}
function on_mouse_move() {
if (g_img) window.SetCursor(32649);
}
function on_mouse_wheel(delta) {
for (i = 0; i < delta; i++) {
zz++;
}
for (i = 0; i < -delta; i++) {
zz--;
}
if (zz < 0) {
zz = patharray.length - 1
} else if (zz > patharray.length - 1) {
zz = 0;
}
if (g_img) {
get_image();
}
window.Repaint();
}
function on_mouse_rbtn_up(x, y) {
var MF_SEPARATOR = 0x00000800;
var MF_STRING = 0x00000000;
var _menu = window.CreatePopupMenu();
var idx;
_menu.AppendMenuItem(MF_STRING, 1, "cover");
_menu.AppendMenuItem(MF_STRING, 2, "back");
_menu.AppendMenuItem(MF_STRING, 3, "disc");
_menu.AppendMenuItem(MF_STRING, 4, "icon");
_menu.AppendMenuItem(MF_STRING, 5, "artist");
_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
//_menu.AppendMenuItem(MF_STRING, 5, "Properties");
_menu.AppendMenuItem(MF_STRING, 6, "Configure...");
_menu.CheckMenuRadioItem(1, 5, id + 1);
idx = _menu.TrackPopupMenu(x, y);
switch (idx) {
case 1:
id = 0;
break;
case 2:
id = 1;
break;
case 3:
id = 2;
break;
case 4:
id = 3;
break;
case 5:
id = 4;
break;
case 5:
window.ShowProperties();
break;
case 6:
window.ShowConfigure();
}
_menu.Dispose();
if (g_img) {
get_image();
}
window.Repaint();
return true;
}
function on_colors_changed() {
color = dui === 1 ? window.GetColorDUI(2) : RGB(200, 0, 0);
color2 = dui === 1 ? window.GetColorDUI(0) : window.GetColorCUI(0);
window.Repaint();
}
function on_font_changed() {
g_font = dui === 1 ? window.GetFontDUI(0) : window.GetFontCUI(0);
window.Repaint();
}