]> de.git.xonotic.org Git - voretournament/voretournament.git/blob - data/qcsrc/menu/voret/charmap.c
Tweak the Effects menu, and add iris adaptation to it as well.
[voretournament/voretournament.git] / data / qcsrc / menu / voret / charmap.c
1 #ifdef INTERFACE\r
2 CLASS(VoretCharmap) EXTENDS(Image)\r
3         METHOD(VoretCharmap, configureVoretCharmap, void(entity, entity))\r
4         METHOD(VoretCharmap, mousePress, float(entity, vector))\r
5         METHOD(VoretCharmap, mouseRelease, float(entity, vector))\r
6         METHOD(VoretCharmap, mouseMove, float(entity, vector))\r
7         METHOD(VoretCharmap, mouseDrag, float(entity, vector))\r
8         METHOD(VoretCharmap, keyDown, float(entity, float, float, float))\r
9         METHOD(VoretCharmap, focusLeave, void(entity))\r
10         METHOD(VoretCharmap, draw, void(entity))\r
11         ATTRIB(VoretCharmap, controlledTextbox, entity, NULL)\r
12         ATTRIB(VoretCharmap, image, string, SKINGFX_CHARMAP)\r
13         ATTRIB(VoretCharmap, image2, string, SKINGFX_CHARMAP_SELECTED)\r
14         ATTRIB(VoretCharmap, focusable, float, 1)\r
15         ATTRIB(VoretCharmap, previouslySelectedCharacterCell, float, -1)\r
16         ATTRIB(VoretCharmap, selectedCharacterCell, float, 0)\r
17         ATTRIB(VoretCharmap, mouseSelectedCharacterCell, float, -1)\r
18 ENDCLASS(VoretCharmap)\r
19 entity makeVoretCharmap(entity theTextbox);\r
20 #endif\r
21 \r
22 #ifdef IMPLEMENTATION\r
23 entity makeVoretCharmap(entity theTextbox)\r
24 {\r
25         entity me;\r
26         me = spawnVoretCharmap();\r
27         me.configureVoretCharmap(me, theTextbox);\r
28         return me;\r
29 }\r
30 \r
31 string CharMap_CellToChar(float c)\r
32 {\r
33         if (cvar("utf8_enable")) {\r
34                 if(c == 13)\r
35                         return chr(0xE000 + 127);\r
36                 else if(c < 32)\r
37                         return chr(0xE000 + c);\r
38                 else\r
39                         return chr(0xE000 + c + 96);\r
40         } else {\r
41                 if(c == 13)\r
42                         return chr(127);\r
43                 else if(c < 32)\r
44                         return chr(c);\r
45                 else\r
46                         return chr(c + 96);\r
47         }\r
48 }\r
49 \r
50 void configureVoretCharmapVoretCharmap(entity me, entity theTextbox)\r
51 {\r
52         me.controlledTextbox = theTextbox;\r
53         me.configureImage(me, me.image);\r
54 }\r
55 \r
56 float mouseMoveVoretCharmap(entity me, vector coords)\r
57 {\r
58         float x, y, c;\r
59         x = floor(coords_x * 16);\r
60         y = floor(coords_y * 10);\r
61         if(x < 0 || y < 0 || x >= 16 || y >= 10)\r
62         {\r
63                 me.mouseSelectedCharacterCell = -1;\r
64                 return 0;\r
65         }\r
66         c = y * 16 + x;\r
67         if(c != me.mouseSelectedCharacterCell)\r
68                 me.mouseSelectedCharacterCell = me.selectedCharacterCell = c;\r
69         return 1;\r
70 }\r
71 float mouseDragVoretCharmap(entity me, vector coords)\r
72 {\r
73         return me.mouseMove(me, coords);\r
74 }\r
75 float mousePressVoretCharmap(entity me, vector coords)\r
76 {\r
77         me.mouseMove(me, coords);\r
78         if(me.mouseSelectedCharacterCell >= 0)\r
79         {\r
80                 me.pressed = 1;\r
81                 me.previouslySelectedCharacterCell = me.selectedCharacterCell;\r
82         }\r
83         return 1;\r
84 }\r
85 float mouseReleaseVoretCharmap(entity me, vector coords)\r
86 {\r
87         if(!me.pressed)\r
88                 return 0;\r
89         me.mouseMove(me, coords);\r
90         if(me.selectedCharacterCell == me.previouslySelectedCharacterCell)\r
91                 me.controlledTextbox.enterText(me.controlledTextbox, CharMap_CellToChar(me.selectedCharacterCell));\r
92         me.pressed = 0;\r
93         return 1;\r
94 }\r
95 float keyDownVoretCharmap(entity me, float key, float ascii, float shift)\r
96 {\r
97         switch(key)\r
98         {\r
99                 case K_LEFTARROW:\r
100                         me.selectedCharacterCell = mod(me.selectedCharacterCell + 159, 160);\r
101                         return 1;\r
102                 case K_RIGHTARROW:\r
103                         me.selectedCharacterCell = mod(me.selectedCharacterCell + 1, 160);\r
104                         return 1;\r
105                 case K_UPARROW:\r
106                         me.selectedCharacterCell = mod(me.selectedCharacterCell + 144, 160);\r
107                         return 1;\r
108                 case K_DOWNARROW:\r
109                         me.selectedCharacterCell = mod(me.selectedCharacterCell + 16, 160);\r
110                         return 1;\r
111                 case K_HOME:\r
112                         me.selectedCharacterCell = 0;\r
113                         return 1;\r
114                 case K_END:\r
115                         me.selectedCharacterCell = 159;\r
116                         return 1;\r
117                 case K_SPACE:\r
118                 case K_ENTER:\r
119                 case K_INS:\r
120                         me.controlledTextbox.enterText(me.controlledTextbox, CharMap_CellToChar(me.selectedCharacterCell));\r
121                         return 1;\r
122                 default:\r
123                         return me.controlledTextbox.keyDown(me.controlledTextbox, key, ascii, shift);\r
124         }\r
125 }\r
126 void focusLeaveVoretCharmap(entity me)\r
127 {\r
128         me.controlledTextbox.saveCvars(me.controlledTextbox);\r
129 }\r
130 void drawVoretCharmap(entity me)\r
131 {\r
132         if(me.focused)\r
133         {\r
134                 if(!me.pressed || (me.selectedCharacterCell == me.previouslySelectedCharacterCell))\r
135                 {\r
136                         vector c;\r
137                         c = eX * (mod(me.selectedCharacterCell, 16) / 16.0);\r
138                         c += eY * (floor(me.selectedCharacterCell / 16.0) / 10.0);\r
139                         draw_Picture(c, me.image2, '0.0625 0.1 0', '1 1 1', 1);\r
140                 }\r
141         }\r
142         drawImage(me);\r
143 }\r
144 #endif\r