]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/menu/xonotic/charmap.qc
Header police
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / xonotic / charmap.qc
1 #include "charmap.qh"
2 #ifndef CHARMAP_H
3 #define CHARMAP_H
4 #include "picker.qc"
5 CLASS(XonoticCharmap, XonoticPicker)
6         METHOD(XonoticCharmap, configureXonoticCharmap, void(entity, entity));
7         METHOD(XonoticCharmap, focusLeave, void(entity));
8         METHOD(XonoticCharmap, resizeNotify, void(entity, vector, vector, vector, vector));
9         METHOD(XonoticCharmap, keyDown, float(entity, float, float, float));
10         ATTRIB(XonoticCharmap, inputBox, entity, NULL)
11         ATTRIB(XonoticCharmap, realFontSize, vector, '0 0 0')
12
13         ATTRIB(XonoticCharmap, rows, float, 10)
14         ATTRIB(XonoticCharmap, columns, float, 14)
15
16         METHOD(XonoticCharmap, cellSelect, void(entity, vector));
17         METHOD(XonoticCharmap, cellIsValid, bool(entity, vector));
18         METHOD(XonoticCharmap, cellDraw, void(entity, vector, vector));
19         ATTRIB(XonoticCharmap, charOffset, vector, '0 0 0')
20 ENDCLASS(XonoticCharmap)
21 entity makeXonoticCharmap(entity controlledInputBox);
22 #endif
23
24 #ifdef IMPLEMENTATION
25
26 string CHARMAP =
27         "★◆■▮▰▬◣◤◥◢◀▲▶▼"
28         "🌍🌎🌏🚀🌌👽🔫⌖❇❈←↑→↓"
29         "☠☣☢⚛⚡⚙🔥❌⚠⛔❰❱❲❳"
30         "😃😊😁😄😆😎😈😇😉😛😝😘❤ "
31         "😐😒😕😮😲😞😟😠😣😭😵😴  "
32         "\xEE\x83\xA1\xEE\x83\xA2\xEE\x83\xA3\xEE\x83\xA4\xEE\x83\xA5\xEE\x83\xA6\xEE\x83\xA7"
33         "\xEE\x83\xA8\xEE\x83\xA9\xEE\x83\xAA\xEE\x83\xAB\xEE\x83\xAC\xEE\x83\xAD\xEE\x83\xAE"
34         "\xEE\x83\xAF\xEE\x83\xB0\xEE\x83\xB1\xEE\x83\xB2\xEE\x83\xB3\xEE\x83\xB4\xEE\x83\xB5"
35         "\xEE\x83\xB6\xEE\x83\xB7\xEE\x83\xB8\xEE\x83\xB9\xEE\x83\xBA\xEE\x80\x90\xEE\x80\x91"
36         "\xEE\x82\xB0\xEE\x82\xB1\xEE\x82\xB2\xEE\x82\xB3\xEE\x82\xB4\xEE\x82\xB5\xEE\x82\xB6"
37         "\xEE\x82\xB7\xEE\x82\xB8\xEE\x82\xB9\xEE\x82\xA1\xEE\x82\xBF\xEE\x82\xA6\xEE\x82\xA5"
38         "\xEE\x83\x81\xEE\x83\x82\xEE\x83\x83\xEE\x83\x84\xEE\x83\x85\xEE\x83\x86\xEE\x83\x87"
39         "\xEE\x83\x88\xEE\x83\x89\xEE\x83\x8A\xEE\x83\x8B\xEE\x83\x8C\xEE\x83\x8D\xEE\x83\x8E"
40         "\xEE\x83\x8F\xEE\x83\x90\xEE\x83\x91\xEE\x83\x92\xEE\x83\x93\xEE\x83\x94\xEE\x83\x95"
41         "\xEE\x83\x96\xEE\x83\x97\xEE\x83\x98\xEE\x83\x99\xEE\x83\x9A\xEE\x81\x9B\xEE\x81\x9D";
42
43 string charmap_cellToChar(entity me, vector cell)
44 {
45         string character = substring(CHARMAP, cell.y * me.columns + cell.x, 1);
46
47         if(character != " ")
48                 return character;
49         else
50                 return "";
51 }
52
53 entity makeXonoticCharmap(entity controlledInputBox)
54 {
55         entity me;
56         me = NEW(XonoticCharmap);
57         me.configureXonoticCharmap(me, controlledInputBox);
58         return me;
59 }
60
61 void XonoticCharmap_configureXonoticCharmap(entity me, entity controlledInputBox)
62 {
63         me.inputBox = controlledInputBox;
64         me.configureXonoticPicker(me);
65 }
66
67 void XonoticCharmap_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
68 {
69         SUPER(XonoticCharmap).resizeNotify(me, relOrigin, relSize, absOrigin, absSize);
70
71         float maxFontWidth = SKINFONTSIZE_NORMAL / absSize.x;
72         float maxFontHeight = SKINFONTSIZE_NORMAL / absSize.y;
73
74         if((me.realCellSize.x * absSize.x) > (me.realCellSize.y * absSize.y))
75         {
76                 me.realFontSize_x = me.realCellSize.y * absSize.y / absSize.x;
77                 me.realFontSize_y = me.realCellSize.y;
78         }
79         else
80         {
81                 me.realFontSize_x = me.realCellSize.x;
82                 me.realFontSize_y = me.realCellSize.x * absSize.x / absSize.y;
83         }
84
85         if(me.realFontSize.x > maxFontWidth || me.realFontSize.y > maxFontHeight)
86                 me.realFontSize = eX * maxFontWidth + eY * maxFontHeight;
87
88         me.charOffset = eX * me.realCellSize.x / 2 + eY * ((me.realCellSize.y - me.realFontSize.y) / 2);
89 }
90
91 float XonoticCharmap_keyDown(entity me, float key, float ascii, float shift)
92 {
93         if(SUPER(XonoticCharmap).keyDown(me, key, ascii, shift))
94                 return 1;
95         return me.inputBox.keyDown(me.inputBox, key, ascii, shift);
96 }
97
98 void XonoticCharmap_cellSelect(entity me, vector cell)
99 {
100         string character = charmap_cellToChar(me, cell);
101         if(character != "")
102         {
103                 me.inputBox.enterText(me.inputBox, character);
104                 if(me.inputBox.applyButton)
105                         me.inputBox.applyButton.disabled = false;
106         }
107 }
108
109 bool XonoticCharmap_cellIsValid(entity me, vector cell)
110 {
111         if(charmap_cellToChar(me, cell) == "")
112                 return false;
113         return true;
114 }
115
116 void XonoticCharmap_cellDraw(entity me, vector cell, vector cellPos)
117 {
118         draw_CenterText(cellPos + me.charOffset, charmap_cellToChar(me, cell), me.realFontSize, SKINCOLOR_CHARMAP_CHAR, SKINALPHA_CHARMAP_CHAR, 0);
119 }
120
121 void XonoticCharmap_focusLeave(entity me)
122 {
123         me.inputBox.saveCvars(me.inputBox);
124 }
125 #endif