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