X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fmenu%2Fitem%2Fslider.qc;h=7e880dcd9e86a5b43445f06b3c8d04b2a924974c;hb=d4d9085c62eac8bbe0ef559f42de20aeb1308bcb;hp=e944a96aea18f010c7a6e3dd5b25ddc8ec15cfbf;hpb=fbb96108e5828a7557694db4469c2d0d7c582846;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/menu/item/slider.qc b/qcsrc/menu/item/slider.qc index e944a96ae..7e880dcd9 100644 --- a/qcsrc/menu/item/slider.qc +++ b/qcsrc/menu/item/slider.qc @@ -24,6 +24,7 @@ CLASS(Slider, Label) 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) @@ -51,8 +52,13 @@ ENDCLASS(Slider) 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); } @@ -177,14 +183,10 @@ float Slider_keyUp(entity me, float key, float ascii, float shift) 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; @@ -194,6 +196,9 @@ float Slider_mouseDrag(entity me, vector pos) 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; @@ -203,8 +208,6 @@ float Slider_mouseDrag(entity me, vector pos) me.setValue(me, me.previousValue); } - me.animated = animed; - return 1; } float Slider_mousePress(entity me, vector pos) @@ -295,6 +298,14 @@ void Slider_draw(entity me) 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);