]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Settings: Mouse sensitivity: added a text input box next to the slider
authorDr. Jaska <drjaska83@gmail.com>
Wed, 6 Nov 2024 13:08:55 +0000 (13:08 +0000)
committerterencehill <piuntn@gmail.com>
Wed, 6 Nov 2024 13:08:55 +0000 (13:08 +0000)
qcsrc/menu/item/inputbox.qc
qcsrc/menu/item/inputbox.qh
qcsrc/menu/item/slider.qc
qcsrc/menu/xonotic/dialog_settings_input.qc
qcsrc/menu/xonotic/slider.qc
qcsrc/menu/xonotic/slider.qh
xonotic-client.cfg

index 30c325ca415cacf0c806b81e9dac4806f7545644..0d77e67b4105464d58b165b59d1cace5ef727b67 100644 (file)
        {
                int len = strlen(ch);
                for (int i = 0; i < len; ++i)
+               {
                        if (strstrofs(me.forbiddenCharacters, substring(ch, i, 1), 0) > -1) return;
+                       if (strstrofs(me.allowedCharacters, substring(ch, i, 1), 0) == -1) return;
+               }
                if (me.maxLength > 0)
                {
                        if (len + strlen(me.text) > me.maxLength) return;
index 5b0c28f9e454d49eb6990e9cd694abe845f8e4dd..f6b178eba0eaab619c3393a6ad71ace6a26068ce 100644 (file)
@@ -28,6 +28,7 @@ CLASS(InputBox, Label)
        ATTRIB(InputBox, pressed, float, 0);
        ATTRIB(InputBox, editColorCodes, float, 1);
        ATTRIB(InputBox, forbiddenCharacters, string, "");
+       ATTRIB(InputBox, allowedCharacters, string, "");
        ATTRIB(InputBox, color, vector, '1 1 1');
        ATTRIB(InputBox, colorF, vector, '1 1 1');
        ATTRIB(InputBox, maxLength, float, 255);  // if negative, it counts bytes, not chars
index b98f59bbb444f663643e9860645b820ada792052..30f27f9fbda751336e218757443ca18e488444ed 100644 (file)
                if (me.valueMax > me.valueMin) // valid?
                        me.setText(me, me.valueToText(me, me.value));
                draw_alpha = save;
-               SUPER(Slider).draw(me);
+               if (me.textSpace > 0)
+               {
+                       SUPER(Slider).draw(me);
+               }
                me.text = string_null;  // TEMPSTRING!
        }
index b025c3aff7c7c2c5927dd9605f9704a815cefc95..659e41533b098401b610252ebebb719d5edae3aa 100644 (file)
 #include "button.qh"
 #include "slider.qh"
 #include "checkbox.qh"
+#include "inputbox.qh"
+
+void updateSensSlider(entity field, entity slider)
+{
+       if (slider == NULL)
+               return;
+
+       // Avoid onChange causing jittering
+       slider.onChangeEntity = NULL;
+       slider.setValue(slider, stof(field.text));
+       slider.onChangeEntity = field;
+}
+
+void updateSensField(entity slider, entity field)
+{
+       if (field == NULL)
+               return;
+
+       if (slider.value)
+       {
+               // Avoid onChange causing jittering
+               field.onChangeEntity = NULL;
+               field.setText(field, ftos_mindecimals(slider.value));
+               field.onChangeEntity = slider;
+       }
+}
+
+void linkSensitivities(entity slider, entity field)
+{
+       slider.onChange = updateSensField;
+       slider.onChangeEntity = field;
+
+       field.onChange = updateSensSlider;
+       field.onChangeEntity = slider;
+}
 
 entity makeXonoticInputSettingsTab()
 {
@@ -57,9 +92,17 @@ void XonoticInputSettingsTab_fill(entity me)
        me.gotoRC(me, 0, 3.2); me.setFirstColumn(me, me.currentColumn);
                me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Mouse")));
        me.TR(me);
+               entity sensitivitySlider;
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Sensitivity:")));
-               me.TD(me, 1, 2, e = makeXonoticSlider_T(1, 32, 0.2, "sensitivity",
+               me.TD(me, 1, 1, e = makeXonoticSlider_T(0.1, 9.9, 0.1, "sensitivity",
+                       _("Mouse speed multiplier")));
+                       sensitivitySlider = e;
+                       e.textSpace = 0;
+               me.TD(me, 1, 1, e = makeXonoticInputBox_T(0, "sensitivity",
                        _("Mouse speed multiplier")));
+                       e.saveImmediately = 1;
+                       e.allowedCharacters = "0.123456789";
+                       linkSensitivities(sensitivitySlider, e);
        me.TR(me);
                me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "m_filter", _("Smooth aiming"),
                        _("Smoothes the mouse movement, but makes aiming slightly less responsive")));
index d0a1cfb759e32371d4d12e3135384f285e0c9c69..ac14723b0a64efa0d679c1110686d616cd66bbf6 100644 (file)
@@ -36,6 +36,9 @@ void XonoticSlider_setValue(entity me, float val)
        {
                SUPER(XonoticSlider).setValue( me, val );
                me.saveCvars(me);
+
+               if(me.onChange)
+                       me.onChange(me, me.onChangeEntity);
        }
 }
 void XonoticSlider_setValue_noAnim(entity me, float val)
@@ -44,6 +47,9 @@ void XonoticSlider_setValue_noAnim(entity me, float val)
        {
                SUPER(XonoticSlider).setValue_noAnim(me, val);
                me.saveCvars(me);
+
+               if(me.onChange)
+                       me.onChange(me, me.onChangeEntity);
        }
 }
 void XonoticSlider_loadCvars(entity me)
index de66fb95ef53ab9d6f1e653e0a69be094d55029c..aeb51aa0c7f58c0fcf2299a9c5ade4788470c875 100644 (file)
@@ -5,6 +5,8 @@ CLASS(XonoticSlider, Slider)
        METHOD(XonoticSlider, configureXonoticSlider, void(entity, float, float, float, string, string));
        METHOD(XonoticSlider, setValue, void(entity, float));
        METHOD(XonoticSlider, setValue_noAnim, void(entity, float));
+       ATTRIB(XonoticSlider, onChange, void(entity, entity));
+       ATTRIB(XonoticSlider, onChangeEntity, entity);
        ATTRIB(XonoticSlider, fontSize, float, SKINFONTSIZE_NORMAL);
        ATTRIB(XonoticSlider, valueSpace, float, SKINWIDTH_SLIDERTEXT);
        ATTRIB(XonoticSlider, image, string, SKINGFX_SLIDER);
index d3009cd34dc5a336b7a74bea388ac18017fbece8..332c4b74198d0feb71bc050d75d4bf56561359cc 100644 (file)
@@ -77,7 +77,7 @@ seta cl_spawn_point_particles 1 "pointparticles effect at all spawn points" // m
 seta cl_spawn_point_dist_max 1200 "maximum distance from which spawnpoint particles will be visible"
 
 freelook 1
-sensitivity 3
+sensitivity 3.0
 v_gamma 1
 viewsize 100
 bgmvolume 0.75