- Код: Выделить всё
//=== OPTIONS ===
var SwitchArts = 1;
var SwitchTime = 15;
//============
function RGB(r,g,b){ return (0xff000000|(r<<16)|(g<<8)|(b)); }
var g_fso = new ActiveXObject("Scripting.FileSystemObject");
var img_nocower = gdi.Image(fb.ComponentPath.replace("components","images") + "nocover.png");
var img_case = gdi.Image(fb.ComponentPath.replace("components","images") + "case.png");
var cp, px, py, ex, exx, step = 0;
var g_CurrentCover = null;
var g_CoverList = new Array();
function GetAlbumArts(path){
path = path.replace(/^file:\/\//, "");
var files = new Array();
var search = function(array, dir){
var e = new Enumerator(dir.Files);
while( !e.atEnd())
{
var name = e.item().Name.toLowerCase();
if(name.match(/\.jpg$/) || name.match(/\.png$/) || name.match(/\.jpeg$/))
array.push( e.item() );
e.moveNext();
}
}
try{
var dir = g_fso.GetFile(path).ParentFolder;
search(files, dir);
var e = new Enumerator(dir.SubFolders);
for(; !e.atEnd(); e.moveNext())
search(files, e.item());
}catch(e){
fb.trace(e.message);
}
if(files.length < 1)
return null;
else
return files;
}
function GetNextCP(c){
c++;
while(c > g_CoverList.length - 1)
c = c - g_CoverList.length;
return c;
}
function GetPrevCP(c){
c--;
while(c < 0)
c = c + g_CoverList.length;
while(c > g_CoverList.length - 1)
c = c - g_CoverList.length;
return c;
}
//===
if(fb.IsPlaying){
if(g_CoverList.length < 1) {
cp = 0;
g_CoverList = new GetAlbumArts(fb.GetNowPlaying().path);
g_CurrentCover = g_CoverList[cp];
}
}
//===
function on_paint(gr){
var ww = window.Width;
var wh = window.Height;
if(g_CurrentCover)
var img = gdi.Image(g_CurrentCover);
else
var img = img_nocower;
gr.DrawImage(img, 0,0, ww,wh, 0,0, img.Width, img.Height);
gr.DrawImage(img_case, -9,-6, ww+90,wh+18, 0,0, 275, 202);
if(ex){
var w1 = img.Width/ww;
var h1 = img.Height/wh;
var w2 = img.Width/6;
var h2 = img.Height/6;
if(px > ww - 36) var cx = ww - 36;
else if(px < 35) var cx = 35;
else var cx = px;
if(py > wh - 36) var cy = wh - 36;
else if(py < 35) var cy = 35;
else var cy = py;
var gx = (cx - 35) * ((ww - 31) / (ww - 71));
var gy = (cy - 35) * ((wh - 31) / (wh - 71));
gr.DrawImage(img, cx-35,cy-35, 70,70, gx*w1,gy*h1 ,w2,h2);
gr.DrawRect(cx-35,cy-35, 70,70, 1.0, RGB(150,150,150));
}
if(exx){
var imgnext = gdi.Image(g_CoverList[GetNextCP(cp)]);
var imgprev = gdi.Image(g_CoverList[GetPrevCP(cp)]);
gr.DrawImage(imgnext, ww-26,wh-26, 25,25, 0,0, imgnext.Width, imgnext.Height);
gr.DrawImage(imgprev, 1,wh-26, 25,25, 0,0, imgprev.Width, imgprev.Height);
}
}
function on_playback_new_track(info){
step = 0;
ex = 0;
exx = 0;
cp = 0;
g_CoverList = new GetAlbumArts(info.path);
g_CurrentCover = g_CoverList[cp];
window.Repaint();
}
function on_playback_time(time){
if(SwitchArts && (g_CoverList.length > 1)){
step++;
if(step == SwitchTime){
step = 0;
if(!ex){
cp = GetNextCP(cp);
g_CurrentCover = g_CoverList[cp];
window.Repaint();
}
}
}
}
function on_mouse_move(x, y){
var ww = window.Width;
var wh = window.Height;
var b = false;
if(x < 0) px = 0;
else if(x > ww) px = ww;
else px = x;
if(y < 0) py = 0;
else if(y > wh) py = wh;
else py = y;
if(g_CoverList.length > 1){
if(((px > 1) && (px < 26)) && ((py > wh - 26) && (py < wh - 1))){
if(!exx && !ex) {
b = true;
exx = -1;
}
}else if(((px > ww - 26) && (px < ww - 1)) && ((py > wh - 26) && (py < wh - 1))){
if(!exx && !ex) {
b = true;
exx = 1;
}
}else
if(exx){
exx = 0;
b = true;
}
}
if(ex || b) window.Repaint();
}
function on_mouse_lbtn_down(x, y){
px = x;
py = y;
if(!exx ){
ex = true;
window.Repaint();
}
}
function on_mouse_lbtn_up(x, y){
if(ex) step = 0;
ex = false;
if(exx == 1){
step = 0;
cp = GetNextCP(cp);
g_CurrentCover = g_CoverList[cp];
}else if(exx == -1){
step = 0;
cp = GetPrevCP(cp);
g_CurrentCover = g_CoverList[cp];
}
window.Repaint();
}
//EOF
при наведении мыши на нижние углы ковера появляются 2 кнопки в виде уменьшенных последующего и предыдущего ковера (см. скрин). При нажатии ковер меняется =) Если количество коверов < 1, то кнопки не появляются
При просмотре ковера через лупу кнопки тоже не появляются.
Update1: переписал скрипт, убрал неприятный глюк
Update2: исправил глюк с лупой, теперь она работает как в самой первой версии. Добавил автоматическую прокрутку артов, настройка в начале скрипта.