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