diff options
author | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
---|---|---|
committer | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
commit | 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch) | |
tree | 12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Wasabi/Lib/com | |
parent | 537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff) | |
download | winamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz |
Initial community commit
Diffstat (limited to 'Src/Wasabi/Lib/com')
-rw-r--r-- | Src/Wasabi/Lib/com/AutoRepeatButton.m | 100 | ||||
-rw-r--r-- | Src/Wasabi/Lib/com/centerlayer.m | 84 | ||||
-rw-r--r-- | Src/Wasabi/Lib/com/customseek.m | 118 | ||||
-rw-r--r-- | Src/Wasabi/Lib/com/debug.m | 52 | ||||
-rw-r--r-- | Src/Wasabi/Lib/com/dispatch_ifc.m | 99 | ||||
-rw-r--r-- | Src/Wasabi/Lib/com/dragvolume.m | 67 | ||||
-rw-r--r-- | Src/Wasabi/Lib/com/fillbar.m | 173 | ||||
-rw-r--r-- | Src/Wasabi/Lib/com/glow.m | 111 | ||||
-rw-r--r-- | Src/Wasabi/Lib/com/glowobject.m | 176 | ||||
-rw-r--r-- | Src/Wasabi/Lib/com/rotationlayer.m | 108 | ||||
-rw-r--r-- | Src/Wasabi/Lib/com/songinfo.m | 104 |
11 files changed, 1192 insertions, 0 deletions
diff --git a/Src/Wasabi/Lib/com/AutoRepeatButton.m b/Src/Wasabi/Lib/com/AutoRepeatButton.m new file mode 100644 index 00000000..155ca387 --- /dev/null +++ b/Src/Wasabi/Lib/com/AutoRepeatButton.m @@ -0,0 +1,100 @@ +//-------------------------------------------------------------------------------------------------- +// AutoRepeatButton.m Orginal Code By Will Fisher, Concept By Eric Moore, Rewritten By Will Fisher +// +// Use like this: +// #include </lib/AutoRepeatButton.m> +// Global AutoRepeatButton MyButton, MyOtherButton; +// +// Fill in the buttons function into MyButton.OnLeftClick() as normal. +// +// Use AutoRepeat_ClickType to find the type of call to MyButton.onLeftClick() where +// AutoRepeat_ClickType==1 is the first call to onLeftClick +// AutoRepeat_ClickType==2 is a subsequent call to onLeftClick +// AutoRepeat_ClickType==0 is an erronious call to onLeftClick, you should usually ignore +// MyButton.onLeftClick() in this case +// See other functions below: +//-------------------------------------------------------------------------------------------------- + +Function AutoRepeat_Load(); // ALWAYS call this in System.OnScriptLoaded() +Function AutoRepeat_Unload(); // ALWAYS call this in System.OnScriptUnloading() +Function AutoRepeat_Stop(); // stop the current button from autorepeating + +Function Button AutoRepeat_GetCurrentButton(); /* returns the currently autorepeating button, + returns NULL if no button is autorepeating */ + +Function AutoRepeat_SetInitalDelay(int millis); /* set this for the first delay when the button is + pressed, defaults to 800ms (no need to use this + unless other delay is required) */ + +Function AutoRepeat_SetRepeatDelay(int millis); /* set this for the subsequent delay, defaults to + 80ms (no need to use this unless other delay is + required) */ + +Function Int AutoRepeat_GetInitalDelay(); // get the first delay length in millisecs +Function Int AutoRepeat_GetRepeatDelay(); // get the subsequent delay in millisecs + +Class Button AutoRepeatButton; + +Global Timer _autorepeatTimer; +Global Int _InitialDelay; +Global Int _RepeatDelay; +Global Int AutoRepeat_ClickType; +Global Button _Latched; + +AutoRepeatButton.onLeftButtonDown(int x, int y) { + _Latched = AutoRepeatButton; + AutoRepeat_ClickType = 1; // first click + AutoRepeatButton.leftClick(); + AutoRepeat_ClickType = 0; // no click + _autorepeatTimer.setDelay(_InitialDelay); + _autorepeatTimer.start(); +} + +AutoRepeatButton.onLeftButtonUp(int x, int y) { + _AutoRepeatTimer.Stop(); + _Latched = NULL; +} + +_AutoRepeatTimer.onTimer() { + if(_autorepeatTimer.getDelay() != _RepeatDelay) _autorepeatTimer.setDelay(_RepeatDelay); + AutoRepeat_ClickType = 2; // AutoRepeat + _Latched.LeftClick(); + AutoRepeat_ClickType = 0; // no click +} + +AutoRepeat_Load() { + _autoRepeatTimer = new Timer; + _InitialDelay = 800; + _RepeatDelay = 80; + AutoRepeat_ClickType = 0; +} + +AutoRepeat_Unload() { + delete _autoRepeatTimer; +} + +AutoRepeat_SetInitalDelay(int millis) { + _InitialDelay = millis; +} + + +AutoRepeat_SetRepeatDelay(int millis) { + _RepeatDelay = millis; +} + +AutoRepeat_GetInitalDelay() { + return _InitialDelay; +} + +AutoRepeat_GetRepeatDelay() { + return _repeatDelay; +} + +AutoRepeat_Stop() { + _autorepeatTimer.stop(); + _Latched = NULL; +} + +AutoRepeat_GetCurrentButton() { + return _Latched; +} diff --git a/Src/Wasabi/Lib/com/centerlayer.m b/Src/Wasabi/Lib/com/centerlayer.m new file mode 100644 index 00000000..590f667c --- /dev/null +++ b/Src/Wasabi/Lib/com/centerlayer.m @@ -0,0 +1,84 @@ +// ---------------------------------------------------------------------- +// centerlayer.m +// ---------------------------------------------------------------------- +// by Brennan +// Use like this : +// #define CENTER_VAR MyVar +// Global MyVar; +// #include "centerlayer.h" +// Group l = ; +// MyVar = l.getObject("something"); +// _MyVarInit(Layer MyVar, Group l, int centerx, int centery); +// ---------------------------------------------------------------------- + +Global GuiObject _##CENTER_VAR##Layer; +Global Group _##CENTER_VAR##Group; // parent Layout to center in +Global Int _##CENTER_VAR##centerx; // should we center x? +Global Int _##CENTER_VAR##centery; // should we center y? +Global Int _##CENTER_VAR##addx = 0; +Global Int _##CENTER_VAR##addy = 0; +Global Int _##CENTER_VAR##addh = 0; +Global Int _##CENTER_VAR##addw = 0; + +Function _##CENTER_VAR##Init(GuiObject _layer, Group parentLayout, int centerx, int centery); +Function _##CENTER_VAR##handleResize(); +Function _##CENTER_VAR##setXSpace(int val); +Function _##CENTER_VAR##setYSpace(int val); +Function _##CENTER_VAR##setWSpace(int val); +Function _##CENTER_VAR##setHSpace(int val); +Function _##CENTER_VAR##sizeError(boolean iserror); + +_##CENTER_VAR##Init(GuiObject _layer, Group parentLayout, int centerx, int centery) { + _##CENTER_VAR##Layer = _layer; + _##CENTER_VAR##Group = parentLayout; + _##CENTER_VAR##centerx = centerx; + _##CENTER_VAR##centery = centery; + _##CENTER_VAR##handleResize(); +} + +_##CENTER_VAR##setXSpace(int val) +{ + _##CENTER_VAR##addx = val; +} + +_##CENTER_VAR##setYSpace(int val) +{ + _##CENTER_VAR##addy = val; +} +_##CENTER_VAR##setHSpace(int val) +{ + _##CENTER_VAR##addh = val; +} +_##CENTER_VAR##setWSpace(int val) +{ + _##CENTER_VAR##addw = val; +} + +_##CENTER_VAR##handleResize() { + int myw = _##CENTER_VAR##Group.getWidth(); + int myh = _##CENTER_VAR##Group.getHeight(); + + int layerw = _##CENTER_VAR##Layer.getWidth(); + int layerh = _##CENTER_VAR##Layer.getHeight(); + + int x = _##CENTER_VAR##Layer.getLeft(); + int y = _##CENTER_VAR##Layer.getTop(); + + if (_##CENTER_VAR##centerx) _##CENTER_VAR##Layer.setXmlParam("x", integerToString((myw - layerw)/2 + _##CENTER_VAR##addx + _##CENTER_VAR##addw)); + if (_##CENTER_VAR##centery) _##CENTER_VAR##Layer.setXmlParam("y", integerToString((myh - layerh)/2 + _##CENTER_VAR##addy + _##CENTER_VAR##addh)); + + if (myw < layerw + 2*_##CENTER_VAR##addx - _##CENTER_VAR##addw || myh < layerh + _##CENTER_VAR##addy - _##CENTER_VAR##addh) + { + _##CENTER_VAR##sizeError(TRUE); + } + else + { + _##CENTER_VAR##sizeError(FALSE); + } +} + +_##CENTER_VAR##sizeError(boolean iserror) {} + +_##CENTER_VAR##Group.onResize(int x, int y, int w, int h) { + _##CENTER_VAR##handleResize(); +} diff --git a/Src/Wasabi/Lib/com/customseek.m b/Src/Wasabi/Lib/com/customseek.m new file mode 100644 index 00000000..8b9a1a93 --- /dev/null +++ b/Src/Wasabi/Lib/com/customseek.m @@ -0,0 +1,118 @@ +//---------------------------------------------------------------------------------------- +// +// customseek.m +// +//---------------------------------------------------------------------------------------- +// Use like this : +// #define CUSTOM_SEEK_VAR MyVar +// #include "customseek.m" +// +// +// What you need : +// _MyVarInit(Layer seeksurface, Layer seekghost, Map seekmap); +// _MyVarShutdown(); +// + + + +Global Layer _##CUSTOM_SEEK_VAR##Surface; +Global Layer _##CUSTOM_SEEK_VAR##Ghost; +Global Map _##CUSTOM_SEEK_VAR##Map; +Global Int _##CUSTOM_SEEK_VAR##Clicked; +Global Timer _##CUSTOM_SEEK_VAR##Timer; +Global Int _##CUSTOM_SEEK_VAR##CurPos; + +Function _##CUSTOM_SEEK_VAR##Init(Layer s, Layer g, Map m); +Function _##CUSTOM_SEEK_VAR##Update(int newpos); +Function _##CUSTOM_SEEK_VAR##UpdateXY(int x, int y); +Function _##CUSTOM_SEEK_VAR##SeekTo(int x, int y); +Function _##CUSTOM_SEEK_VAR##Shutdown(); + +_##CUSTOM_SEEK_VAR##Init(Layer s, Layer g, Map m) { + _##CUSTOM_SEEK_VAR##Surface = s; + _##CUSTOM_SEEK_VAR##Ghost = g; + _##CUSTOM_SEEK_VAR##Map = m; + _##CUSTOM_SEEK_VAR##Update(0); + _##CUSTOM_SEEK_VAR##Timer = new Timer; + _##CUSTOM_SEEK_VAR##Timer.setDelay(500); + _##CUSTOM_SEEK_VAR##Timer.start(); +} + +_##CUSTOM_SEEK_VAR##Shutdown() { + delete _##CUSTOM_SEEK_VAR##Timer; +} + +_##CUSTOM_SEEK_VAR##Surface.onLeftButtonDown(int x, int y) { + if (getPlayItemLength() <= 0) return; + if (Strleft(getPlayItemString(), 4) == "http") return; + _##CUSTOM_SEEK_VAR##Clicked = 1; + _##CUSTOM_SEEK_VAR##UpdateXY(x, y); +} + +_##CUSTOM_SEEK_VAR##Surface.onMouseMove(int x, int y) { + if (_##CUSTOM_SEEK_VAR##Clicked) { + if (getPlayItemLength() == 0) { + _##CUSTOM_SEEK_VAR##Clicked = 0; + return; + } + _##CUSTOM_SEEK_VAR##UpdateXY(x, y); + } +} + +_##CUSTOM_SEEK_VAR##Surface.onLeftButtonUp(int x, int y) { + if (!_##CUSTOM_SEEK_VAR##Clicked) return; + _##CUSTOM_SEEK_VAR##Clicked = 0; + _##CUSTOM_SEEK_VAR##SeekTo(x, y); +} + +_##CUSTOM_SEEK_VAR##SeekTo(int x, int y) { + int n = _##CUSTOM_SEEK_VAR##Map.getValue(x, y); + seekTo(getPlayItemLength() * (n / 255)); +} + +_##CUSTOM_SEEK_VAR##UpdateXY(int x, int y) { + int n = _##CUSTOM_SEEK_VAR##Map.getValue(x, y); + Region r = new Region; + r.loadFromMap(_##CUSTOM_SEEK_VAR##Map, n, 1); + r.offset(-_##CUSTOM_SEEK_VAR##Ghost.getLeft(), -_##CUSTOM_SEEK_VAR##Ghost.getTop()); + _##CUSTOM_SEEK_VAR##Ghost.setRegion(r); + #ifdef CUSTOM_SEEK_CALLBACK + int n = _##CUSTOM_SEEK_VAR##Map.getValue(x, y); + _##CUSTOM_SEEK_VAR##OnUpdate(r, getPlayItemLength() * (n / 255)); + #endif + delete r; +} + +_##CUSTOM_SEEK_VAR##Update(int newpos) { + float p; + int l = getPlayItemLength(); + if (l == 0) p = 0; + else p = newpos / l * 255; + Region r = new Region; + r.loadFromMap(_##CUSTOM_SEEK_VAR##Map, p, 1); + _##CUSTOM_SEEK_VAR##CurPos = p; + r.offset(-_##CUSTOM_SEEK_VAR##Ghost.getLeft(), -_##CUSTOM_SEEK_VAR##Ghost.getTop()); + _##CUSTOM_SEEK_VAR##Ghost.setRegion(r); + #ifdef CUSTOM_SEEK_CALLBACK + _##CUSTOM_SEEK_VAR##OnUpdate(r, newpos); + #endif + delete r; +} + +_##CUSTOM_SEEK_VAR##Timer.onTimer() { + if (_##CUSTOM_SEEK_VAR##Clicked) return; + int l = getPlayItemLength(); + if (l > 0) { + int p = getPosition() / l * 255; + if (p != _##CUSTOM_SEEK_VAR##CurPos) { + _##CUSTOM_SEEK_VAR##Update(getPosition()); + } + } else { + if (_##CUSTOM_SEEK_VAR##CurPos != 0) + _##CUSTOM_SEEK_VAR##Update(0); + _##CUSTOM_SEEK_VAR##CurPos = 0; + } +} + + + diff --git a/Src/Wasabi/Lib/com/debug.m b/Src/Wasabi/Lib/com/debug.m new file mode 100644 index 00000000..cca40f07 --- /dev/null +++ b/Src/Wasabi/Lib/com/debug.m @@ -0,0 +1,52 @@ +/*--------------------------------------------------- +----------------------------------------------------- +Filename: debug.m +Version: 1.2 + +Type: maki/attrib loader +Date: 29. Aug. 2006 - 23:43 +Author: Martin Poehlmann aka Deimos +E-Mail: martin@skinconsortium.com +Internet: www.skinconsortium.com + www.martin.deimos.de.vu +----------------------------------------------------- +---------------------------------------------------*/ + +#ifndef included +#error This script can only be compiled as a #include +#endif + +#ifndef DEBUG +#define debugString // +#endif + +#ifdef DEBUG + +#define DEBUG_PREFIX "["+ FILE_NAME +": " + getTimeStamp() + "] " + + +Function String getTimeStamp(); +String getTimeStamp() +{ + int msc = getTimeOfDay(); + int h = msc / 1000 / 3600; + msc -= h * 1000 * 3600; + int m = msc / 1000 / 60; + msc -= m * 1000 * 60; + int s = msc / 1000; + msc -= s * 1000; + string zeros = ""; + if (msc < 100) + { + zeros += "0"; + } + if (msc < 10) + { + zeros += "0"; + } + return integerToString(h)+":"+integerToString(m)+":"+integerToString(s)+"."+zeros+integerToString(msc); +} + +#define D_WTF 9 +#define D_NWTF 9 + +#endif
\ No newline at end of file diff --git a/Src/Wasabi/Lib/com/dispatch_ifc.m b/Src/Wasabi/Lib/com/dispatch_ifc.m new file mode 100644 index 00000000..d87b8612 --- /dev/null +++ b/Src/Wasabi/Lib/com/dispatch_ifc.m @@ -0,0 +1,99 @@ +/** + * dispatch_ifc.m + * + * defines a function interface for dispatchable messaging + * define DISPATCH before loading if you are a message reciever + * + * @author mpdeimos + * @date 2008/10/25 + * @version 0.1 + */ + +#ifndef included +#error This script can only be compiled as a #include +#endif + +Function initDispatcher(); // Call this function on startup to set the parent layout as dispatcher +Function setDispatcher(GuiObject dispatcher); // Call this function instead if you want to define a custom + +#ifndef DISPATCH +// Sends a message to the parent layout +Function int sendMessage(int message, int i0, int i1, int i2, String s0, String s1, GuiObject obj); +Function int sendMessageI(int message, int i0); +Function int sendMessageI2(int message, int i0, int i1); +Function int sendMessageS(int message, String s0); +Function int sendMessageO(int message, GuiObject obj); +Function int sendMessageV(int message); +#endif + +#ifdef DISPATCH +// Recieves Messages +Function int onMessage(int message, int i0, int i1, int i2, String s0, String s1, GuiObject obj); +int onMessage(int message, int i0, int i1, int i2, String s0, String s1, GuiObject obj) {} // STUB! Implement this in your code +#endif + + +/// +/// IMPLEMENTATION +/// + + +Global GuiObject dispatcher; + +initDispatcher() +{ + dispatcher = getScriptGroup().getParentLayout(); +} + +setDispatcher(GuiObject go) +{ + dispatcher = go; +} + + +#ifndef DISPATCH + +int sendMessage(int message, int i0, int i1, int i2, String s0, String s1, GuiObject obj) +{ + return dispatcher.onAction (s0, s1, message, i0, i1, i2, obj); +} + +int sendMessageI(int message, int i0) +{ + GuiObject obj = NULL; + return sendMessage(message, i0, i1, 0, "", "", obj); +} + +int sendMessageI2(int message, int i0, int i1) +{ + GuiObject obj = NULL; + return sendMessage(message, i0, 0, 0, "", "", obj); +} + +int sendMessageS(int message, String s0) +{ + GuiObject obj = NULL; + return sendMessage(message, 0, 0, 0, s0, "", obj); +} + +int sendMessageO(int message, GuiObject obj) +{ + return sendMessage(message, 0, 0, 0, "", "", obj); +} + +int sendMessageV(int messagej) +{ + GuiObject obj = NULL; + return sendMessage(message, 0, 0, 0, "", "", obj); +} + +#endif + +#ifdef DISPATCH + +dispatcher.onAction(String action, String param, Int message, int y, int p1, int p2, GuiObject source) +{ + return onMessage(message, y, p1, p2, action, param, source); +} + +#endif
\ No newline at end of file diff --git a/Src/Wasabi/Lib/com/dragvolume.m b/Src/Wasabi/Lib/com/dragvolume.m new file mode 100644 index 00000000..8b56d6e4 --- /dev/null +++ b/Src/Wasabi/Lib/com/dragvolume.m @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------------------------- +// +// dragvolume.m +// +//---------------------------------------------------------------------------------------- +// Use like this : +// #define DRAG_VOLUME_VAR MyVar +// #include "dragvolume.m" +// +// +// _MyVarInit(AnimatedLayer l); // init dragvolume +// _MyVarSetMaxDistance(Int nPixels); // set 100% pixel distance +// + + + +Global AnimatedLayer _##DRAG_VOLUME_VAR##AnimLayer; +Global Int _##DRAG_VOLUME_VAR##Clicked; +Global Int _##DRAG_VOLUME_VAR##Y; +Global Int _##DRAG_VOLUME_VAR##V; +Global Int _##DRAG_VOLUME_VAR##Max; + +Function _##DRAG_VOLUME_VAR##Init(AnimatedLayer l); +Function _##DRAG_VOLUME_VAR##Update(int vol); +Function _##DRAG_VOLUME_VAR##SetMaxDistance(int pixels); +Function _##DRAG_VOLUME_VAR##UpdateY(int y); + +_##DRAG_VOLUME_VAR##Init(AnimatedLayer l) { + _##DRAG_VOLUME_VAR##AnimLayer = l; + _##DRAG_VOLUME_VAR##Update(getVolume()); +} + +_##DRAG_VOLUME_VAR##AnimLayer.onLeftButtonDown(int x, int y) { + _##DRAG_VOLUME_VAR##Clicked = 1; + _##DRAG_VOLUME_VAR##Y = y; + _##DRAG_VOLUME_VAR##V = getVolume(); +} + +_##DRAG_VOLUME_VAR##AnimLayer.onMouseMove(int x, int y) { + if (_##DRAG_VOLUME_VAR##Clicked) { + _##DRAG_VOLUME_VAR##updateY(y); + } +} + +_##DRAG_VOLUME_VAR##AnimLayer.onLeftButtonUp(int x, int y) { + _##DRAG_VOLUME_VAR##Clicked = 0; +} + +_##DRAG_VOLUME_VAR##SetMaxDistance(int npix) { + _##DRAG_VOLUME_VAR##Max = npix; +} + +_##DRAG_VOLUME_VAR##UpdateY(int y) { + float p = (_##DRAG_VOLUME_VAR##Y - y) / _##DRAG_VOLUME_VAR##Max; + SetVolume(_##DRAG_VOLUME_VAR##V + p * 255); // range is checked +} + +_##DRAG_VOLUME_VAR##Update(int vol) { + float p = vol / 255; + _##DRAG_VOLUME_VAR##AnimLayer.gotoFrame(p * (_##DRAG_VOLUME_VAR##AnimLayer.getLength()-1)); +} + +#ifndef _##DRAG_VOLUME_VAR##NOSYSTEMHOOK +System.onVolumeChanged(int newvol) { + _##DRAG_VOLUME_VAR##Update(newvol); +} +#endif diff --git a/Src/Wasabi/Lib/com/fillbar.m b/Src/Wasabi/Lib/com/fillbar.m new file mode 100644 index 00000000..b28d7f82 --- /dev/null +++ b/Src/Wasabi/Lib/com/fillbar.m @@ -0,0 +1,173 @@ +/** + * fillbar.m + * + * Manages custom fillbars. + * + * @package com.winamp.maki.lib.community.fillbar + * @author mpdeimos + * @date 08/10/01 + * @version 1.0 + */ + +#ifndef included +#error This script can only be compiled as a #include +#endif + +Class Layer FillBar; +// { + Member Map FillBar.fillmap; + Member int FillBar.pos; + Member boolean Fillbar.reverse; + + // User dragging stuff + Member boolean Fillbar.dragable; + Member boolean Fillbar.dragging; + + /** + * constructor + * + * @param layer that should be handled like a fillbar + * @param bitmapID that should be used as region map + * @ret FillBar object + */ + Function FillBar FillBar_construct(Layer l, String bitmapID); + Function FillBar_setMap(FillBar fb, String bitmapID); + + /** + * destructor, always call on script unloading + * + */ + Function FillBar_destruct(FillBar fb); + + /** + * sets the region + * + * @param fillbar to act on + * @param threshold of the map to generate a region + */ + Function FillBar_setPosition(FillBar fb, int threshold); + + /** + * called each time the users drags the fillbar + * + * @param The dragged FillBar + * @param The alue the FillBar was dragged to. + * @ret FALSE if you do not want to allow dragging. + */ + Function boolean FillBar_onDrag(FillBar fb, int pos); + + /* + * called each time the users ends dragging the fillbar + * + * @param The dragged FillBar + * @param The alue the FillBar was dragged to. + * @ret FALSE if you do not want to allow dragging. + */ + Function boolean FillBar_onEndDrag(FillBar fb, int pos); + + + /* + * IMPLEMENTATION + */ + + FillBar FillBar_construct(Layer l, String bitmapID) + { + FillBar fb = l; + fb.reverse = TRUE; + fb.fillmap = new Map; + fb.fillmap.loadMap(bitmapID); + return fb; + } + + FillBar_setMap(Fillbar fb, String bitmapID) + { + if (fb.fillmap != NULL) + { + delete fb.fillmap; + } + + fb.fillmap = new Map; + fb.fillmap.loadMap(bitmapID); + } + + FillBar_destruct(FillBar fb) + { + Map tmp = fb.fillmap; + delete tmp; + } + + FillBar_setPosition(FillBar fb, int threshold) + { + fb.pos = threshold; + fb.setRegionFromMap(fb.fillmap, threshold, fb.reverse); + } + + + // User dragging handles + + FillBar.onLeftButtonDown (int x, int y) + { + if (!FillBar.dragable) + { + return; + } + + Fillbar.dragging = TRUE; + } + + FillBar.onMouseMove (int x, int y) + { + if (!FillBar.dragable || !Fillbar.dragging) + { + return; + } + + int mouseLeft = x - FillBar.getLeft(); + int mouseTop = y - Fillbar.getTop(); + + if (!FillBar.fillMap.inRegion(mouseLeft, mouseTop)) + { + return; + } + + int position = FillBar.fillMap.getValue(mouseLeft, mouseTop); + + int update = FillBar_onDrag(FillBar, position); + + if (update) + { + FillBar_setPosition(FillBar, position); + } + } + + Fillbar.onLeftButtonUp (int x, int y) + { + if (!FillBar.dragable || !Fillbar.dragging) + { + return; + } + + int mouseLeft = x - FillBar.getLeft(); + int mouseTop = y - Fillbar.getTop(); + + int position = FillBar.fillMap.getValue(mouseLeft, mouseTop); + + if (!FillBar.fillMap.inRegion(mouseLeft, mouseTop)) + { + position = fb.pos; + } + + int update = FillBar_onEndDrag(FillBar, position); + + if (update) + { + FillBar_setPosition(FillBar, position); + } + + Fillbar.dragging = FALSE; + } + + // Callback Stubs + boolean FillBar_onDrag(Fillbar fb, int pos) { return TRUE; } + boolean FillBar_onEndDrag(Fillbar fb, int pos) { return TRUE; } +// } diff --git a/Src/Wasabi/Lib/com/glow.m b/Src/Wasabi/Lib/com/glow.m new file mode 100644 index 00000000..12e0406b --- /dev/null +++ b/Src/Wasabi/Lib/com/glow.m @@ -0,0 +1,111 @@ +/*--------------------------------------------------- +----------------------------------------------------- +Filename: glow.m +Version: 1.0 + +Type: maki/glow class +Date: 16. Jun. 2007 - 23:13 +Author: Martin Poehlmann aka Deimos +E-Mail: martin@skinconsortium.com +Internet: www.skinconsortium.com + www.martin.deimos.de.vu + +Usage: 1: #include glow.m + 2: #define GLOW_OBJECT MyGlow + 3: call _MyGlow_GlowInit (someObj, otherObj) + to init the objects. + You can also call _MyGlow_GlowInit (NULL, otherObj) + and load a bunch of GuiObjects in _MyGlow_GlowTrigger + or load up to 5 objects via _MyGlow_addTarget(obj); + +----------------------------------------------------- +---------------------------------------------------*/ + +#ifndef included +#error This script can only be compiled as a #include +#endif + +#ifndef GLOW_OBJECT +#error GLOW_OBJECT not defined! +#endif + +Class GuiObject _##GLOW_OBJECT##_GlowTrigger; +Global _##GLOW_OBJECT##_GlowTrigger _##GLOW_OBJECT##_trigger0, _##GLOW_OBJECT##_trigger1, _##GLOW_OBJECT##_trigger2, _##GLOW_OBJECT##_trigger3, _##GLOW_OBJECT##_trigger4, _##GLOW_OBJECT##_trigger5; +Global GuiObject _##GLOW_OBJECT##_glow; +Global float _##GLOW_OBJECT##_fdoutspeed; +Global boolean _##GLOW_OBJECT##_mouseDown; + +Function _##GLOW_OBJECT##_GlowInit (GuiObject triggerObject, GuiObject glowObject, float fdoutspeed); +Function _##GLOW_OBJECT##_addTrigger (GuiObject triggerObject); + +_##GLOW_OBJECT##_GlowInit (GuiObject triggerObject, GuiObject glowObject, float fdoutspeed) +{ + if (triggerObject) _##GLOW_OBJECT##_trigger0 = triggerObject; + if (glowObject) _##GLOW_OBJECT##_glow = glowObject; + + _##GLOW_OBJECT##_fdoutspeed = fdoutspeed; +} + +_##GLOW_OBJECT##_addTrigger(GuiObject triggerObject) +{ + if (triggerObject) + { + if (!_##GLOW_OBJECT##_trigger1) + { + _##GLOW_OBJECT##_trigger1 = triggerObject; + return; + } + if (!_##GLOW_OBJECT##_trigger2) + { + _##GLOW_OBJECT##_trigger2 = triggerObject; + return; + } + if (!_##GLOW_OBJECT##_trigger3) + { + _##GLOW_OBJECT##_trigger3 = triggerObject; + return; + } + if (!_##GLOW_OBJECT##_trigger4) + { + _##GLOW_OBJECT##_trigger4 = triggerObject; + return; + } + if (!_##GLOW_OBJECT##_trigger5) + { + _##GLOW_OBJECT##_trigger5 = triggerObject; + return; + } + } +} + +_##GLOW_OBJECT##_GlowTrigger.onEnterArea () +{ + _##GLOW_OBJECT##_glow.cancelTarget(); + _##GLOW_OBJECT##_glow.setAlpha(255); +} + +_##GLOW_OBJECT##_GlowTrigger.onLeftButtonDown (int x, int y) +{ + _##GLOW_OBJECT##_mouseDown = 1; + _##GLOW_OBJECT##_glow.cancelTarget(); + _##GLOW_OBJECT##_glow.setAlpha(0); +} + +_##GLOW_OBJECT##_GlowTrigger.onLeftButtonUp (int x, int y) +{ + _##GLOW_OBJECT##_mouseDown = 0; + _##GLOW_OBJECT##_glow.cancelTarget(); + if (_##GLOW_OBJECT##_GlowTrigger.isMouseOverRect()) _##GLOW_OBJECT##_glow.setAlpha(255); +} + +_##GLOW_OBJECT##_GlowTrigger.onLeaveArea () +{ + if (_##GLOW_OBJECT##_mouseDown) return; + _##GLOW_OBJECT##_glow.cancelTarget(); + _##GLOW_OBJECT##_glow.setTargetA(0); + _##GLOW_OBJECT##_glow.setTargetX(_##GLOW_OBJECT##_glow.getGuiX()); + _##GLOW_OBJECT##_glow.setTargetSpeed(_##GLOW_OBJECT##_fdoutspeed); + _##GLOW_OBJECT##_glow.gotoTarget(); +} + +#undef GLOW_OBJECT
\ No newline at end of file diff --git a/Src/Wasabi/Lib/com/glowobject.m b/Src/Wasabi/Lib/com/glowobject.m new file mode 100644 index 00000000..1d4eff3a --- /dev/null +++ b/Src/Wasabi/Lib/com/glowobject.m @@ -0,0 +1,176 @@ +/** + * glowobject.m + * + * @package com.winamp.maki.lib.community.glowobject + * @author mpdeimos + * @date 18/10/01 + * @version 1.0 + */ + + +#ifndef included +#error This script can only be compiled as a #include +#endif + +#define GLOW_TYPE_HOLD 0 +#define GLOW_TYPE_FLASH 1 +#define GLOW_TYPE_BOUNCE 2 + +Class GuiObject GlowLayer; +// { + Member GuiObject GlowLayer.trigger; +// } + +Class GuiObject GlowObject; +// { + Member float GlowObject.fadeInSpeed; + Member float GlowObject.fadeOutSpeed; + Member int GlowObject.glowType; + Member boolean GlowObject.glowing; + + Member GuiObject GlowObject.glow; + + /** + * constructor + * + * @param GuiObject that will be used to trigger the glow on mouse entering it's region + * @param the glowing object + * @ret GlowObject object + */ + Function GlowObject GlowObject_construct(GlowObject trigger, GlowLayer glow); + + /** + * sets fade in time + * + * @param GlowObject to act on + * @param milliseconds till the glow is at alpha 255 + */ + Function GlowObject_setFadeInSpeed(GlowObject go, float ms); + + /** + * sets fade out time + * + * @param GlowObject to act on + * @param milliseconds till the glow is at alpha 0 + */ + Function GlowObject_setFadeOutSpeed(GlowObject go, float ms); + + /** + * sets the glowtype used by this glow button. + * + * @param GlowObject to act on + * @param glowType defined via GLOW_TYPE_* + */ + Function GlowObject_setGlowType(GlowObject go, int glowType); + + + /* + * IMPLEMENTATION + */ + + GlowObject GlowObject_construct(GlowObject trigger, GlowLayer glow) + { + if (trigger == null) + { + debug("trigger"); + } + if (glow == NULL) + { + debug("glow"); + } + + GlowObject go = trigger; + go.fadeInSpeed = 0.3; + go.fadeOutSpeed = 0.5; + go.glow = glow; + go.glowType = GLOW_TYPE_HOLD; + go.glowing = false; + glow.trigger = trigger; + return go; + } + + GlowObject_setFadeInSpeed(GlowObject go, float ms) + { + go.fadeInSpeed = ms; + } + + GlowObject_setFadeOutSpeed(GlowObject go, float ms) + { + go.fadeOutSpeed = ms; + } + + GlowObject_setGlowType(GlowObject go, int glowType) + { + go.glowType = glowType; + } + + GlowObject.onEnterArea () + { + GlowObject.glowing = true; + GlowObject.glow.cancelTarget(); + GlowObject.glow.setTargetA(255); + GlowObject.glow.setTargetSpeed(GlowObject.fadeInSpeed); + GlowObject.glow.gotoTarget(); + } + + GlowObject.onLeaveArea () + { + GlowObject.glowing = false; + if (GlowObject.glowType != GLOW_TYPE_FLASH) + { + GlowObject.glow.cancelTarget(); + GlowObject.glow.setTargetA(0); + GlowObject.glow.setTargetSpeed(GlowObject.fadeOutSpeed); + GlowObject.glow.gotoTarget(); + } + } + + GlowLayer.onTargetReached () + { + GlowObject go = GlowLayer.trigger; + if (go.glowType == GLOW_TYPE_HOLD) + { + return; + } + else if (go.glowType == GLOW_TYPE_FLASH) + { + if (GlowLayer.getAlpha() == 255) + { + GlowLayer.cancelTarget(); + GlowLayer.setTargetA(0); + GlowLayer.setTargetSpeed(GlowObject.fadeOutSpeed); + GlowLayer.gotoTarget(); + } + } + else if (go.glowType == GLOW_TYPE_BOUNCE) + { + if (GlowLayer.getAlpha() == 255) + { + GlowLayer.cancelTarget(); + GlowLayer.setTargetA(0); + GlowLayer.setTargetSpeed(GlowObject.fadeOutSpeed); + GlowLayer.gotoTarget(); + } + else if (GlowLayer.getAlpha() == 0 && go.glowing) + { + GlowLayer.cancelTarget(); + GlowLayer.setTargetA(255); + GlowLayer.setTargetSpeed(GlowObject.fadeInSpeed); + GlowLayer.gotoTarget(); + } + } + } + + GlowObject.onSetVisible (Boolean onoff) + { + if (onoff) + { + GlowObject.glow.show(); + } + else + { + GlowObject.glow.hide(); + } + + } +// } diff --git a/Src/Wasabi/Lib/com/rotationlayer.m b/Src/Wasabi/Lib/com/rotationlayer.m new file mode 100644 index 00000000..7a6b81bf --- /dev/null +++ b/Src/Wasabi/Lib/com/rotationlayer.m @@ -0,0 +1,108 @@ +//---------------------------------------------------------------------------------------- +// +// rotationlayer.m +// +//---------------------------------------------------------------------------------------- +// Use like this : +// #define ROTATION_LAYER_VAR MyVar +// #include "rotationlayer.m" +// +// _MyVarInit(Group parentgroup, String layername); // init rotationlayer +// _MyVarRotateDegree(double r); // in degrees +// _MyVarRotate(double r); // in radians +// double _MyVarGetRotationDegree(); // in degrees +// double _MyVarGetRotation(); // in radians +// + +#ifndef PI +#define PI 3.1415926536 +#endif + +Global Double _##ROTATION_LAYER_VAR##R; +Global Layer _##ROTATION_LAYER_VAR##Layer; + +Function _##ROTATION_LAYER_VAR##Init(Group parentgroup, String layername); +Function _##ROTATION_LAYER_VAR##RotateDegree(double r); +Function _##ROTATION_LAYER_VAR##Rotate(double r); +Function double _##ROTATION_LAYER_VAR##GetRotationDegree(); +Function double _##ROTATION_LAYER_VAR##GetRotation(); + +_##ROTATION_LAYER_VAR##RotateDegree(double r) { + _##ROTATION_LAYER_VAR##Rotate(r * PI / 180.0); +} + +_##ROTATION_LAYER_VAR##Rotate(double r) { + _##ROTATION_LAYER_VAR##R = r; + _##ROTATION_LAYER_VAR##Layer.fx_update(); +} + +double _##ROTATION_LAYER_VAR##GetRotationDegree() { + return _##ROTATION_LAYER_VAR##R * 180 / PI; +} + +double _##ROTATION_LAYER_VAR##GetRotation() { + return _##ROTATION_LAYER_VAR##R; +} + +_##ROTATION_LAYER_VAR##Init(Group parentgroup, String layername) { + _##ROTATION_LAYER_VAR##Layer = parentgroup.getObject(layername); + _##ROTATION_LAYER_VAR##Layer.fx_setGridSize(1,1); + _##ROTATION_LAYER_VAR##Layer.fx_setBgFx(0); + _##ROTATION_LAYER_VAR##Layer.fx_setWrap(1); + _##ROTATION_LAYER_VAR##Layer.fx_setBilinear(1); + _##ROTATION_LAYER_VAR##Layer.fx_setRect(0); + _##ROTATION_LAYER_VAR##Layer.fx_setClear(0); + _##ROTATION_LAYER_VAR##Layer.fx_setLocalized(1); + _##ROTATION_LAYER_VAR##Layer.fx_setRealtime(0); + _##ROTATION_LAYER_VAR##Layer.fx_setEnabled(1); +} + +_##ROTATION_LAYER_VAR##Layer.fx_onGetPixelR(double r, double d, double x, double y) { + return r + _##ROTATION_LAYER_VAR##R; +} + +//--------------------II----------------- +Global Double _##ROTATION_LAYER_VARII##R; +Global Layer _##ROTATION_LAYER_VARII##Layer; + +Function _##ROTATION_LAYER_VARII##Init(Group parentgroup, String layername); +Function _##ROTATION_LAYER_VARII##RotateDegree(double r); +Function _##ROTATION_LAYER_VARII##Rotate(double r); +Function double _##ROTATION_LAYER_VARII##GetRotationDegree(); +Function double _##ROTATION_LAYER_VARII##GetRotation(); + +_##ROTATION_LAYER_VARII##RotateDegree(double r) { + _##ROTATION_LAYER_VARII##Rotate(r * PI / 180.0); +} + +_##ROTATION_LAYER_VARII##Rotate(double r) { + _##ROTATION_LAYER_VARII##R = r; + _##ROTATION_LAYER_VARII##Layer.fx_update(); +} + +double _##ROTATION_LAYER_VARII##GetRotationDegree() { + return _##ROTATION_LAYER_VARII##R * 180 / PI; +} + +double _##ROTATION_LAYER_VARII##GetRotation() { + return _##ROTATION_LAYER_VARII##R; +} + +_##ROTATION_LAYER_VARII##Init(Group parentgroup, String layername) { + _##ROTATION_LAYER_VARII##Layer = parentgroup.getObject(layername); + _##ROTATION_LAYER_VARII##Layer.fx_setGridSize(1,1); + _##ROTATION_LAYER_VARII##Layer.fx_setBgFx(0); + _##ROTATION_LAYER_VARII##Layer.fx_setWrap(1); + _##ROTATION_LAYER_VARII##Layer.fx_setBilinear(1); + _##ROTATION_LAYER_VARII##Layer.fx_setRect(0); + _##ROTATION_LAYER_VARII##Layer.fx_setClear(0); + _##ROTATION_LAYER_VARII##Layer.fx_setLocalized(1); + _##ROTATION_LAYER_VARII##Layer.fx_setRealtime(0); + _##ROTATION_LAYER_VARII##Layer.fx_setEnabled(1); + +} + +_##ROTATION_LAYER_VARII##Layer.fx_onGetPixelR(double r, double d, double x, double y) { + return r + _##ROTATION_LAYER_VAR##R; +} + diff --git a/Src/Wasabi/Lib/com/songinfo.m b/Src/Wasabi/Lib/com/songinfo.m new file mode 100644 index 00000000..30736fb7 --- /dev/null +++ b/Src/Wasabi/Lib/com/songinfo.m @@ -0,0 +1,104 @@ +/*--------------------------------------------------- +----------------------------------------------------- +Filename: songinfo.m +Version: 1.0 + +Type: maki/songinfo loading +Date: 09. Sept. 2008 - 10:02 +Author: Martin Poehlmann aka Deimos +E-Mail: martin@skinconsortium.com +Internet: www.skinconsortium.com +----------------------------------------------------- +---------------------------------------------------*/ + +/** + * This library is still in testing phase + */ + +#ifndef included +#error This script can only be compiled as a #include +#endif + +// use this function to reload songinfo (usually do this on system.onTitleChange()) +Function songinfo_reload(); + +// use this vars to get song information (is faster than function calls) +Global String songinfo_title; +Global String songinfo_artist; +Global String songinfo_album; +Global String songinfo_location; // url or path on your hd +Global String songinfo_displayTitle; + +Global String songinfo_streamTitle; // similar to display title +Global String songinfo_streamName; // name of current stream (station title) +Global String songinfo_streamURL; +Global String songinfo_streamAlbumArt; // _full_ URL to an image on the web, like http://images.play.it/amg/album/cov200/drh200/h238/h23853pph7b.jpg + +Global Boolean songinfo_isStream; // true if current song is a stream + +Global Int songinfo_streamType; // use in conjunction with the values below +#define SONGINFO_STREAMTYPE_SHOUTCAST 2 +#define SONGINFO_STREAMTYPE_AOLRADIO 3 +#define SONGINFO_STREAMTYPE_CBSRADIO 4 +#define SONGINFO_STREAMTYPE_SHOUTCAST2 5 +#define SONGINFO_STREAMTYPE_NOSTREAM 0 +#define SONGINFO_STREAMTYPE_UNKNOWN 666 + +///////////////////////////////////// +// IMPLEMENTATION // DO NOT MODIFY // +///////////////////////////////////// + +songinfo_reload() +{ + // Fill vars with data + songinfo_location = System.getPlayItemString(); + songinfo_displayTitle = System.getPlayItemDisplayTitle(); + + String metaPrefix = ""; // used for streams + + // Check for a stream + songinfo_streamType = stringToInteger(getPlayItemMetaDataString("streamtype")); + songinfo_isStream = (songinfo_streamType > 0); + if (songinfo_isStream) // STREAM! + { + if (!(songinfo_streamType == SONGINFO_STREAMTYPE_SHOUTCAST + || songinfo_streamType == SONGINFO_STREAMTYPE_AOLRADIO + || songinfo_streamType == SONGINFO_STREAMTYPE_CBSRADIO + || songinfo_streamType == SONGINFO_STREAMTYPE_SHOUTCAST2)) + { + songinfo_streamType = SONGINFO_STREAMTYPE_UNKNOWN; + } + + // read stream metadata + songinfo_streamName = getPlayItemMetaDataString("streamname"); + songinfo_streamTitle = getPlayItemMetaDataString("streamtitle"); + songinfo_streamURL = getPlayItemMetaDataString("streamurl"); + + if (songinfo_streamType == SONGINFO_STREAMTYPE_AOLRADIO) + { + metaPrefix = "uvox/"; + } + else if (songinfo_streamType == SONGINFO_STREAMTYPE_CBSRADIO) + { + metaPrefix = "cbs/"; + } + + songinfo_streamAlbumArt = getPlayItemMetaDataString(metaPrefix + "albumart"); + if (songinfo_streamType == SONGINFO_STREAMTYPE_AOLRADIO) + { + songinfo_streamAlbumArt = "http://broadband-albumart.music.aol.com/scan/" + songinfo_streamAlbumArt; + } + } + else //NO STREAM! + { + // resetting stream specific values + songinfo_streamName = ""; + songinfo_streamTitle = ""; + songinfo_streamURL = ""; + songinfo_streamAlbumArt = ""; + } + + songinfo_title = getPlayItemMetaDataString(metaPrefix + "title"); + songinfo_artist = getPlayItemMetaDataString(metaPrefix + "artist"); + songinfo_album = getPlayItemMetaDataString(metaPrefix + "album"); +}
\ No newline at end of file |