]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/menu/item/slider.c
Merge remote-tracking branch 'origin/terencehill/misc_bugfixes'
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / item / slider.c
index c5605affed01261268c976ac7ff581ebf84a201a..8861357b7700590438a82362ea8a7ece71a7a1fb 100644 (file)
@@ -10,6 +10,7 @@ CLASS(Slider) EXTENDS(Label)
        METHOD(Slider, mousePress, float(entity, vector))
        METHOD(Slider, mouseDrag, float(entity, vector))
        METHOD(Slider, mouseRelease, float(entity, vector))
+       METHOD(Slider, focusEnter, void(entity))
        METHOD(Slider, valueToText, string(entity, float))
        METHOD(Slider, toString, string(entity))
        METHOD(Slider, setValue, void(entity, float))
@@ -44,43 +45,43 @@ ENDCLASS(Slider)
 #endif
 
 #ifdef IMPLEMENTATION
-void setValueSlider(entity me, float val)
+void Slider_setValue(entity me, float val)
 {
        if (me.animated) {
-               anim.finishObjAnim(anim, me);
-               makeHostedEasing(me, setSliderValueSlider, easingQuadInOut, 1, me.sliderValue, val);
+               anim.removeObjAnim(anim, me);
+               makeHostedEasing(me, Slider_setSliderValue, easingQuadInOut, 1, me.sliderValue, val);
        } else {
                me.setSliderValue(me, val);
        }
        me.value = val;
 }
-void setSliderValueSlider(entity me, float val)
+void Slider_setSliderValue(entity me, float val)
 {
        me.sliderValue = val;
 }
-string toStringSlider(entity me)
+string Slider_toString(entity me)
 {
-       return strcat(ftos(me.value), " (", me.valueToText(me, me.value), ")");
+       return sprintf(_("%d (%s)"), me.value, me.valueToText(me, me.value));
 }
-void resizeNotifySlider(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
+void Slider_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
 {
-       resizeNotifyLabel(me, relOrigin, relSize, absOrigin, absSize);
+       SUPER(Slider).resizeNotify(me, relOrigin, relSize, absOrigin, absSize);
        me.controlWidth = absSize_y / absSize_x;
 }
-string valueToTextSlider(entity me, float val)
+string Slider_valueToText(entity me, float val)
 {
        if(almost_in_bounds(me.valueMin, val, me.valueMax))
                return ftos_decimals(val * me.valueDisplayMultiplier, me.valueDigits);
        return "";
 }
-void configureSliderVisualsSlider(entity me, float sz, float theAlign, float theTextSpace, string gfx)
+void Slider_configureSliderVisuals(entity me, float sz, float theAlign, float theTextSpace, string gfx)
 {
-       configureLabelLabel(me, string_null, sz, theAlign);
+       SUPER(Slider).configureLabel(me, string_null, sz, theAlign);
        me.textSpace = theTextSpace;
        me.keepspaceLeft = (theTextSpace == 0) ? 0 : (1 - theTextSpace);
        me.src = gfx;
 }
-void configureSliderValuesSlider(entity me, float theValueMin, float theValue, float theValueMax, float theValueStep, float theValueKeyStep, float theValuePageStep)
+void Slider_configureSliderValues(entity me, float theValueMin, float theValue, float theValueMax, float theValueStep, float theValueKeyStep, float theValuePageStep)
 {
        me.value = theValue;
        me.sliderValue = theValue;
@@ -97,13 +98,13 @@ void configureSliderValuesSlider(entity me, float theValueMin, float theValue, f
        if(fabs(floor(me.valueStep * 1 + 0.5) - (me.valueStep * 1)) < 0.01) // about a whole number
                me.valueDigits = 0;
 }
-float keyDownSlider(entity me, float key, float ascii, float shift)
+float Slider_keyDown(entity me, float key, float ascii, float shift)
 {
        float inRange;
        if(me.disabled)
                return 0;
        inRange = (almost_in_bounds(me.valueMin, me.value, me.valueMax));
-       if(key == K_LEFTARROW)
+       if(key == K_LEFTARROW || key == K_KP_LEFTARROW || key == K_MWHEELUP)
        {
                if(inRange)
                        me.setValue(me, median(me.valueMin, me.value - me.valueKeyStep, me.valueMax));
@@ -111,7 +112,7 @@ float keyDownSlider(entity me, float key, float ascii, float shift)
                        me.setValue(me, me.valueMax);
                return 1;
        }
-       if(key == K_RIGHTARROW)
+       if(key == K_RIGHTARROW || key == K_KP_RIGHTARROW || key == K_MWHEELDOWN)
        {
                if(inRange)
                        me.setValue(me, median(me.valueMin, me.value + me.valueKeyStep, me.valueMax));
@@ -119,7 +120,7 @@ float keyDownSlider(entity me, float key, float ascii, float shift)
                        me.setValue(me, me.valueMin);
                return 1;
        }
-       if(key == K_PGUP)
+       if(key == K_PGUP || key == K_KP_PGUP)
        {
                if(inRange)
                        me.setValue(me, median(me.valueMin, me.value - me.valuePageStep, me.valueMax));
@@ -127,7 +128,7 @@ float keyDownSlider(entity me, float key, float ascii, float shift)
                        me.setValue(me, me.valueMax);
                return 1;
        }
-       if(key == K_PGDN)
+       if(key == K_PGDN || key == K_KP_PGDN)
        {
                if(inRange)
                        me.setValue(me, median(me.valueMin, me.value + me.valuePageStep, me.valueMax));
@@ -135,12 +136,12 @@ float keyDownSlider(entity me, float key, float ascii, float shift)
                        me.setValue(me, me.valueMin);
                return 1;
        }
-       if(key == K_HOME)
+       if(key == K_HOME || key == K_KP_HOME)
        {
                me.setValue(me, me.valueMin);
                return 1;
        }
-       if(key == K_END)
+       if(key == K_END || key == K_KP_END)
        {
                me.setValue(me, me.valueMax);
                return 1;
@@ -148,14 +149,17 @@ float keyDownSlider(entity me, float key, float ascii, float shift)
        // TODO more keys
        return 0;
 }
-float mouseDragSlider(entity me, vector pos)
+float Slider_mouseDrag(entity me, vector pos)
 {
        float hit;
        float v, animed;
        if(me.disabled)
                return 0;
+
+       anim.removeObjAnim(anim, me);
        animed = me.animated;
        me.animated = false;
+
        if(me.pressed)
        {
                hit = 1;
@@ -173,10 +177,12 @@ float mouseDragSlider(entity me, vector pos)
                else
                        me.setValue(me, me.previousValue);
        }
+
        me.animated = animed;
+
        return 1;
 }
-float mousePressSlider(entity me, vector pos)
+float Slider_mousePress(entity me, vector pos)
 {
        float controlCenter;
        if(me.disabled)
@@ -229,22 +235,28 @@ float mousePressSlider(entity me, vector pos)
                        //me.mouseDrag(me, pos);
                }
        }
-       if(cvar("menu_sounds"))
-               localsound("sound/misc/menu2.wav");
        return 1;
 }
-float mouseReleaseSlider(entity me, vector pos)
+float Slider_mouseRelease(entity me, vector pos)
 {
        me.pressed = 0;
        if(me.disabled)
                return 0;
+       if(cvar("menu_sounds"))
+               localsound("sound/misc/menu2.wav");
        return 1;
 }
-void showNotifySlider(entity me)
+void Slider_showNotify(entity me)
 {
        me.focusable = !me.disabled;
 }
-void drawSlider(entity me)
+void Slider_focusEnter(entity me)
+{
+       if(cvar("menu_sounds") > 1)
+               localsound("sound/misc/menu1.wav");
+       SUPER(Slider).focusEnter(me);
+}
+void Slider_draw(entity me)
 {
        float controlLeft;
        float save;
@@ -267,7 +279,7 @@ void drawSlider(entity me)
        }
        me.setText(me, me.valueToText(me, me.value));
        draw_alpha = save;
-       drawLabel(me);
+       SUPER(Slider).draw(me);
        me.text = string_null; // TEMPSTRING!
 }
 #endif