// Note:
// to use this, you FIRST call configureSliderVisuals, then configureSliderValues
-#ifdef INTERFACE
-CLASS(Slider) EXTENDS(Label)
+#ifndef ITEM_SLIDER_H
+#define ITEM_SLIDER_H
+#include "label.qc"
+CLASS(Slider, Label)
METHOD(Slider, resizeNotify, void(entity, vector, vector, vector, vector))
METHOD(Slider, configureSliderVisuals, void(entity, float, float, float, string))
METHOD(Slider, configureSliderValues, void(entity, float, float, float, float, float, float))
ATTRIB(Slider, value, float, 0)
ATTRIB(Slider, animated, float, 1)
ATTRIB(Slider, sliderValue, float, 0)
+ ATTRIB(Slider, sliderAnim, entity, world)
ATTRIB(Slider, valueMin, float, 0)
ATTRIB(Slider, valueMax, float, 0)
ATTRIB(Slider, valueStep, float, 0)
void Slider_setValue(entity me, float val)
{
if (me.animated) {
- anim.removeObjAnim(anim, me);
- makeHostedEasing(me, Slider_setSliderValue, easingQuadInOut, 1, me.sliderValue, val);
+ float t = 0.5;
+ if(me.pressed == 2)
+ t = 0.3; // slightly more responsive while dragging the handle
+ if(!me.sliderAnim)
+ me.sliderAnim = makeHostedEasing(me, Slider_setSliderValue, easingQuadOut, t, me.sliderValue, val);
+ else
+ me.sliderAnim.update(me.sliderAnim, t, me.sliderValue, val);
} else {
me.setSliderValue(me, val);
}
float Slider_mouseDrag(entity me, vector pos)
{
float hit;
- float v, animed;
+ float v;
if(me.disabled)
return 0;
- anim.removeObjAnim(anim, me);
- animed = me.animated;
- me.animated = false;
-
if(me.pressed)
{
hit = 1;
if(pos.y >= 1 + me.tolerance.y) hit = 0;
if(hit)
{
+ // handle dragging
+ me.pressed = 2;
+
v = median(0, (pos.x - me.pressOffset - 0.5 * me.controlWidth) / (1 - me.textSpace - me.controlWidth), 1) * (me.valueMax - me.valueMin) + me.valueMin;
if(me.valueStep)
v = floor(0.5 + v / me.valueStep) * me.valueStep;
me.setValue(me, me.previousValue);
}
- me.animated = animed;
-
return 1;
}
float Slider_mousePress(entity me, vector pos)
else
draw_Picture(eX * controlLeft, strcat(me.src, "_n"), eX * me.controlWidth + eY, me.color, 1);
}
+
+ if(me.sliderAnim)
+ if(me.sliderAnim.isFinished(me.sliderAnim))
+ {
+ anim.removeObjAnim(anim, me);
+ me.sliderAnim = world;
+ }
+
me.setText(me, me.valueToText(me, me.value));
draw_alpha = save;
SUPER(Slider).draw(me);