]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/menu/xonotic/colorpicker_string.c
Menu: avoid loading font twice on resolution switch; avoid extra r_restart on resolut...
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / xonotic / colorpicker_string.c
index 3633553044c314c4fbc7c846ad6ea7e0e53079ec..c3593056c284d6f75339a8c93c180cbcb665170c 100644 (file)
@@ -1,10 +1,12 @@
 #ifdef INTERFACE
 CLASS(XonoticColorpickerString) EXTENDS(Image)
-       METHOD(XonoticColorpickerString, configureXonoticColorpickerString, void(entity, string))
+       METHOD(XonoticColorpickerString, configureXonoticColorpickerString, void(entity, string, string))
        METHOD(XonoticColorpickerString, mousePress, float(entity, vector))
        METHOD(XonoticColorpickerString, mouseRelease, float(entity, vector))
        METHOD(XonoticColorpickerString, mouseDrag, float(entity, vector))
        ATTRIB(XonoticColorpickerString, cvarName, string, string_null)
+       METHOD(XonoticColorPickerString, loadCvars, void(entity))
+       METHOD(XonoticColorPickerString, saveCvars, void(entity))
        ATTRIB(XonoticColorpickerString, prevcoords, vector, '0 0 0')
        ATTRIB(XonoticColorpickerString, image, string, SKINGFX_COLORPICKER)
        ATTRIB(XonoticColorpickerString, imagemargin, vector, SKINMARGIN_COLORPICKER)
@@ -12,23 +14,61 @@ CLASS(XonoticColorpickerString) EXTENDS(Image)
        METHOD(XonoticColorpickerString, draw, void(entity))
        ATTRIB(XonoticColorpickerString, disabledAlpha, float, 0.3)
 ENDCLASS(XonoticColorpickerString)
-entity makeXonoticColorpickerString(string theCvar);
+entity makeXonoticColorpickerString(string theCvar, string theDefaultCvar);
 #endif
 
 #ifdef IMPLEMENTATION
-entity makeXonoticColorpickerString(string theCvar)
+entity makeXonoticColorpickerString(string theCvar, string theDefaultCvar)
 {
        entity me;
        me = spawnXonoticColorpickerString();
-       me.configureXonoticColorpickerString(me, theCvar);
+       me.configureXonoticColorpickerString(me, theCvar, theDefaultCvar);
        return me;
 }
 
-void XonoticColorpickerString_configureXonoticColorpickerString(entity me, string theCvar)
+void XonoticColorpickerString_configureXonoticColorpickerString(entity me, string theCvar, string theDefaultCvar)
 {
        me.cvarName = theCvar;
        me.configureImage(me, me.image);
-       me.prevcoords = '1 1 0';
+       if(theCvar)
+       {
+               me.cvarName = theCvar;
+               me.tooltip = getZonedTooltipForIdentifier(theCvar);
+               me.loadCvars(me);
+       }
+}
+
+void XonoticColorPickerString_loadCvars(entity me)
+{
+       if not(me.cvarName)
+               return;
+
+       if(substring(me.cvarName, -1, 1) == "_")
+       {
+               me.prevcoords = color_hslimage(
+                       eX * cvar(strcat(me.cvarName, "red")) +
+                       eY * cvar(strcat(me.cvarName, "green")) +
+                       eZ * cvar(strcat(me.cvarName, "blue")),
+                       me.imagemargin);
+       }
+       else
+               me.prevcoords = color_hslimage(stov(cvar_string(me.cvarName)), me.imagemargin);
+}
+
+void XonoticColorPickerString_saveCvars(entity me)
+{
+       if not(me.cvarName)
+               return;
+
+       if(substring(me.cvarName, -1, 1) == "_")
+       {
+               vector v = hslimage_color(me.prevcoords, me.imagemargin);
+               cvar_set(strcat(me.cvarName, "red"), ftos(v_x));
+               cvar_set(strcat(me.cvarName, "green"), ftos(v_y));
+               cvar_set(strcat(me.cvarName, "blue"), ftos(v_z));
+       }
+       else
+               cvar_set(me.cvarName, sprintf("%v", hslimage_color(me.prevcoords, me.imagemargin)));
 }
 
 float XonoticColorpickerString_mousePress(entity me, vector coords)
@@ -48,8 +88,8 @@ float XonoticColorpickerString_mouseDrag(entity me, vector coords)
        if(coords_x <= 1 - margin_x)
        if(coords_y <= 1 - margin_y)
        {
-               cvar_set(me.cvarName, sprintf("%v", hslimage_color(coords, margin)));
                me.prevcoords = coords;
+               me.saveCvars(me);
        }
 
        return 1;
@@ -74,10 +114,9 @@ void XonoticColorpickerString_draw(entity me)
        sz = draw_PictureSize(strcat(me.src, "_selected"));
        sz = globalToBoxSize(sz, draw_scale);
 
-       if(me.disabled)
-               me.prevcoords = '1 1 0';
-       else
+       if(!me.disabled)
                draw_Picture(me.imgOrigin + me.prevcoords - 0.5 * sz, strcat(me.src, "_selected"), sz, '1 1 1', 1);
+
        draw_alpha = save;
 }
 #endif