aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/Lib/com/fillbar.m
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Wasabi/Lib/com/fillbar.m')
-rw-r--r--Src/Wasabi/Lib/com/fillbar.m173
1 files changed, 173 insertions, 0 deletions
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; }
+// }