winamp/Src/resources/skins/Winamp Modern/scripts/beatvisualization.m

140 lines
3.7 KiB
Objective-C

#include <lib/std.mi>
#include "attribs.m"
Function setObjects();
Global Group frameGroup,beatdisplay;
Global Layer beatOverlay,DisplayRight,DisplayRightOverlay,DisplaySongtickerBG,VisOverlay;
Global Timer refreshEQ;
Global AnimatedLayer beatbarLeft,beatbarRight;
Global int lastBeatLeft,lastBeatRight;
Global Button Toggler,Toggler2;
Global Int dobeat2;
System.onScriptLoaded() {
initAttribs();
frameGroup = getScriptGroup();
beatdisplay = frameGroup.findObject("player.normal.display.beatvisualization");
beatOverlay = frameGroup.findObject("beatdisplayoverlay");
beatbarLeft = frameGroup.findObject("beatleft");
beatbarRight = frameGroup.findObject("beatright");
Toggler = frameGroup.findObject("beatvisualization");
Toggler2 = frameGroup.findObject("beatvisualization2");
DisplayRight = frameGroup.findObject("display.right");
DisplayRightOverlay = frameGroup.findObject("display.right.overlay2");
DisplaySongtickerBG = frameGroup.findObject("display.st.right");
VisOverlay = frameGroup.findObject("visualization.overlay");
lastBeatLeft = 0;
lastBeatRight = 0;
refreshEQ = new Timer;
refreshEQ.setDelay(10);
}
System.onscriptunloading() {
delete refreshEQ;
}
setObjects() {
int group_width = frameGroup.getWidth();
if ( group_width % 2 !=0 ) {
DisplayRight.setXmlParam("image","player.display.right");
DisplayRightOverlay.setXmlParam("image","player.display.right");
DisplaySongtickerBG.setXmlParam("image","player.display.songticker.bg.right");
VisOverlay.setXmlParam("image","player.visualization.overlay");
} else {
DisplayRight.setXmlParam("image","player.display.right2");
DisplayRightOverlay.setXmlParam("image","player.display.right2");
DisplaySongtickerBG.setXmlParam("image","player.display.songticker.bg.right2");
VisOverlay.setXmlParam("image","player.visualization.overlay2");
}
if ( group_width > 480 ) {
int newXpos = (group_width-60)/2;
beatdisplay.setXmlParam("x", IntegerToString(newXpos));
beatdisplay.show();
if ( beatvisualization_attrib.getData()=="1" ) {
refreshEQ.stop();
refreshEQ.start();
} else {
refreshEQ.stop();
beatbarLeft.gotoframe(0);
beatbarRight.gotoframe(0);
}
} else {
beatdisplay.hide();
refreshEQ.stop();
}
}
frameGroup.onResize(int x, int y, int w, int h) {
setObjects();
}
refreshEQ.onTimer() {
int beatLeft= System.getLeftVuMeter();
int beatRight= System.getRightVuMeter();
int frameLeft=beatLeft/16;
int frameRight=beatRight/16;
if (frameLeft>14) frameLeft=14;
if (frameRight>14) frameRight=14;
if (frameLeft<lastBeatLeft) {
frameLeft=lastBeatLeft-1;
if (frameLeft<0) frameLeft=0;
}
if (frameRight<lastBeatRight) {
frameRight=lastBeatRight-1;
if (frameRight<0) frameRight=0;
}
lastBeatLeft=frameLeft;
lastBeatRight=frameRight;
beatbarLeft.gotoframe(frameLeft);
beatbarRight.gotoframe(frameRight);
}
beatvisualization_attrib.onDataChanged() {
setObjects();
}
System.onKeyDown(String key) {
if (key == "shift+ctrl+alt") {
dobeat2 = 1;
complete;
} else dobeat2 = 0;
}
Toggler.onLeftClick() {
if ( beatvisualization_attrib.getData()=="1" ) {
beatvisualization_attrib.setData("0");
} else {
beatvisualization_attrib.setData("1");
}
}
Toggler2.onActivate(boolean on) {
if (!dobeat2) { Toggler.leftClick(); return; }
refreshEQ.stop();
if (on) {
beatbarLeft.setXMLParam("image","player.display.beat.left2");
beatbarRight.setXMLParam("image","player.display.beat.right2");
beatOverlay.hide();
} else {
beatbarLeft.setXMLParam("image","player.display.beat.left");
beatbarRight.setXMLParam("image","player.display.beat.right");
beatOverlay.show();
}
setObjects();
}