174 lines
3.3 KiB
Mathematica
174 lines
3.3 KiB
Mathematica
|
/**
|
||
|
* 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; }
|
||
|
// }
|