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