]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/menu/item/slider.qc
Merge branch 'master' into Mario/qc_physics_prehax
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / item / slider.qc
index c92db27e984f84be22a86ff2ae8049d190c3d478..2c74f6131c8f06e40e4a530bcb3720e2e2612613 100644 (file)
@@ -7,10 +7,10 @@ CLASS(Slider) EXTENDS(Label)
        METHOD(Slider, configureSliderValues, void(entity, float, float, float, float, float, float))
        METHOD(Slider, draw, void(entity))
        METHOD(Slider, keyDown, float(entity, float, float, float))
+       METHOD(Slider, keyUp, float(entity, float, float, float))
        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))
@@ -18,6 +18,7 @@ CLASS(Slider) EXTENDS(Label)
        METHOD(Slider, showNotify, void(entity))
        ATTRIB(Slider, src, string, string_null)
        ATTRIB(Slider, focusable, float, 1)
+       ATTRIB(Slider, allowFocusSound, float, 1)
        ATTRIB(Slider, value, float, 0)
        ATTRIB(Slider, animated, float, 1)
        ATTRIB(Slider, sliderValue, float, 0)
@@ -66,7 +67,7 @@ string Slider_toString(entity me)
 void Slider_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
 {
        SUPER(Slider).resizeNotify(me, relOrigin, relSize, absOrigin, absSize);
-       me.controlWidth = absSize_y / absSize_x;
+       me.controlWidth = absSize.y / absSize.x;
 }
 string Slider_valueToText(entity me, float val)
 {
@@ -146,7 +147,29 @@ float Slider_keyDown(entity me, float key, float ascii, float shift)
                me.setValue(me, me.valueMax);
                return 1;
        }
-       // TODO more keys
+       // TODO more keys (NOTE also add them to Slider_keyUp)
+       return 0;
+}
+float Slider_keyUp(entity me, float key, float ascii, float shift)
+{
+       if(me.disabled)
+               return 0;
+       switch(key)
+       {
+               case K_LEFTARROW:
+               case K_KP_LEFTARROW:
+               case K_RIGHTARROW:
+               case K_KP_RIGHTARROW:
+               case K_PGUP:
+               case K_KP_PGUP:
+               case K_PGDN:
+               case K_KP_PGDN:
+               case K_HOME:
+               case K_KP_HOME:
+               case K_END:
+               case K_KP_END:
+                       m_play_click_sound(MENU_SOUND_SLIDE);
+       }
        return 0;
 }
 float Slider_mouseDrag(entity me, vector pos)
@@ -163,13 +186,13 @@ float Slider_mouseDrag(entity me, vector pos)
        if(me.pressed)
        {
                hit = 1;
-               if(pos_x < 0 - me.tolerance_x) hit = 0;
-               if(pos_y < 0 - me.tolerance_y) hit = 0;
-               if(pos_x >= 1 - me.textSpace + me.tolerance_x) hit = 0;
-               if(pos_y >= 1 + me.tolerance_y) hit = 0;
+               if(pos.x < 0 - me.tolerance.x) hit = 0;
+               if(pos.y < 0 - me.tolerance.y) hit = 0;
+               if(pos.x >= 1 - me.textSpace + me.tolerance.x) hit = 0;
+               if(pos.y >= 1 + me.tolerance.y) hit = 0;
                if(hit)
                {
-                       v = median(0, (pos_x - me.pressOffset - 0.5 * me.controlWidth) / (1 - me.textSpace - me.controlWidth), 1) * (me.valueMax - me.valueMin) + me.valueMin;
+                       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, v);
@@ -187,24 +210,24 @@ float Slider_mousePress(entity me, vector pos)
        float controlCenter;
        if(me.disabled)
                return 0;
-       if(pos_x < 0) return 0;
-       if(pos_y < 0) return 0;
-       if(pos_x >= 1 - me.textSpace) return 0;
-       if(pos_y >= 1) return 0;
+       if(pos.x < 0) return 0;
+       if(pos.y < 0) return 0;
+       if(pos.x >= 1 - me.textSpace) return 0;
+       if(pos.y >= 1) return 0;
        controlCenter = (me.value - me.valueMin) / (me.valueMax - me.valueMin) * (1 - me.textSpace - me.controlWidth) + 0.5 * me.controlWidth;
-       if(fabs(pos_x - controlCenter) <= 0.5 * me.controlWidth)
+       if(fabs(pos.x - controlCenter) <= 0.5 * me.controlWidth)
        {
                me.pressed = 1;
-               me.pressOffset = pos_x - controlCenter;
+               me.pressOffset = pos.x - controlCenter;
                me.previousValue = me.value;
                //me.mouseDrag(me, pos);
        }
        else
        {
                float clickValue, pageValue, inRange;
-               clickValue = median(0, (pos_x - me.pressOffset - 0.5 * me.controlWidth) / (1 - me.textSpace - me.controlWidth), 1) * (me.valueMax - me.valueMin) + me.valueMin;
+               clickValue = median(0, (pos.x - me.pressOffset - 0.5 * me.controlWidth) / (1 - me.textSpace - me.controlWidth), 1) * (me.valueMax - me.valueMin) + me.valueMin;
                inRange = (almost_in_bounds(me.valueMin, me.value, me.valueMax));
-               if(pos_x < controlCenter)
+               if(pos.x < controlCenter)
                {
                        pageValue = me.value - me.valuePageStep;
                        if(me.valueStep)
@@ -230,7 +253,7 @@ float Slider_mousePress(entity me, vector pos)
                {
                        controlCenter = (me.value - me.valueMin) / (me.valueMax - me.valueMin) * (1 - me.textSpace - me.controlWidth) + 0.5 * me.controlWidth;
                        me.pressed = 1;
-                       me.pressOffset = pos_x - controlCenter;
+                       me.pressOffset = pos.x - controlCenter;
                        me.previousValue = me.value;
                        //me.mouseDrag(me, pos);
                }
@@ -242,20 +265,13 @@ float Slider_mouseRelease(entity me, vector pos)
        me.pressed = 0;
        if(me.disabled)
                return 0;
-       if(cvar("menu_sounds"))
-               localsound("sound/misc/menu2.wav");
+       m_play_click_sound(MENU_SOUND_SLIDE);
        return 1;
 }
 void Slider_showNotify(entity me)
 {
        me.focusable = !me.disabled;
 }
-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;