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