Advertisement
Guest User

keyboard.cpp

a guest
Jan 23rd, 2020
714
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 31.67 KB | None | 0 0
  1. #include "main.h"
  2.  
  3. #include "gui/gui.h"
  4. #include "game/game.h"
  5. #include "keyboard.h"
  6.  
  7. extern CGUI *pGUI;
  8.  
  9. CKeyBoard::CKeyBoard()
  10. {
  11. Log("Initalizing KeyBoard..");
  12.  
  13. ImGuiIO& io = ImGui::GetIO();
  14. m_Size = ImVec2(io.DisplaySize.x, io.DisplaySize.y * 0.55);
  15. m_Pos = ImVec2(0, io.DisplaySize.y * (1-0.55));
  16. m_fFontSize = pGUI->ScaleY(70.0f);
  17. m_fKeySizeY = m_Size.y / 5;
  18.  
  19. Log("Size: %f, %f. Pos: %f, %f", m_Size.x, m_Size.y, m_Pos.x, m_Pos.y);
  20. Log("font size: %f. Key's height: %f", m_fFontSize, m_fKeySizeY);
  21.  
  22. m_bEnable = false;
  23. m_iLayout = LAYOUT_ENG;
  24. m_iCase = LOWER_CASE;
  25. m_iPushedKey = -1;
  26.  
  27. m_utf8Input[0] = '\0';
  28. m_iInputOffset = 0;
  29.  
  30. InitENG();
  31. InitNUM();
  32. }
  33.  
  34. CKeyBoard::~CKeyBoard()
  35. {
  36. }
  37.  
  38. void CKeyBoard::Render()
  39. {
  40. if(!m_bEnable) return;
  41.  
  42. ImGuiIO& io = ImGui::GetIO();
  43.  
  44. // background
  45. ImGui::GetOverlayDrawList()->AddRectFilled( m_Pos, ImVec2(m_Size.x, io.DisplaySize.y), 0xB0000000);
  46.  
  47. // input string
  48. ImGui::GetOverlayDrawList()->AddText(pGUI->GetFont(), m_fFontSize,
  49. ImVec2(m_Pos.x + m_Size.x * 0.02, m_Pos.y + m_Pos.y * 0.05), 0xFFFFFFFF, m_utf8Input);
  50.  
  51. // dividing line
  52. ImGui::GetOverlayDrawList()->AddLine(
  53. ImVec2(m_Pos.x, m_Pos.y + m_fKeySizeY),
  54. ImVec2(m_Size.x, m_Pos.y + m_fKeySizeY), 0xFF3291F5);
  55.  
  56. float fKeySizeY = m_fKeySizeY;
  57.  
  58. for(int i=0; i<4; i++)
  59. {
  60. for( auto key : m_Rows[m_iLayout][i])
  61. {
  62. if(key.id == m_iPushedKey && key.type != KEY_SPACE)
  63. ImGui::GetOverlayDrawList()->AddRectFilled(
  64. key.pos,
  65. ImVec2(key.pos.x + key.width, key.pos.y + fKeySizeY),
  66. 0xFF3291F5);
  67.  
  68. switch(key.type)
  69. {
  70. case KEY_DEFAULT:
  71. ImGui::GetOverlayDrawList()->AddText(pGUI->GetFont(), m_fFontSize, key.symPos, 0xFFFFFFFF, key.name[m_iCase]);
  72. break;
  73.  
  74. case KEY_SHIFT:
  75. ImGui::GetOverlayDrawList()->AddTriangleFilled(
  76. ImVec2(key.pos.x + key.width * 0.37, key.pos.y + fKeySizeY * 0.50),
  77. ImVec2(key.pos.x + key.width * 0.50, key.pos.y + fKeySizeY * 0.25),
  78. ImVec2(key.pos.x + key.width * 0.63, key.pos.y + fKeySizeY * 0.50),
  79. m_iCase == LOWER_CASE ? 0xFF8A8886 : 0xFF3291F5);
  80. ImGui::GetOverlayDrawList()->AddRectFilled(
  81. ImVec2(key.pos.x + key.width * 0.44, key.pos.y + fKeySizeY * 0.5 - 1),
  82. ImVec2(key.pos.x + key.width * 0.56, key.pos.y + fKeySizeY * 0.68),
  83. m_iCase == LOWER_CASE ? 0xFF8A8886 : 0xFF3291F5);
  84. break;
  85.  
  86. case KEY_BACKSPACE:
  87. static ImVec2 points[5];
  88. points[0] = ImVec2(key.pos.x + key.width * 0.35, key.pos.y + fKeySizeY * 0.5);
  89. points[1] = ImVec2(key.pos.x + key.width * 0.45, key.pos.y + fKeySizeY * 0.25);
  90. points[2] = ImVec2(key.pos.x + key.width * 0.65, key.pos.y + fKeySizeY * 0.25);
  91. points[3] = ImVec2(key.pos.x + key.width * 0.65, key.pos.y + fKeySizeY * 0.65);
  92. points[4] = ImVec2(key.pos.x + key.width * 0.45, key.pos.y + fKeySizeY * 0.65);
  93. ImGui::GetOverlayDrawList()->AddConvexPolyFilled(points, 5, 0xFF8A8886);
  94. break;
  95.  
  96. case KEY_SWITCH:
  97. ImGui::GetOverlayDrawList()->AddText(pGUI->GetFont(), m_fFontSize, key.symPos, 0xFFFFFFFF, "lang");
  98. break;
  99.  
  100. case KEY_SPACE:
  101. ImGui::GetOverlayDrawList()->AddRectFilled(
  102. ImVec2(key.pos.x + key.width * 0.07, key.pos.y + fKeySizeY * 0.3),
  103. ImVec2(key.pos.x + key.width * 0.93, key.pos.y + fKeySizeY * 0.7),
  104. key.id == m_iPushedKey ? 0xFF3291F5 : 0xFF8A8886);
  105. break;
  106.  
  107. case KEY_SEND:
  108. ImGui::GetOverlayDrawList()->AddTriangleFilled(
  109. ImVec2(key.pos.x + key.width * 0.3, key.pos.y + fKeySizeY * 0.25),
  110. ImVec2(key.pos.x + key.width * 0.3, key.pos.y + fKeySizeY * 0.75),
  111. ImVec2(key.pos.x + key.width * 0.7, key.pos.y + fKeySizeY * 0.50),
  112. 0xFF8A8886);
  113. break;
  114. }
  115. }
  116. }
  117. }
  118.  
  119. void CKeyBoard::Open(keyboard_callback* handler)
  120. {
  121. if(handler == nullptr) return;
  122.  
  123. Close();
  124.  
  125. m_pHandler = handler;
  126. m_bEnable = true;
  127. }
  128.  
  129. void CKeyBoard::Close()
  130. {
  131. m_bEnable = false;
  132.  
  133. m_sInput.clear();
  134. m_iInputOffset = 0;
  135. m_utf8Input[0] = 0;
  136. m_iCase = LOWER_CASE;
  137. m_iPushedKey = -1;
  138. m_pHandler = nullptr;
  139.  
  140. return;
  141. }
  142.  
  143. bool CKeyBoard::OnTouchEvent(int type, bool multi, int x, int y)
  144. {
  145. static bool bWannaClose = false;
  146.  
  147. if(!m_bEnable) return true;
  148.  
  149. if(type == TOUCH_PUSH && y < m_Pos.y) bWannaClose = true;
  150. if(type == TOUCH_POP && y < m_Pos.y && bWannaClose)
  151. {
  152. bWannaClose = false;
  153. Close();
  154. return false;
  155. }
  156.  
  157. m_iPushedKey = -1;
  158.  
  159. kbKey* key = GetKeyFromPos(x, y);
  160. if(!key) return false;
  161.  
  162. switch(type)
  163. {
  164. case TOUCH_PUSH:
  165. m_iPushedKey = key->id;
  166. break;
  167.  
  168. case TOUCH_MOVE:
  169. m_iPushedKey = key->id;
  170. break;
  171.  
  172. case TOUCH_POP:
  173. HandleInput(*key);
  174. break;
  175. }
  176.  
  177. return false;
  178. }
  179.  
  180. void CKeyBoard::HandleInput(kbKey &key)
  181. {
  182. switch(key.type)
  183. {
  184. case KEY_DEFAULT:
  185. case KEY_SPACE:
  186. AddCharToInput(key.code[m_iCase]);
  187. break;
  188.  
  189. case KEY_SWITCH:
  190. m_iLayout++;
  191. if(m_iLayout >= 2) m_iLayout = 0;
  192. m_iCase = LOWER_CASE;
  193. break;
  194.  
  195. case KEY_BACKSPACE:
  196. DeleteCharFromInput();
  197. break;
  198.  
  199. case KEY_SHIFT:
  200. m_iCase ^= 1;
  201. break;
  202.  
  203. case KEY_SEND:
  204. Send();
  205. break;
  206. }
  207. }
  208.  
  209. void CKeyBoard::AddCharToInput(char sym)
  210. {
  211. if(m_sInput.length() < MAX_INPUT_LEN && sym)
  212. {
  213. m_sInput.push_back(sym);
  214. cp1251_to_utf8(m_utf8Input, &m_sInput.c_str()[m_iInputOffset]);
  215.  
  216. check:
  217. ImVec2 textSize = pGUI->GetFont()->CalcTextSizeA(m_fFontSize, FLT_MAX, 0.0f, m_utf8Input, nullptr, nullptr);
  218. if(textSize.x >= (m_Size.x - (m_Size.x * 0.04)))
  219. {
  220. m_iInputOffset++;
  221. cp1251_to_utf8(m_utf8Input, &m_sInput.c_str()[m_iInputOffset]);
  222. goto check;
  223. }
  224. }
  225. }
  226.  
  227. void CKeyBoard::DeleteCharFromInput()
  228. {
  229. if (!m_sInput.length()) return;
  230.  
  231. ImVec2 textSize;
  232. m_sInput.pop_back();
  233.  
  234. check:
  235. if(m_iInputOffset == 0) goto ret;
  236. cp1251_to_utf8(m_utf8Input, &m_sInput.c_str()[m_iInputOffset-1]);
  237. textSize = pGUI->GetFont()->CalcTextSizeA(m_fFontSize, FLT_MAX, 0.0f, m_utf8Input, nullptr, nullptr);
  238.  
  239. if(textSize.x <= (m_Size.x - (m_Size.x * 0.04)))
  240. {
  241. m_iInputOffset--;
  242. goto check;
  243. }
  244. else
  245. {
  246. ret:
  247. cp1251_to_utf8(m_utf8Input, &m_sInput.c_str()[m_iInputOffset]);
  248. return;
  249. }
  250. }
  251.  
  252. void CKeyBoard::Send()
  253. {
  254. if(m_pHandler) m_pHandler(m_sInput.c_str());
  255. m_bEnable = false;
  256. }
  257.  
  258. kbKey* CKeyBoard::GetKeyFromPos(int x, int y)
  259. {
  260. int iRow = (y-m_Pos.y) / m_fKeySizeY;
  261. if(iRow <= 0) return nullptr;
  262.  
  263. for(auto key : m_Rows[m_iLayout][iRow-1])
  264. {
  265. if( x >= key.pos.x && x <= (key.pos.x + key.width) )
  266. return &key;
  267. }
  268.  
  269. Log("UNKNOWN KEY");
  270. return nullptr;
  271. }
  272.  
  273. void CKeyBoard::InitENG()
  274. {
  275. ImVec2 curPos;
  276. std::vector<kbKey> *row = nullptr;
  277. float defWidth = m_Size.x/10;
  278.  
  279. struct kbKey key;
  280. key.type = KEY_DEFAULT;
  281. key.id = 0;
  282.  
  283. row = &m_Rows[LAYOUT_ENG][0];
  284. curPos = ImVec2(0, m_Pos.y + m_fKeySizeY);
  285.  
  286. // q/Q
  287. key.pos = curPos;
  288. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  289. key.width = defWidth;
  290. key.code[LOWER_CASE] = 'q';
  291. key.code[UPPER_CASE] = 'Q';
  292. cp1251_to_utf8(key.name[LOWER_CASE], "q");
  293. cp1251_to_utf8(key.name[UPPER_CASE], "Q");
  294. key.id++;
  295. row->push_back(key);
  296. curPos.x += key.width;
  297.  
  298. // w/W
  299. key.pos = curPos;
  300. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  301. key.width = defWidth;
  302. key.code[LOWER_CASE] = 'w';
  303. key.code[UPPER_CASE] = 'W';
  304. cp1251_to_utf8(key.name[LOWER_CASE], "w");
  305. cp1251_to_utf8(key.name[UPPER_CASE], "W");
  306. key.id++;
  307. row->push_back(key);
  308. curPos.x += key.width;
  309.  
  310. // e/E
  311. key.pos = curPos;
  312. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  313. key.width = defWidth;
  314. key.code[LOWER_CASE] = 'e';
  315. key.code[UPPER_CASE] = 'E';
  316. cp1251_to_utf8(key.name[LOWER_CASE], "e");
  317. cp1251_to_utf8(key.name[UPPER_CASE], "E");
  318. key.id++;
  319. row->push_back(key);
  320. curPos.x += key.width;
  321.  
  322. // r/R
  323. key.pos = curPos;
  324. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  325. key.width = defWidth;
  326. key.code[LOWER_CASE] = 'r';
  327. key.code[UPPER_CASE] = 'R';
  328. cp1251_to_utf8(key.name[LOWER_CASE], "r");
  329. cp1251_to_utf8(key.name[UPPER_CASE], "R");
  330. key.id++;
  331. row->push_back(key);
  332. curPos.x += key.width;
  333.  
  334. // t/T
  335. key.pos = curPos;
  336. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  337. key.width = defWidth;
  338. key.code[LOWER_CASE] = 't';
  339. key.code[UPPER_CASE] = 'T';
  340. cp1251_to_utf8(key.name[LOWER_CASE], "t");
  341. cp1251_to_utf8(key.name[UPPER_CASE], "T");
  342. key.id++;
  343. row->push_back(key);
  344. curPos.x += key.width;
  345.  
  346. // y/Y
  347. key.pos = curPos;
  348. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  349. key.width = defWidth;
  350. key.code[LOWER_CASE] = 'y';
  351. key.code[UPPER_CASE] = 'Y';
  352. cp1251_to_utf8(key.name[LOWER_CASE], "y");
  353. cp1251_to_utf8(key.name[UPPER_CASE], "Y");
  354. key.id++;
  355. row->push_back(key);
  356. curPos.x += key.width;
  357.  
  358. // u/U
  359. key.pos = curPos;
  360. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  361. key.width = defWidth;
  362. key.code[LOWER_CASE] = 'u';
  363. key.code[UPPER_CASE] = 'U';
  364. cp1251_to_utf8(key.name[LOWER_CASE], "u");
  365. cp1251_to_utf8(key.name[UPPER_CASE], "U");
  366. key.id++;
  367. row->push_back(key);
  368. curPos.x += key.width;
  369.  
  370. // i/I
  371. key.pos = curPos;
  372. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  373. key.width = defWidth;
  374. key.code[LOWER_CASE] = 'i';
  375. key.code[UPPER_CASE] = 'I';
  376. cp1251_to_utf8(key.name[LOWER_CASE], "i");
  377. cp1251_to_utf8(key.name[UPPER_CASE], "I");
  378. key.id++;
  379. row->push_back(key);
  380. curPos.x += key.width;
  381.  
  382. // o/O
  383. key.pos = curPos;
  384. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  385. key.width = defWidth;
  386. key.code[LOWER_CASE] = 'o';
  387. key.code[UPPER_CASE] = 'O';
  388. cp1251_to_utf8(key.name[LOWER_CASE], "o");
  389. cp1251_to_utf8(key.name[UPPER_CASE], "O");
  390. key.id++;
  391. row->push_back(key);
  392. curPos.x += key.width;
  393.  
  394. // p/P
  395. key.pos = curPos;
  396. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  397. key.width = defWidth;
  398. key.code[LOWER_CASE] = 'p';
  399. key.code[UPPER_CASE] = 'P';
  400. cp1251_to_utf8(key.name[LOWER_CASE], "p");
  401. cp1251_to_utf8(key.name[UPPER_CASE], "P");
  402. key.id++;
  403. row->push_back(key);
  404. curPos.x += key.width;
  405.  
  406. row = &m_Rows[LAYOUT_ENG][1];
  407. curPos.x = defWidth * 0.5;
  408. curPos.y += m_fKeySizeY;
  409.  
  410. // a/A
  411. key.pos = curPos;
  412. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  413. key.width = defWidth;
  414. key.code[LOWER_CASE] = 'a';
  415. key.code[UPPER_CASE] = 'A';
  416. cp1251_to_utf8(key.name[LOWER_CASE], "a");
  417. cp1251_to_utf8(key.name[UPPER_CASE], "A");
  418. key.id++;
  419. row->push_back(key);
  420. curPos.x += key.width;
  421.  
  422. // s/S
  423. key.pos = curPos;
  424. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  425. key.width = defWidth;
  426. key.code[LOWER_CASE] = 's';
  427. key.code[UPPER_CASE] = 'S';
  428. cp1251_to_utf8(key.name[LOWER_CASE], "s");
  429. cp1251_to_utf8(key.name[UPPER_CASE], "S");
  430. key.id++;
  431. row->push_back(key);
  432. curPos.x += key.width;
  433.  
  434. // d/D
  435. key.pos = curPos;
  436. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  437. key.width = defWidth;
  438. key.code[LOWER_CASE] = 'd';
  439. key.code[UPPER_CASE] = 'D';
  440. cp1251_to_utf8(key.name[LOWER_CASE], "d");
  441. cp1251_to_utf8(key.name[UPPER_CASE], "D");
  442. key.id++;
  443. row->push_back(key);
  444. curPos.x += key.width;
  445.  
  446. // f/F
  447. key.pos = curPos;
  448. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  449. key.width = defWidth;
  450. key.code[LOWER_CASE] = 'f';
  451. key.code[UPPER_CASE] = 'F';
  452. cp1251_to_utf8(key.name[LOWER_CASE], "f");
  453. cp1251_to_utf8(key.name[UPPER_CASE], "F");
  454. key.id++;
  455. row->push_back(key);
  456. curPos.x += key.width;
  457.  
  458. // g/G
  459. key.pos = curPos;
  460. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  461. key.width = defWidth;
  462. key.code[LOWER_CASE] = 'g';
  463. key.code[UPPER_CASE] = 'G';
  464. cp1251_to_utf8(key.name[LOWER_CASE], "g");
  465. cp1251_to_utf8(key.name[UPPER_CASE], "G");
  466. key.id++;
  467. row->push_back(key);
  468. curPos.x += key.width;
  469.  
  470. // h/H
  471. key.pos = curPos;
  472. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  473. key.width = defWidth;
  474. key.code[LOWER_CASE] = 'h';
  475. key.code[UPPER_CASE] = 'H';
  476. cp1251_to_utf8(key.name[LOWER_CASE], "h");
  477. cp1251_to_utf8(key.name[UPPER_CASE], "H");
  478. key.id++;
  479. row->push_back(key);
  480. curPos.x += key.width;
  481.  
  482. // j/J
  483. key.pos = curPos;
  484. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  485. key.width = defWidth;
  486. key.code[LOWER_CASE] = 'j';
  487. key.code[UPPER_CASE] = 'J';
  488. cp1251_to_utf8(key.name[LOWER_CASE], "j");
  489. cp1251_to_utf8(key.name[UPPER_CASE], "J");
  490. key.id++;
  491. row->push_back(key);
  492. curPos.x += key.width;
  493.  
  494. // k/K
  495. key.pos = curPos;
  496. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  497. key.width = defWidth;
  498. key.code[LOWER_CASE] = 'k';
  499. key.code[UPPER_CASE] = 'K';
  500. cp1251_to_utf8(key.name[LOWER_CASE], "k");
  501. cp1251_to_utf8(key.name[UPPER_CASE], "K");
  502. key.id++;
  503. row->push_back(key);
  504. curPos.x += key.width;
  505.  
  506. // l/L
  507. key.pos = curPos;
  508. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  509. key.width = defWidth;
  510. key.code[LOWER_CASE] = 'l';
  511. key.code[UPPER_CASE] = 'L';
  512. cp1251_to_utf8(key.name[LOWER_CASE], "l");
  513. cp1251_to_utf8(key.name[UPPER_CASE], "L");
  514. key.id++;
  515. row->push_back(key);
  516. curPos.x += key.width;
  517.  
  518. // 3-� ���
  519. row = &m_Rows[LAYOUT_ENG][2];
  520. curPos.x = 0;
  521. curPos.y += m_fKeySizeY;
  522.  
  523. // Shift
  524. key.pos = curPos;
  525. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  526. key.width = defWidth * 1.5;
  527. key.code[LOWER_CASE] = 0;
  528. key.code[UPPER_CASE] = 0;
  529. key.name[LOWER_CASE][0] = 0;
  530. key.name[UPPER_CASE][0] = 0;
  531. key.type = KEY_SHIFT;
  532. key.id++;
  533. row->push_back(key);
  534. curPos.x += key.width;
  535.  
  536. key.type = KEY_DEFAULT;
  537.  
  538. // z/Z
  539. key.pos = curPos;
  540. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  541. key.width = defWidth;
  542. key.code[LOWER_CASE] = 'z';
  543. key.code[UPPER_CASE] = 'Z';
  544. cp1251_to_utf8(key.name[LOWER_CASE], "z");
  545. cp1251_to_utf8(key.name[UPPER_CASE], "Z");
  546. key.id++;
  547. row->push_back(key);
  548. curPos.x += key.width;
  549.  
  550. // x/X
  551. key.pos = curPos;
  552. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  553. key.width = defWidth;
  554. key.code[LOWER_CASE] = 'x';
  555. key.code[UPPER_CASE] = 'X';
  556. cp1251_to_utf8(key.name[LOWER_CASE], "x");
  557. cp1251_to_utf8(key.name[UPPER_CASE], "X");
  558. key.id++;
  559. row->push_back(key);
  560. curPos.x += key.width;
  561.  
  562. // c/C
  563. key.pos = curPos;
  564. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  565. key.width = defWidth;
  566. key.code[LOWER_CASE] = 'c';
  567. key.code[UPPER_CASE] = 'C';
  568. cp1251_to_utf8(key.name[LOWER_CASE], "c");
  569. cp1251_to_utf8(key.name[UPPER_CASE], "C");
  570. key.id++;
  571. row->push_back(key);
  572. curPos.x += key.width;
  573.  
  574. // v/V
  575. key.pos = curPos;
  576. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  577. key.width = defWidth;
  578. key.code[LOWER_CASE] = 'v';
  579. key.code[UPPER_CASE] = 'V';
  580. cp1251_to_utf8(key.name[LOWER_CASE], "v");
  581. cp1251_to_utf8(key.name[UPPER_CASE], "V");
  582. key.id++;
  583. row->push_back(key);
  584. curPos.x += key.width;
  585.  
  586. // b/B
  587. key.pos = curPos;
  588. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  589. key.width = defWidth;
  590. key.code[LOWER_CASE] = 'b';
  591. key.code[UPPER_CASE] = 'B';
  592. cp1251_to_utf8(key.name[LOWER_CASE], "b");
  593. cp1251_to_utf8(key.name[UPPER_CASE], "B");
  594. key.id++;
  595. row->push_back(key);
  596. curPos.x += key.width;
  597.  
  598. // n/N
  599. key.pos = curPos;
  600. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  601. key.width = defWidth;
  602. key.code[LOWER_CASE] = 'n';
  603. key.code[UPPER_CASE] = 'N';
  604. cp1251_to_utf8(key.name[LOWER_CASE], "n");
  605. cp1251_to_utf8(key.name[UPPER_CASE], "N");
  606. key.id++;
  607. row->push_back(key);
  608. curPos.x += key.width;
  609.  
  610. // m/M
  611. key.pos = curPos;
  612. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  613. key.width = defWidth;
  614. key.code[LOWER_CASE] = 'm';
  615. key.code[UPPER_CASE] = 'M';
  616. cp1251_to_utf8(key.name[LOWER_CASE], "m");
  617. cp1251_to_utf8(key.name[UPPER_CASE], "M");
  618. key.id++;
  619. row->push_back(key);
  620. curPos.x += key.width;
  621.  
  622. // delete
  623. key.pos = curPos;
  624. key.symPos = ImVec2(0,0);
  625. key.width = defWidth * 1.5;
  626. key.code[LOWER_CASE] = 0;
  627. key.code[UPPER_CASE] = 0;
  628. key.name[LOWER_CASE][0] = 0;
  629. key.name[UPPER_CASE][0] = 0;
  630. key.type = KEY_BACKSPACE;
  631. key.id++;
  632. row->push_back(key);
  633.  
  634. // 4
  635. row = &m_Rows[LAYOUT_ENG][3];
  636. curPos.x = 0;
  637. curPos.y += m_fKeySizeY;
  638.  
  639. key.type = KEY_DEFAULT;
  640.  
  641. // slash (/)
  642. key.pos = curPos;
  643. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  644. key.width = defWidth;
  645. key.code[LOWER_CASE] = '/';
  646. key.code[UPPER_CASE] = '/';
  647. cp1251_to_utf8(key.name[LOWER_CASE], "/");
  648. cp1251_to_utf8(key.name[UPPER_CASE], "/");
  649. key.id++;
  650. row->push_back(key);
  651. curPos.x += key.width;
  652.  
  653. // comma (,)
  654. key.pos = curPos;
  655. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  656. key.width = defWidth;
  657. key.code[LOWER_CASE] = ',';
  658. key.code[UPPER_CASE] = ',';
  659. cp1251_to_utf8(key.name[LOWER_CASE], ",");
  660. cp1251_to_utf8(key.name[UPPER_CASE], ",");
  661. key.id++;
  662. row->push_back(key);
  663. curPos.x += key.width;
  664.  
  665. // switch language
  666. key.pos = curPos;
  667. key.symPos = ImVec2(curPos.x + defWidth * 0.2, curPos.y + m_fKeySizeY * 0.2);
  668. key.width = defWidth;
  669. key.code[LOWER_CASE] = 0;
  670. key.code[UPPER_CASE] = 0;
  671. key.name[LOWER_CASE][0] = 0;
  672. key.name[UPPER_CASE][0] = 0;
  673. key.type = KEY_SWITCH;
  674. key.id++;
  675. row->push_back(key);
  676. curPos.x += key.width;
  677.  
  678. // Space
  679. key.pos = curPos;
  680. key.symPos = ImVec2(0,0);
  681. key.width = defWidth * 4;
  682. key.code[LOWER_CASE] = ' ';
  683. key.code[UPPER_CASE] = ' ';
  684. key.name[LOWER_CASE][0] = 0;
  685. key.name[UPPER_CASE][0] = 0;
  686. key.type = KEY_SPACE;
  687. key.id++;
  688. row->push_back(key);
  689. curPos.x += key.width;
  690.  
  691. key.type = KEY_DEFAULT;
  692.  
  693. // ?
  694. key.pos = curPos;
  695. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  696. key.width = defWidth;
  697. key.code[LOWER_CASE] = '?';
  698. key.code[UPPER_CASE] = '?';
  699. cp1251_to_utf8(key.name[LOWER_CASE], "?");
  700. cp1251_to_utf8(key.name[UPPER_CASE], "?");
  701. key.id++;
  702. row->push_back(key);
  703. curPos.x += key.width;
  704.  
  705. // !
  706. key.pos = curPos;
  707. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  708. key.width = defWidth;
  709. key.code[LOWER_CASE] = '!';
  710. key.code[UPPER_CASE] = '!';
  711. cp1251_to_utf8(key.name[LOWER_CASE], "!");
  712. cp1251_to_utf8(key.name[UPPER_CASE], "!");
  713. key.id++;
  714. row->push_back(key);
  715. curPos.x += key.width;
  716.  
  717. // Send
  718. key.pos = curPos;
  719. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  720. key.width = defWidth;
  721. key.code[LOWER_CASE] = 0;
  722. key.code[UPPER_CASE] = 0;
  723. key.name[LOWER_CASE][0] = 0;
  724. key.name[UPPER_CASE][0] = 0;
  725. key.type = KEY_SEND;
  726. key.id++;
  727. row->push_back(key);
  728. curPos.x += key.width;
  729.  
  730. return;
  731. }
  732.  
  733. void CKeyBoard::InitNUM()
  734. {
  735. ImVec2 curPos;
  736. std::vector<kbKey> *row = nullptr;
  737. float defWidth = m_Size.x/10;
  738.  
  739. struct kbKey key;
  740. key.type = KEY_DEFAULT;
  741. key.id = 0;
  742.  
  743. // 1-�� ���
  744. row = &m_Rows[LAYOUT_NUM][0];
  745. curPos = ImVec2(0, m_Pos.y + m_fKeySizeY);
  746.  
  747. // 1
  748. key.pos = curPos;
  749. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  750. key.width = defWidth;
  751. key.code[LOWER_CASE] = '1';
  752. key.code[UPPER_CASE] = '1';
  753. cp1251_to_utf8(key.name[LOWER_CASE], "1");
  754. cp1251_to_utf8(key.name[UPPER_CASE], "1");
  755. key.id++;
  756. row->push_back(key);
  757. curPos.x += key.width;
  758.  
  759. // 2
  760. key.pos = curPos;
  761. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  762. key.width = defWidth;
  763. key.code[LOWER_CASE] = '2';
  764. key.code[UPPER_CASE] = '2';
  765. cp1251_to_utf8(key.name[LOWER_CASE], "2");
  766. cp1251_to_utf8(key.name[UPPER_CASE], "2");
  767. key.id++;
  768. row->push_back(key);
  769. curPos.x += key.width;
  770.  
  771. // 3
  772. key.pos = curPos;
  773. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  774. key.width = defWidth;
  775. key.code[LOWER_CASE] = '3';
  776. key.code[UPPER_CASE] = '3';
  777. cp1251_to_utf8(key.name[LOWER_CASE], "3");
  778. cp1251_to_utf8(key.name[UPPER_CASE], "3");
  779. key.id++;
  780. row->push_back(key);
  781. curPos.x += key.width;
  782.  
  783. // 4
  784. key.pos = curPos;
  785. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  786. key.width = defWidth;
  787. key.code[LOWER_CASE] = '4';
  788. key.code[UPPER_CASE] = '4';
  789. cp1251_to_utf8(key.name[LOWER_CASE], "4");
  790. cp1251_to_utf8(key.name[UPPER_CASE], "4");
  791. key.id++;
  792. row->push_back(key);
  793. curPos.x += key.width;
  794.  
  795. // 5
  796. key.pos = curPos;
  797. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  798. key.width = defWidth;
  799. key.code[LOWER_CASE] = '5';
  800. key.code[UPPER_CASE] = '5';
  801. cp1251_to_utf8(key.name[LOWER_CASE], "5");
  802. cp1251_to_utf8(key.name[UPPER_CASE], "5");
  803. key.id++;
  804. row->push_back(key);
  805. curPos.x += key.width;
  806.  
  807. // 6
  808. key.pos = curPos;
  809. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  810. key.width = defWidth;
  811. key.code[LOWER_CASE] = '6';
  812. key.code[UPPER_CASE] = '6';
  813. cp1251_to_utf8(key.name[LOWER_CASE], "6");
  814. cp1251_to_utf8(key.name[UPPER_CASE], "6");
  815. key.id++;
  816. row->push_back(key);
  817. curPos.x += key.width;
  818.  
  819. // 7
  820. key.pos = curPos;
  821. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  822. key.width = defWidth;
  823. key.code[LOWER_CASE] = '7';
  824. key.code[UPPER_CASE] = '7';
  825. cp1251_to_utf8(key.name[LOWER_CASE], "7");
  826. cp1251_to_utf8(key.name[UPPER_CASE], "7");
  827. key.id++;
  828. row->push_back(key);
  829. curPos.x += key.width;
  830.  
  831. // 8
  832. key.pos = curPos;
  833. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  834. key.width = defWidth;
  835. key.code[LOWER_CASE] = '8';
  836. key.code[UPPER_CASE] = '8';
  837. cp1251_to_utf8(key.name[LOWER_CASE], "8");
  838. cp1251_to_utf8(key.name[UPPER_CASE], "8");
  839. key.id++;
  840. row->push_back(key);
  841. curPos.x += key.width;
  842.  
  843. // 9
  844. key.pos = curPos;
  845. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  846. key.width = defWidth;
  847. key.code[LOWER_CASE] = '9';
  848. key.code[UPPER_CASE] = '9';
  849. cp1251_to_utf8(key.name[LOWER_CASE], "9");
  850. cp1251_to_utf8(key.name[UPPER_CASE], "9");
  851. key.id++;
  852. row->push_back(key);
  853. curPos.x += key.width;
  854.  
  855. // 0
  856. key.pos = curPos;
  857. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  858. key.width = defWidth;
  859. key.code[LOWER_CASE] = '0';
  860. key.code[UPPER_CASE] = '0';
  861. cp1251_to_utf8(key.name[LOWER_CASE], "0");
  862. cp1251_to_utf8(key.name[UPPER_CASE], "0");
  863. key.id++;
  864. row->push_back(key);
  865. curPos.x += key.width;
  866.  
  867. // 2-� ���
  868. row = &m_Rows[LAYOUT_NUM][1];
  869. curPos.x = 0;
  870. curPos.y += m_fKeySizeY;
  871.  
  872. // @
  873. key.pos = curPos;
  874. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  875. key.width = defWidth;
  876. key.code[LOWER_CASE] = '@';
  877. key.code[UPPER_CASE] = '@';
  878. cp1251_to_utf8(key.name[LOWER_CASE], "@");
  879. cp1251_to_utf8(key.name[UPPER_CASE], "@");
  880. key.id++;
  881. row->push_back(key);
  882. curPos.x += key.width;
  883.  
  884. // #
  885. key.pos = curPos;
  886. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  887. key.width = defWidth;
  888. key.code[LOWER_CASE] = '#';
  889. key.code[UPPER_CASE] = '#';
  890. cp1251_to_utf8(key.name[LOWER_CASE], "#");
  891. cp1251_to_utf8(key.name[UPPER_CASE], "#");
  892. key.id++;
  893. row->push_back(key);
  894. curPos.x += key.width;
  895.  
  896. // $
  897. key.pos = curPos;
  898. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  899. key.width = defWidth;
  900. key.code[LOWER_CASE] = '$';
  901. key.code[UPPER_CASE] = '$';
  902. cp1251_to_utf8(key.name[LOWER_CASE], "$");
  903. cp1251_to_utf8(key.name[UPPER_CASE], "$");
  904. key.id++;
  905. row->push_back(key);
  906. curPos.x += key.width;
  907.  
  908. // %
  909. key.pos = curPos;
  910. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  911. key.width = defWidth;
  912. key.code[LOWER_CASE] = '%';
  913. key.code[UPPER_CASE] = '%';
  914. cp1251_to_utf8(key.name[LOWER_CASE], "%");
  915. cp1251_to_utf8(key.name[UPPER_CASE], "%");
  916. key.id++;
  917. row->push_back(key);
  918. curPos.x += key.width;
  919.  
  920. // "
  921. key.pos = curPos;
  922. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  923. key.width = defWidth;
  924. key.code[LOWER_CASE] = '"';
  925. key.code[UPPER_CASE] = '"';
  926. cp1251_to_utf8(key.name[LOWER_CASE], "\"");
  927. cp1251_to_utf8(key.name[UPPER_CASE], "\"");
  928. key.id++;
  929. row->push_back(key);
  930. curPos.x += key.width;
  931.  
  932. // *
  933. key.pos = curPos;
  934. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  935. key.width = defWidth;
  936. key.code[LOWER_CASE] = '*';
  937. key.code[UPPER_CASE] = '*';
  938. cp1251_to_utf8(key.name[LOWER_CASE], "*");
  939. cp1251_to_utf8(key.name[UPPER_CASE], "*");
  940. key.id++;
  941. row->push_back(key);
  942. curPos.x += key.width;
  943.  
  944. // (
  945. key.pos = curPos;
  946. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  947. key.width = defWidth;
  948. key.code[LOWER_CASE] = '(';
  949. key.code[UPPER_CASE] = '(';
  950. cp1251_to_utf8(key.name[LOWER_CASE], "(");
  951. cp1251_to_utf8(key.name[UPPER_CASE], "(");
  952. key.id++;
  953. row->push_back(key);
  954. curPos.x += key.width;
  955.  
  956. // )
  957. key.pos = curPos;
  958. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  959. key.width = defWidth;
  960. key.code[LOWER_CASE] = ')';
  961. key.code[UPPER_CASE] = ')';
  962. cp1251_to_utf8(key.name[LOWER_CASE], ")");
  963. cp1251_to_utf8(key.name[UPPER_CASE], ")");
  964. key.id++;
  965. row->push_back(key);
  966. curPos.x += key.width;
  967.  
  968. // -
  969. key.pos = curPos;
  970. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  971. key.width = defWidth;
  972. key.code[LOWER_CASE] = '-';
  973. key.code[UPPER_CASE] = '-';
  974. cp1251_to_utf8(key.name[LOWER_CASE], "-");
  975. cp1251_to_utf8(key.name[UPPER_CASE], "-");
  976. key.id++;
  977. row->push_back(key);
  978. curPos.x += key.width;
  979.  
  980. // _
  981. key.pos = curPos;
  982. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  983. key.width = defWidth;
  984. key.code[LOWER_CASE] = '_';
  985. key.code[UPPER_CASE] = '_';
  986. cp1251_to_utf8(key.name[LOWER_CASE], "_");
  987. cp1251_to_utf8(key.name[UPPER_CASE], "_");
  988. key.id++;
  989. row->push_back(key);
  990. curPos.x += key.width;
  991.  
  992. // 3-� ���
  993. row = &m_Rows[LAYOUT_NUM][2];
  994. curPos.x = 0;
  995. curPos.y += m_fKeySizeY;
  996.  
  997. // .
  998. key.pos = curPos;
  999. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  1000. key.width = defWidth;
  1001. key.code[LOWER_CASE] = '.';
  1002. key.code[UPPER_CASE] = '.';
  1003. cp1251_to_utf8(key.name[LOWER_CASE], ".");
  1004. cp1251_to_utf8(key.name[UPPER_CASE], ".");
  1005. key.id++;
  1006. row->push_back(key);
  1007. curPos.x += key.width;
  1008.  
  1009. // :
  1010. key.pos = curPos;
  1011. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  1012. key.width = defWidth;
  1013. key.code[LOWER_CASE] = ':';
  1014. key.code[UPPER_CASE] = ':';
  1015. cp1251_to_utf8(key.name[LOWER_CASE], ":");
  1016. cp1251_to_utf8(key.name[UPPER_CASE], ":");
  1017. key.id++;
  1018. row->push_back(key);
  1019. curPos.x += key.width;
  1020.  
  1021. // ;
  1022. key.pos = curPos;
  1023. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  1024. key.width = defWidth;
  1025. key.code[LOWER_CASE] = ';';
  1026. key.code[UPPER_CASE] = ';';
  1027. cp1251_to_utf8(key.name[LOWER_CASE], ";");
  1028. cp1251_to_utf8(key.name[UPPER_CASE], ";");
  1029. key.id++;
  1030. row->push_back(key);
  1031. curPos.x += key.width;
  1032.  
  1033. // +
  1034. key.pos = curPos;
  1035. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  1036. key.width = defWidth;
  1037. key.code[LOWER_CASE] = '+';
  1038. key.code[UPPER_CASE] = '+';
  1039. cp1251_to_utf8(key.name[LOWER_CASE], "+");
  1040. cp1251_to_utf8(key.name[UPPER_CASE], "+");
  1041. key.id++;
  1042. row->push_back(key);
  1043. curPos.x += key.width;
  1044.  
  1045. // =
  1046. key.pos = curPos;
  1047. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  1048. key.width = defWidth;
  1049. key.code[LOWER_CASE] = '=';
  1050. key.code[UPPER_CASE] = '=';
  1051. cp1251_to_utf8(key.name[LOWER_CASE], "=");
  1052. cp1251_to_utf8(key.name[UPPER_CASE], "=");
  1053. key.id++;
  1054. row->push_back(key);
  1055. curPos.x += key.width;
  1056.  
  1057. // <
  1058. key.pos = curPos;
  1059. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  1060. key.width = defWidth;
  1061. key.code[LOWER_CASE] = '<';
  1062. key.code[UPPER_CASE] = '<';
  1063. cp1251_to_utf8(key.name[LOWER_CASE], "<");
  1064. cp1251_to_utf8(key.name[UPPER_CASE], "<");
  1065. key.id++;
  1066. row->push_back(key);
  1067. curPos.x += key.width;
  1068.  
  1069. // >
  1070. key.pos = curPos;
  1071. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  1072. key.width = defWidth;
  1073. key.code[LOWER_CASE] = '>';
  1074. key.code[UPPER_CASE] = '>';
  1075. cp1251_to_utf8(key.name[LOWER_CASE], ">");
  1076. cp1251_to_utf8(key.name[UPPER_CASE], ">");
  1077. key.id++;
  1078. row->push_back(key);
  1079. curPos.x += key.width;
  1080.  
  1081. // [
  1082. key.pos = curPos;
  1083. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  1084. key.width = defWidth;
  1085. key.code[LOWER_CASE] = '[';
  1086. key.code[UPPER_CASE] = '[';
  1087. cp1251_to_utf8(key.name[LOWER_CASE], "[");
  1088. cp1251_to_utf8(key.name[UPPER_CASE], "[");
  1089. key.id++;
  1090. row->push_back(key);
  1091. curPos.x += key.width;
  1092.  
  1093. // ]
  1094. key.pos = curPos;
  1095. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  1096. key.width = defWidth;
  1097. key.code[LOWER_CASE] = ']';
  1098. key.code[UPPER_CASE] = ']';
  1099. cp1251_to_utf8(key.name[LOWER_CASE], "]");
  1100. cp1251_to_utf8(key.name[UPPER_CASE], "]");
  1101. key.id++;
  1102. row->push_back(key);
  1103. curPos.x += key.width;
  1104.  
  1105. // delete
  1106. key.pos = curPos;
  1107. key.symPos = ImVec2(0,0);
  1108. key.width = defWidth;
  1109. key.code[LOWER_CASE] = 0;
  1110. key.code[UPPER_CASE] = 0;
  1111. key.name[LOWER_CASE][0] = 0;
  1112. key.name[UPPER_CASE][0] = 0;
  1113. key.type = KEY_BACKSPACE;
  1114. key.id++;
  1115. row->push_back(key);
  1116.  
  1117. // 4-� ������
  1118. row = &m_Rows[LAYOUT_NUM][3];
  1119. curPos.x = 0;
  1120. curPos.y += m_fKeySizeY;
  1121.  
  1122. key.type = KEY_DEFAULT;
  1123.  
  1124. // slash (/)
  1125. key.pos = curPos;
  1126. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  1127. key.width = defWidth;
  1128. key.code[LOWER_CASE] = '/';
  1129. key.code[UPPER_CASE] = '/';
  1130. cp1251_to_utf8(key.name[LOWER_CASE], "/");
  1131. cp1251_to_utf8(key.name[UPPER_CASE], "/");
  1132. key.id++;
  1133. row->push_back(key);
  1134. curPos.x += key.width;
  1135.  
  1136. // comma (,)
  1137. key.pos = curPos;
  1138. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  1139. key.width = defWidth;
  1140. key.code[LOWER_CASE] = ',';
  1141. key.code[UPPER_CASE] = ',';
  1142. cp1251_to_utf8(key.name[LOWER_CASE], ",");
  1143. cp1251_to_utf8(key.name[UPPER_CASE], ",");
  1144. key.id++;
  1145. row->push_back(key);
  1146. curPos.x += key.width;
  1147.  
  1148. // switch language
  1149. key.pos = curPos;
  1150. key.symPos = ImVec2(curPos.x + defWidth * 0.2, curPos.y + m_fKeySizeY * 0.2);
  1151. key.width = defWidth;
  1152. key.code[LOWER_CASE] = 0;
  1153. key.code[UPPER_CASE] = 0;
  1154. key.name[LOWER_CASE][0] = 0;
  1155. key.name[UPPER_CASE][0] = 0;
  1156. key.type = KEY_SWITCH;
  1157. key.id++;
  1158. row->push_back(key);
  1159. curPos.x += key.width;
  1160.  
  1161. // Space
  1162. key.pos = curPos;
  1163. key.symPos = ImVec2(0,0);
  1164. key.width = defWidth * 4;
  1165. key.code[LOWER_CASE] = ' ';
  1166. key.code[UPPER_CASE] = ' ';
  1167. key.name[LOWER_CASE][0] = 0;
  1168. key.name[UPPER_CASE][0] = 0;
  1169. key.type = KEY_SPACE;
  1170. key.id++;
  1171. row->push_back(key);
  1172. curPos.x += key.width;
  1173.  
  1174. key.type = KEY_DEFAULT;
  1175.  
  1176. // ?
  1177. key.pos = curPos;
  1178. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  1179. key.width = defWidth;
  1180. key.code[LOWER_CASE] = '?';
  1181. key.code[UPPER_CASE] = '?';
  1182. cp1251_to_utf8(key.name[LOWER_CASE], "?");
  1183. cp1251_to_utf8(key.name[UPPER_CASE], "?");
  1184. key.id++;
  1185. row->push_back(key);
  1186. curPos.x += key.width;
  1187.  
  1188. // !
  1189. key.pos = curPos;
  1190. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  1191. key.width = defWidth;
  1192. key.code[LOWER_CASE] = '!';
  1193. key.code[UPPER_CASE] = '!';
  1194. cp1251_to_utf8(key.name[LOWER_CASE], "!");
  1195. cp1251_to_utf8(key.name[UPPER_CASE], "!");
  1196. key.id++;
  1197. row->push_back(key);
  1198. curPos.x += key.width;
  1199.  
  1200. // Send
  1201. key.pos = curPos;
  1202. key.symPos = ImVec2(curPos.x + defWidth * 0.4, curPos.y + m_fKeySizeY * 0.2);
  1203. key.width = defWidth;
  1204. key.code[LOWER_CASE] = 0;
  1205. key.code[UPPER_CASE] = 0;
  1206. key.name[LOWER_CASE][0] = 0;
  1207. key.name[UPPER_CASE][0] = 0;
  1208. key.type = KEY_SEND;
  1209. key.id++;
  1210. row->push_back(key);
  1211. curPos.x += key.width;
  1212.  
  1213. return;
  1214. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement