Please help me with great animated buttons coded by user "maklaud from http://foobar2000.ru",
// ==PREPROCESSOR==
// @name "Pulsar Buttons"
// ==/PREPROCESSOR==
var BackColor = 0xff202020;
var FP = fb.FoobarPath + "themes\\Pulsar Buttons\\";
var P = {
STOP:gdi.Image(FP+"stop.png"),
PREV:gdi.Image(FP+"prev.png"),
NEXT:gdi.Image(FP+"next.png"),
PLAY:gdi.Image(FP+"play.png"),
PAUS:gdi.Image(FP+"pause.png")};
var BT = 6; //всего позиций кнопок // number of buttons
var FT = 9; //всего кадров в пикче // frames in picture
var IW = 60; //ширина пикчи // weight of picture
var IH = 540; //высота пикчи // height of picture
var FPS = 30; //скорость анимации (кадров/сек) // animation FPS
var FH = IH/FT; //высота кадра в пикче // height of frame
var TimBefSeek = 400; //пройдёт перед перемоткой, мс. // Time before FW ms
var IntSeek = 200; //время интервала перемотки, мс. // Time interval FW
var TimSeek = 5; //перемотать на, сек. // time FW
var N = {STOP:2, PREV:3, PLAY:4, PAUS:4, NEXT:5}; //порядок кнопок (№ п/п) // buttons order
var f = {STOP:1, PREV:1, PLAY:1, PAUS:1, NEXT:1}; //стартовый кадр // Starting frame
var m = {};
var b = {};
var FrameIntrvl = window.setInterval(Frame, 1000/FPS), BackAheaInt, PrevNextTmt;
var repaint = 0;
function on_paint(gr) {
gr.FillSolidRect(0, 0, ww, wh, BackColor);
gr.DrawImage(P.STOP, NTP(N.STOP), 0, wh, wh, 0, FTP(f.STOP), IW, FH);
gr.DrawImage(P.PREV, NTP(N.PREV), 0, wh, wh, 0, FTP(f.PREV), IW, FH);
gr.DrawImage(P.NEXT, NTP(N.NEXT), 0, wh, wh, 0, FTP(f.NEXT), IW, FH);
if (fb.IsPaused || !fb.IsPlaying) {
gr.DrawImage(P.PLAY, NTP(N.PLAY), 0, wh, wh, 0, FTP(f.PLAY), IW, FH);
} else {
gr.DrawImage(P.PAUS, NTP(N.PAUS), 0, wh, wh, 0, FTP(f.PAUS), IW, FH);
}
}
function on_mouse_move(x,y) {
onY= y<wh&&y>0 ? 1 : 0;
m.STOP = x > NTP(N.STOP) && x < NTP(N.STOP)+wh && onY ? 1 : 0;
m.PREV = x > NTP(N.PREV) && x < NTP(N.PREV)+wh && onY ? 1 : 0;
m.NEXT = x > NTP(N.NEXT) && x < NTP(N.NEXT)+wh && onY ? 1 : 0;
if (fb.IsPaused || !fb.IsPlaying) {
m.PLAY = x > NTP(N.PLAY) && x < NTP(N.PLAY)+wh && onY ? 1 : 0;
m.PAUS = 0;
} else {
m.PAUS = x > NTP(N.PAUS) && x < NTP(N.PAUS)+wh && onY ? 1 : 0;
m.PLAY = 0;
}
}
function on_mouse_leave() {m = {STOP:0, PREV:0, PLAY:0, PAUS:0, NEXT:0};}
function on_mouse_lbtn_down(x,y) {
b = {STOP:m.STOP, PREV:m.PREV, PLAY:m.PLAY, PAUS:m.PAUS, NEXT:m.NEXT};
if (b.PREV||b.NEXT) {PrevNextTmt = window.SetTimeout(PrevNextAbort, TimBefSeek)}
}
function PrevNextAbort() {
b = {PREV:0, NEXT:0};
BackAheaInt = window.SetInterval(function Back() {
if (m.PREV) {fb.PlaybackTime -= TimSeek};
if (m.NEXT) {fb.PlaybackTime += TimSeek};
}, IntSeek);
}
function on_mouse_lbtn_up() {
window.ClearInterval(BackAheaInt);
window.ClearTimeout(PrevNextTmt);
if (b.STOP && m.STOP) {fb.Stop()};
if (b.PREV && m.PREV) {fb.Prev()};
if (b.NEXT && m.NEXT) {fb.Next()};
if (b.PLAY && m.PLAY || b.PAUS && m.PAUS) {fb.PlayOrPause()};
b = {STOP:0, PREV:0, PLAY:0, PAUS:0, NEXT:0};
}
function Frame() {
f.STOP = CalcFrame(m.STOP, b.STOP, f.STOP);
f.PREV = CalcFrame(m.PREV, b.PREV, f.PREV);
f.NEXT = CalcFrame(m.NEXT, b.NEXT, f.NEXT);
f.PLAY = CalcFrame(m.PLAY, b.PLAY, f.PLAY);
f.PAUS = CalcFrame(m.PAUS, b.PAUS, f.PAUS);
if (repaint){window.Repaint();}
repaint= f.STOP!=1||f.PREV!=1||f.NEXT!=1||f.PLAY!=1||f.PAUS!=1 ? 1 : 0;
}
function CalcFrame(m,b,f) {return m?b?FT:f<FT-1?f+1:FT-1:f<=1?1:f<FT&&f>7?f-3:f-1;}
function NTP(n) {return n*(ww/(BT+1))-wh/2;}
function FTP(f) {return (f-1)*FH;}
function on_colors_changed() {window.Repaint();}
function on_size() {
ww = window.Width;
wh = window.Height;
}
I want to make 4 SWITCHING buttons for 4 DSP presets. It would be wonderful if the script saves the state at the open / close of the foobar2000.
Script in attachment: