1#include "charmap.qh"
2
3#include "inputbox.qh"
4
5string CHARMAP =
6	"★◆■▮▰▬◣◤◥◢◀▲▶▼"
7	"��������������⌖❇❈←↑→↓"
8	"☠☣☢⚛⚡⚙��❌⚠⛔❰❱❲❳"
9	"������������������������❤ "
10	"������������������������  "
11	"\xEE\x83\xA1\xEE\x83\xA2\xEE\x83\xA3\xEE\x83\xA4\xEE\x83\xA5\xEE\x83\xA6\xEE\x83\xA7"
12	"\xEE\x83\xA8\xEE\x83\xA9\xEE\x83\xAA\xEE\x83\xAB\xEE\x83\xAC\xEE\x83\xAD\xEE\x83\xAE"
13	"\xEE\x83\xAF\xEE\x83\xB0\xEE\x83\xB1\xEE\x83\xB2\xEE\x83\xB3\xEE\x83\xB4\xEE\x83\xB5"
14	"\xEE\x83\xB6\xEE\x83\xB7\xEE\x83\xB8\xEE\x83\xB9\xEE\x83\xBA\xEE\x80\x90\xEE\x80\x91"
15	"\xEE\x82\xB0\xEE\x82\xB1\xEE\x82\xB2\xEE\x82\xB3\xEE\x82\xB4\xEE\x82\xB5\xEE\x82\xB6"
16	"\xEE\x82\xB7\xEE\x82\xB8\xEE\x82\xB9\xEE\x82\xA1\xEE\x82\xBF\xEE\x82\xA6\xEE\x82\xA5"
17	"\xEE\x83\x81\xEE\x83\x82\xEE\x83\x83\xEE\x83\x84\xEE\x83\x85\xEE\x83\x86\xEE\x83\x87"
18	"\xEE\x83\x88\xEE\x83\x89\xEE\x83\x8A\xEE\x83\x8B\xEE\x83\x8C\xEE\x83\x8D\xEE\x83\x8E"
19	"\xEE\x83\x8F\xEE\x83\x90\xEE\x83\x91\xEE\x83\x92\xEE\x83\x93\xEE\x83\x94\xEE\x83\x95"
20	"\xEE\x83\x96\xEE\x83\x97\xEE\x83\x98\xEE\x83\x99\xEE\x83\x9A\xEE\x81\x9B\xEE\x81\x9D";
21
22string charmap_cellToChar(entity me, vector cell)
23{
24	string character = substring(CHARMAP, cell.y * me.columns + cell.x, 1);
25
26	if(character != " ")
27		return character;
28	else
29		return "";
30}
31
32entity makeXonoticCharmap(entity controlledInputBox)
33{
34	entity me;
35	me = NEW(XonoticCharmap);
36	me.configureXonoticCharmap(me, controlledInputBox);
37	return me;
38}
39
40void XonoticCharmap_configureXonoticCharmap(entity me, entity controlledInputBox)
41{
42	me.inputBox = controlledInputBox;
43	me.configureXonoticPicker(me);
44}
45
46void XonoticCharmap_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
47{
48	SUPER(XonoticCharmap).resizeNotify(me, relOrigin, relSize, absOrigin, absSize);
49
50	float maxFontWidth = SKINFONTSIZE_NORMAL / absSize.x;
51	float maxFontHeight = SKINFONTSIZE_NORMAL / absSize.y;
52
53	if((me.realCellSize.x * absSize.x) > (me.realCellSize.y * absSize.y))
54	{
55		me.realFontSize_x = me.realCellSize.y * absSize.y / absSize.x;
56		me.realFontSize_y = me.realCellSize.y;
57	}
58	else
59	{
60		me.realFontSize_x = me.realCellSize.x;
61		me.realFontSize_y = me.realCellSize.x * absSize.x / absSize.y;
62	}
63
64	if(me.realFontSize.x > maxFontWidth || me.realFontSize.y > maxFontHeight)
65		me.realFontSize = eX * maxFontWidth + eY * maxFontHeight;
66
67	me.charOffset = eX * me.realCellSize.x / 2 + eY * ((me.realCellSize.y - me.realFontSize.y) / 2);
68}
69
70float XonoticCharmap_keyDown(entity me, float key, float ascii, float shift)
71{
72	if(SUPER(XonoticCharmap).keyDown(me, key, ascii, shift))
73		return 1;
74	return me.inputBox.keyDown(me.inputBox, key, ascii, shift);
75}
76
77void XonoticCharmap_cellSelect(entity me, vector cell)
78{
79	string character = charmap_cellToChar(me, cell);
80	if(character != "")
81	{
82		me.inputBox.enterText(me.inputBox, character);
83		if(me.inputBox.applyButton)
84			me.inputBox.applyButton.disabled = false;
85	}
86}
87
88bool XonoticCharmap_cellIsValid(entity me, vector cell)
89{
90	if(charmap_cellToChar(me, cell) == "")
91		return false;
92	return true;
93}
94
95void XonoticCharmap_cellDraw(entity me, vector cell, vector cellPos)
96{
97	draw_CenterText(cellPos + me.charOffset, charmap_cellToChar(me, cell), me.realFontSize, SKINCOLOR_CHARMAP_CHAR, SKINALPHA_CHARMAP_CHAR, 0);
98}
99
100void XonoticCharmap_focusLeave(entity me)
101{
102	me.inputBox.saveCvars(me.inputBox);
103}
104