]> de.git.xonotic.org Git - voretournament/voretournament.git/blob - data/qcsrc/menu/voret/colorpicker.c
Added settings for anaglyph stereo in the Video menu, so people with 3D glasses can...
[voretournament/voretournament.git] / data / qcsrc / menu / voret / colorpicker.c
1 #ifdef INTERFACE\r
2 CLASS(VoretColorpicker) EXTENDS(Image)\r
3         METHOD(VoretColorpicker, configureVoretColorpicker, void(entity, entity))\r
4         METHOD(VoretColorpicker, mousePress, float(entity, vector))\r
5         METHOD(VoretColorpicker, mouseRelease, float(entity, vector))\r
6         METHOD(VoretColorpicker, mouseDrag, float(entity, vector))\r
7         ATTRIB(VoretColorpicker, controlledTextbox, entity, NULL)\r
8         ATTRIB(VoretColorpicker, image, string, SKINGFX_COLORPICKER)\r
9         ATTRIB(VoretColorpicker, imagemargin, vector, SKINMARGIN_COLORPICKER)\r
10         ATTRIB(VoretColorpicker, focusable, float, 1)\r
11         METHOD(VoretColorpicker, focusLeave, void(entity))\r
12         METHOD(VoretColorpicker, keyDown, float(entity, float, float, float))\r
13         METHOD(VoretColorpicker, draw, void(entity))\r
14 ENDCLASS(VoretColorpicker)\r
15 entity makeVoretColorpicker(entity theTextbox);\r
16 #endif\r
17 \r
18 #ifdef IMPLEMENTATION\r
19 entity makeVoretColorpicker(entity theTextbox)\r
20 {\r
21         entity me;\r
22         me = spawnVoretColorpicker();\r
23         me.configureVoretColorpicker(me, theTextbox);\r
24         return me;\r
25 }\r
26 \r
27 void configureVoretColorpickerVoretColorpicker(entity me, entity theTextbox)\r
28 {\r
29         me.controlledTextbox = theTextbox;\r
30         me.configureImage(me, me.image);\r
31 }\r
32 \r
33 float mousePressVoretColorpicker(entity me, vector coords)\r
34 {\r
35         me.mouseDrag(me, coords);\r
36         return 1;\r
37 }\r
38 \r
39 // must match hslimage.c\r
40 vector hslimage_color(vector v, vector margin)\r
41 {\r
42     v_x = (v_x - margin_x) / (1 - 2 * margin_x);\r
43     v_y = (v_y - margin_y) / (1 - 2 * margin_y);\r
44     if(v_x < 0) v_x = 0;\r
45     if(v_y < 0) v_y = 0;\r
46     if(v_x > 1) v_x = 1;\r
47     if(v_y > 1) v_y = 1;\r
48     if(v_y > 0.875) // grey bar\r
49         return hsl_to_rgb(eZ * v_x);\r
50     else\r
51         return hsl_to_rgb(v_x * 6 * eX + eY + v_y / 0.875 * eZ);\r
52 }\r
53 \r
54 vector color_hslimage(vector v, vector margin)\r
55 {\r
56         vector pos;\r
57         v = rgb_to_hsl(v);\r
58         if (v_y)\r
59         {\r
60                 pos_x = v_x / 6;\r
61                 pos_y = v_z * 0.875;\r
62         }\r
63         else // grey scale\r
64         {\r
65                 pos_x = v_z;\r
66                 pos_y = 0.875 + 0.07;\r
67         }\r
68         pos_x = margin_x + pos_x * (1 - 2 * margin_x);\r
69         pos_y = margin_y + pos_y * (1 - 2 * margin_y);\r
70         return pos;\r
71 }\r
72 \r
73 float mouseDragVoretColorpicker(entity me, vector coords)\r
74 {\r
75         float i;\r
76         for(;;)\r
77         {\r
78                 i = me.controlledTextbox.cursorPos;\r
79                 if(i >= 2)\r
80                 {\r
81                         if(substring(me.controlledTextbox.text, i-2, 1) == "^")\r
82                                 if(strstrofs("0123456789", substring(me.controlledTextbox.text, i-1, 1), 0) >= 0)\r
83                                 {\r
84                                         me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0);\r
85                                         me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0);\r
86                                         continue;\r
87                                 }\r
88                 }\r
89 \r
90                 if(i >= 5)\r
91                 {\r
92                         if(substring(me.controlledTextbox.text, i-5, 2) == "^x")\r
93                                 if(strstrofs("0123456789abcdefABCDEF", substring(me.controlledTextbox.text, i-3, 1), 0) >= 0)\r
94                                         if(strstrofs("0123456789abcdefABCDEF", substring(me.controlledTextbox.text, i-2, 1), 0) >= 0)\r
95                                                 if(strstrofs("0123456789abcdefABCDEF", substring(me.controlledTextbox.text, i-1, 1), 0) >= 0)\r
96                                                 {\r
97                                                         me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0);\r
98                                                         me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0);\r
99                                                         me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0);\r
100                                                         me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0);\r
101                                                         me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0);\r
102                                                         continue;\r
103                                                 }\r
104                 }\r
105                 break;\r
106         }\r
107 \r
108         vector margin;\r
109         margin = me.imagemargin;\r
110         if(coords_x >= margin_x)\r
111         if(coords_y >= margin_y)\r
112         if(coords_x <= 1 - margin_x)\r
113         if(coords_y <= 1 - margin_y)\r
114                 me.controlledTextbox.enterText(me.controlledTextbox, rgb_to_hexcolor(hslimage_color(coords, margin)));\r
115 \r
116         return 1;\r
117 }\r
118 \r
119 float mouseReleaseVoretColorpicker(entity me, vector coords)\r
120 {\r
121         me.mouseDrag(me, coords);\r
122         return 1;\r
123 }\r
124 \r
125 void focusLeaveVoretColorpicker(entity me)\r
126 {\r
127         me.controlledTextbox.saveCvars(me.controlledTextbox);\r
128 }\r
129 float keyDownVoretColorpicker(entity me, float key, float ascii, float shift)\r
130 {\r
131         return me.controlledTextbox.keyDown(me.controlledTextbox, key, ascii, shift);\r
132 }\r
133 void drawVoretColorpicker(entity me)\r
134 {\r
135         drawImage(me);\r
136 \r
137         float B, C, aC;\r
138         C = cvar("r_textcontrast");\r
139         B = cvar("r_textbrightness");\r
140 \r
141         // for this to work, C/(1-B) must be in 0..1\r
142         // B must be < 1\r
143         // C must be < 1-B\r
144         \r
145         B = bound(0, B, 1);\r
146         C = bound(0, C, 1-B);\r
147 \r
148         aC = 1 - C / (1 - B);\r
149 \r
150         draw_Picture(me.imgOrigin, strcat(me.src, "_m"), me.imgSize, '0 0 0', aC);\r
151         draw_Picture(me.imgOrigin, strcat(me.src, "_m"), me.imgSize, me.color, B);\r
152 }\r
153 #endif\r