winamp/Src/Wasabi/Lib/com/fillbar.m
2024-09-24 14:54:57 +02:00

174 lines
3.3 KiB
Objective-C

/**
* 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; }
// }