]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/menu/xonotic/colorpicker_string.qc
Sort menu classes
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / xonotic / colorpicker_string.qc
1 #ifndef COLORPICKER_STRING_H
2 #define COLORPICKER_STRING_H
3 CLASS(XonoticColorpickerString, Image)
4         METHOD(XonoticColorpickerString, configureXonoticColorpickerString, void(entity, string, string))
5         METHOD(XonoticColorpickerString, mousePress, float(entity, vector))
6         METHOD(XonoticColorpickerString, mouseRelease, float(entity, vector))
7         METHOD(XonoticColorpickerString, mouseDrag, float(entity, vector))
8         ATTRIB(XonoticColorpickerString, cvarName, string, string_null)
9         METHOD(XonoticColorpickerString, loadCvars, void(entity))
10         METHOD(XonoticColorpickerString, saveCvars, void(entity))
11         ATTRIB(XonoticColorpickerString, prevcoords, vector, '0 0 0')
12         ATTRIB(XonoticColorpickerString, image, string, SKINGFX_COLORPICKER)
13         ATTRIB(XonoticColorpickerString, imagemargin, vector, SKINMARGIN_COLORPICKER)
14         ATTRIB(XonoticColorpickerString, focusable, float, 1)
15         METHOD(XonoticColorpickerString, draw, void(entity))
16         ATTRIB(XonoticColorpickerString, disabledAlpha, float, 0.3)
17 ENDCLASS(XonoticColorpickerString)
18 entity makeXonoticColorpickerString(string theCvar, string theDefaultCvar);
19 #endif
20
21 #ifdef IMPLEMENTATION
22 entity makeXonoticColorpickerString(string theCvar, string theDefaultCvar)
23 {
24         entity me;
25         me = NEW(XonoticColorpickerString);
26         me.configureXonoticColorpickerString(me, theCvar, theDefaultCvar);
27         return me;
28 }
29
30 void XonoticColorpickerString_configureXonoticColorpickerString(entity me, string theCvar, string theDefaultCvar)
31 {
32         me.cvarName = theCvar;
33         me.configureImage(me, me.image);
34         if(theCvar)
35         {
36                 me.cvarName = theCvar;
37                 me.tooltip = getZonedTooltipForIdentifier(theCvar);
38                 me.loadCvars(me);
39         }
40 }
41
42 void XonoticColorpickerString_loadCvars(entity me)
43 {
44         if (!me.cvarName)
45                 return;
46
47         if(substring(me.cvarName, -1, 1) == "_")
48         {
49                 me.prevcoords = color_hslimage(
50                         eX * cvar(strcat(me.cvarName, "red")) +
51                         eY * cvar(strcat(me.cvarName, "green")) +
52                         eZ * cvar(strcat(me.cvarName, "blue")),
53                         me.imagemargin);
54         }
55         else
56                 me.prevcoords = color_hslimage(stov(cvar_string(me.cvarName)), me.imagemargin);
57 }
58
59 void XonoticColorpickerString_saveCvars(entity me)
60 {
61         if (!me.cvarName)
62                 return;
63
64         if(substring(me.cvarName, -1, 1) == "_")
65         {
66                 vector v = hslimage_color(me.prevcoords, me.imagemargin);
67                 cvar_set(strcat(me.cvarName, "red"), ftos(v.x));
68                 cvar_set(strcat(me.cvarName, "green"), ftos(v.y));
69                 cvar_set(strcat(me.cvarName, "blue"), ftos(v.z));
70         }
71         else
72                 cvar_set(me.cvarName, sprintf("%v", hslimage_color(me.prevcoords, me.imagemargin)));
73 }
74
75 float XonoticColorpickerString_mousePress(entity me, vector coords)
76 {
77         me.mouseDrag(me, coords);
78         return 1;
79 }
80
81 float XonoticColorpickerString_mouseDrag(entity me, vector coords)
82 {
83         if(me.disabled)
84                 return 0;
85         vector margin;
86         margin = me.imagemargin;
87         if(coords.x >= margin.x)
88         if(coords.y >= margin.y)
89         if(coords.x <= 1 - margin.x)
90         if(coords.y <= 1 - margin.y)
91         {
92                 me.prevcoords = coords;
93                 me.saveCvars(me);
94         }
95
96         return 1;
97 }
98
99 float XonoticColorpickerString_mouseRelease(entity me, vector coords)
100 {
101         m_play_click_sound(MENU_SOUND_SLIDE);
102         me.mouseDrag(me, coords);
103         return 1;
104 }
105
106 void XonoticColorpickerString_draw(entity me)
107 {
108         float save;
109         save = draw_alpha;
110         if(me.disabled)
111                 draw_alpha *= me.disabledAlpha;
112
113         SUPER(XonoticColorpickerString).draw(me);
114
115         vector sz;
116         sz = draw_PictureSize(strcat(me.src, "_selected"));
117         sz = globalToBoxSize(sz, draw_scale);
118
119         if(!me.disabled)
120                 draw_Picture(me.imgOrigin + me.prevcoords - 0.5 * sz, strcat(me.src, "_selected"), sz, '1 1 1', 1);
121
122         draw_alpha = save;
123 }
124 #endif