X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;ds=sidebyside;f=qcsrc%2Fmenu%2Fitem%2Fslider.qc;h=2e89bb68ee21e7356dcc906653a73c9a35b385c1;hb=cbca1a79315fe08c4796273a490a4d12b7d3291d;hp=e3220f57d9d49c392d8f6a8fa036bb1fb24091c0;hpb=a0feb46a5f3f7db30054e67266e1c59f712f3da7;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/menu/item/slider.qc b/qcsrc/menu/item/slider.qc index e3220f57d..2e89bb68e 100644 --- a/qcsrc/menu/item/slider.qc +++ b/qcsrc/menu/item/slider.qc @@ -1,56 +1,10 @@ -// Note: -// to use this, you FIRST call configureSliderVisuals, then configureSliderValues -#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)); - 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, valueToText, string(entity, float)); - METHOD(Slider, toString, string(entity)); - METHOD(Slider, setValue_allowAnim, void(entity, float, bool)); - METHOD(Slider, setValue_noAnim, void(entity, float)); - METHOD(Slider, setValue, void(entity, float)); - METHOD(Slider, setSliderValue, void(entity, float)); - 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) - ATTRIB(Slider, sliderAnim, entity, NULL) - ATTRIB(Slider, valueMin, float, 0) - ATTRIB(Slider, valueMax, float, 0) - ATTRIB(Slider, valueStep, float, 0) - ATTRIB(Slider, valueDigits, float, 0) - ATTRIB(Slider, valueKeyStep, float, 0) - ATTRIB(Slider, valuePageStep, float, 0) - ATTRIB(Slider, valueDisplayMultiplier, float, 1.0) - ATTRIB(Slider, textSpace, float, 0) - ATTRIB(Slider, controlWidth, float, 0) - ATTRIB(Slider, pressed, float, 0) - ATTRIB(Slider, pressOffset, float, 0) - ATTRIB(Slider, previousValue, float, 0) - ATTRIB(Slider, tolerance, vector, '0 0 0') - ATTRIB(Slider, disabled, float, 0) - ATTRIB(Slider, color, vector, '1 1 1') - ATTRIB(Slider, color2, vector, '1 1 1') - ATTRIB(Slider, colorD, vector, '1 1 1') - ATTRIB(Slider, colorC, vector, '1 1 1') - ATTRIB(Slider, colorF, vector, '1 1 1') - ATTRIB(Slider, disabledAlpha, float, 0.3) - ENDCLASS(Slider) -#endif +#include "slider.qh" + +#include "../anim/easing.qh" +#include "../anim/animhost.qh" + +.entity applyButton; -#ifdef IMPLEMENTATION void Slider_setValue_allowAnim(entity me, float val, bool allowAnim) { if (allowAnim && me.animated) @@ -118,40 +72,47 @@ float Slider_keyDown(entity me, float key, float ascii, float shift) { float inRange; + float ret_value = 0; if (me.disabled) return 0; inRange = (almost_in_bounds(me.valueMin, me.value, me.valueMax)); if (key == K_LEFTARROW || key == K_KP_LEFTARROW || key == K_MWHEELDOWN) { if (inRange) me.setValue(me, median(me.valueMin, me.value - me.valueKeyStep, me.valueMax)); else me.setValue(me, me.valueMax); - return 1; + ret_value = 1; } if (key == K_RIGHTARROW || key == K_KP_RIGHTARROW || key == K_MWHEELUP) { if (inRange) me.setValue(me, median(me.valueMin, me.value + me.valueKeyStep, me.valueMax)); else me.setValue(me, me.valueMin); - return 1; + ret_value = 1; } if (key == K_PGDN || key == K_KP_PGDN) { if (inRange) me.setValue(me, median(me.valueMin, me.value - me.valuePageStep, me.valueMax)); else me.setValue(me, me.valueMax); - return 1; + ret_value = 1; } if (key == K_PGUP || key == K_KP_PGUP) { if (inRange) me.setValue(me, median(me.valueMin, me.value + me.valuePageStep, me.valueMax)); else me.setValue(me, me.valueMin); - return 1; + ret_value = 1; } if (key == K_HOME || key == K_KP_HOME) { me.setValue(me, me.valueMin); - return 1; + ret_value = 1; } if (key == K_END || key == K_KP_END) { me.setValue(me, me.valueMax); + ret_value = 1; + } + if(ret_value == 1) + { + if(me.applyButton) + me.applyButton.disabled = false; return 1; } // TODO more keys (NOTE also add them to Slider_keyUp) @@ -199,6 +160,9 @@ 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_noAnim(me, v); + if(me.applyButton) + if(me.previousValue != me.value) + me.applyButton.disabled = false; } else { @@ -234,17 +198,17 @@ pageValue = me.value - me.valuePageStep; if (me.valueStep) clickValue = floor(clickValue / me.valueStep) * me.valueStep; pageValue = max(pageValue, clickValue); - if (inRange) me.setValue(me, median(me.valueMin, pageValue, me.valueMax)); - else me.setValue(me, me.valueMax); } else { pageValue = me.value + me.valuePageStep; if (me.valueStep) clickValue = ceil(clickValue / me.valueStep) * me.valueStep; pageValue = min(pageValue, clickValue); - if (inRange) me.setValue(me, median(me.valueMin, pageValue, me.valueMax)); - else me.setValue(me, me.valueMax); } + if (inRange) me.setValue(me, median(me.valueMin, pageValue, me.valueMax)); + else me.setValue(me, me.valueMax); + if(me.applyButton) + me.applyButton.disabled = false; if (pageValue == clickValue) { controlCenter = (me.value - me.valueMin) / (me.valueMax - me.valueMin) * (1 - me.textSpace - me.controlWidth) + 0.5 * me.controlWidth; @@ -298,4 +262,3 @@ SUPER(Slider).draw(me); me.text = string_null; // TEMPSTRING! } -#endif