PageRenderTime 99ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/KeyBoard/Key.cpp

#
C++ | 826 lines | 614 code | 114 blank | 98 comment | 35 complexity | 2061e1b8c78673fc56eeb84914dcf12b MD5 | raw file
  1. #include "stdafx.h"
  2. #include "Key.h"
  3. //Front Face Width
  4. #define FFW 0.6f
  5. // Button Height
  6. #define BH 0.45f
  7. /*
  8. KeyBoard Implementation
  9. */
  10. KeyBoard::KeyBoard(HWND hWnd)
  11. {
  12. this->egl = new EasyGL();
  13. egl->CreateFromHWnd(hWnd);
  14. //setup light
  15. egl->Lights[0]->Position(0.0,0,7, Light::LightType::Directional);
  16. egl->Lights[0]->Ambient(1,1,1,0);
  17. egl->Lights[0]->Diffuse(1,1,1,0);
  18. egl->Lights[0]->Specular(1,1,1,0);
  19. egl->Lights[0]->Enabled=true;
  20. //egl->Lights[1]->Position(0,0,7,0);
  21. //egl->Lights[1]->Ambient(1,0,0,0);
  22. //egl->Lights[1]->Specular(0.5,0.5,0.5,1.0);
  23. //egl->Lights[1]->Diffuse(1,0,0,1.0);
  24. //egl->Lights[1]->Enabled=true;
  25. cm.ChangeEye(2.8,-2.5,9);
  26. cm.ChangeCenter(2.8,-1,0);
  27. cm.ChangeLookUp(0,1,0);
  28. cm.ChangePerspective(24);
  29. //cm.RotateAboutCenter(1,0,0,40);
  30. egl->AttachCamera(&cm);
  31. egl->ClearColor(0.2f,0.2f,0.8f,1.0f);
  32. m_Functions[0] = new Button(this,"Data\\Number_8.bmp");
  33. m_Functions[1] = new Button(this,"Data\\Number_8.bmp");
  34. m_Functions[2] = new Button(this,"Data\\Number_8.bmp");
  35. m_Functions[3] = new Button(this,"Data\\Number_8.bmp");
  36. m_Functions[4] = new Button(this,"Data\\Number_8.bmp");
  37. m_Functions[5] = new Button(this,"Data\\Number_8.bmp");
  38. m_Functions[6] = new Button(this,"Data\\Number_8.bmp");
  39. m_Functions[7] = new Button(this,"Data\\Number_8.bmp");
  40. m_Functions[8] = new Button(this,"Data\\Number_8.bmp");
  41. m_Functions[9] = new Button(this,"Data\\Number_8.bmp");
  42. m_Functions[10] = new Button(this,"Data\\Number_8.bmp");
  43. m_Functions[11] = new Button(this,"Data\\Number_8.bmp");
  44. m_Functions[12] = new Button(this,"Data\\Number_8.bmp");
  45. m_Numbers[0] = new Button(this,"Data\\Number_8.bmp");
  46. m_Numbers[1] = new Button(this,"Data\\Number_8.bmp");
  47. m_Numbers[2] = new Button(this,"Data\\Number_8.bmp");
  48. m_Numbers[3] = new Button(this,"Data\\Number_8.bmp");
  49. m_Numbers[4] = new Button(this,"Data\\Number_8.bmp");
  50. m_Numbers[5] = new Button(this,"Data\\Number_8.bmp");
  51. m_Numbers[6] = new Button(this,"Data\\Number_8.bmp");
  52. m_Numbers[7] = new Button(this,"Data\\Number_8.bmp");
  53. m_Numbers[8] = new Button(this,"Data\\Number_8.bmp");
  54. m_Numbers[9] = new Button(this,"Data\\Number_8.bmp");
  55. m_Letters[0] = new Button(this,"Data\\Letter2.bmp");
  56. m_Letters[1] = new Button(this,"Data\\Letter1.bmp");
  57. m_Letters[2] = new Button(this,"Data\\Letter2.bmp");
  58. m_Letters[3] = new Button(this,"Data\\Letter3.bmp");
  59. m_Letters[4] = new Button(this,"Data\\Letter4.bmp");
  60. m_Letters[5] = new Button(this,"Data\\Letter5.bmp");
  61. m_Letters[6] = new Button(this,"Data\\Letter6.bmp");
  62. m_Letters[7] = new Button(this,"Data\\Letter7.bmp");
  63. m_Letters[8] = new Button(this,"Data\\Letter8.bmp");
  64. m_Letters[9] = new Button(this,"Data\\Letter9.bmp");
  65. m_Letters[10] = new Button(this,"Data\\Letter10.bmp");
  66. m_Letters[11] = new Button(this,"Data\\Letter11.bmp");
  67. m_Letters[12] = new Button(this,"Data\\Letter12.bmp");
  68. m_Letters[13] = new Button(this,"Data\\Letter13.bmp");
  69. m_Letters[14] = new Button(this,"Data\\Letter14.bmp");
  70. m_Letters[15] = new Button(this,"Data\\Letter15.bmp");
  71. m_Letters[16] = new Button(this,"Data\\Letter16.bmp");
  72. m_Letters[17] = new Button(this,"Data\\Letter17.bmp");
  73. m_Letters[18] = new Button(this,"Data\\Letter18.bmp");
  74. m_Letters[19] = new Button(this,"Data\\Letter19.bmp");
  75. m_Letters[20] = new Button(this,"Data\\Letter20.bmp");
  76. m_Letters[21] = new Button(this,"Data\\Letter21.bmp");
  77. m_Letters[22] = new Button(this,"Data\\Letter22.bmp");
  78. m_Letters[23] = new Button(this,"Data\\Letter23.bmp");
  79. m_Letters[24] = new Button(this,"Data\\Letter24.bmp");
  80. m_Letters[25] = new Button(this,"Data\\Letter25.bmp");
  81. m_Letters[26] = new Button(this,"Data\\Letter26.bmp");
  82. m_Letters[27] = new Button(this,"Data\\Letter27.bmp");
  83. m_Letters[28] = new Button(this,"Data\\Letter28.bmp");
  84. m_Ya2Dot = new Button(this,"Data\\Letter28.bmp");
  85. m_Hamza = new Button(this,"Data\\Letter28.bmp");
  86. m_HamzaOnYa = new Button(this,"Data\\Letter28.bmp");
  87. m_HamzaOnWow = new Button(this,"Data\\Letter28.bmp");
  88. m_La = new Button(this,"Data\\Letter28.bmp");
  89. m_TaMarbota= new Button(this,"Data\\Letter28.bmp");
  90. m_Minus = new Button(this,"Data\\Letter2.bmp");
  91. m_Equal = new Button(this,"Data\\Letter2.bmp");
  92. m_Div = new Button(this,"Data\\Letter2.bmp");
  93. m_BackSpace = new Button(this,"Data\\Letter2.bmp");
  94. m_TAB = new VariableButton(this,"Data\\Letter2.bmp",1.0f);
  95. m_CAPS = new VariableButton(this,"Data\\Letter2.bmp",1.2f);
  96. m_LSHIFT = new VariableButton(this,"Data\\Letter2.bmp",2.0f);
  97. m_RSHIFT = new VariableButton(this,"Data\\Letter2.bmp",4.0f);
  98. m_LCTRL = new VariableButton(this,"Data\\Letter2.bmp",0.6f);
  99. m_LWIN = new VariableButton(this,"Data\\Letter2.bmp",0.6f);
  100. m_LALT = new VariableButton(this,"Data\\Letter2.bmp",0.6f);
  101. m_SPACE = new VariableButton(this,"Data\\Letter2.bmp",9.86f);
  102. m_RALT = new VariableButton(this,"Data\\Letter2.bmp",0.6f);
  103. m_RWIN = new VariableButton(this,"Data\\Letter2.bmp",0.6f);
  104. m_APPS = new VariableButton(this,"Data\\Letter2.bmp",0.6f);
  105. m_RCTRL = new VariableButton(this,"Data\\Letter2.bmp",0.6f);
  106. m_Enter = new Enter(this,"Data\\Letter2.bmp");
  107. Build();
  108. }
  109. void KeyBoard::Build(void)
  110. {
  111. /// First build drawing pattern
  112. //static int Row1[]={8,1,2,3,4,5,6,7,8,9,0}
  113. Row1.push_back(m_Letters[9]);
  114. Row1.push_back(m_Numbers[1]);
  115. Row1.push_back(m_Numbers[2]);
  116. Row1.push_back(m_Numbers[3]);
  117. Row1.push_back(m_Numbers[4]);
  118. Row1.push_back(m_Numbers[5]);
  119. Row1.push_back(m_Numbers[6]);
  120. Row1.push_back(m_Numbers[7]);
  121. Row1.push_back(m_Numbers[8]);
  122. Row1.push_back(m_Numbers[9]);
  123. Row1.push_back(m_Numbers[0]);
  124. Row1.push_back(m_Minus);
  125. Row1.push_back(m_Equal);
  126. Row1.push_back(m_Div);
  127. Row1.push_back(m_BackSpace);
  128. MyKeys.insert(KeyHash::value_type(0xC0,m_Letters[9]));m_Letters[9]->pkname=0xC0;
  129. MyKeys.insert(KeyHash::value_type(0x31,m_Numbers[1]));m_Numbers[1]->pkname=0x31;
  130. MyKeys.insert(KeyHash::value_type(0x32,m_Numbers[2]));m_Numbers[2]->pkname=0x32;
  131. MyKeys.insert(KeyHash::value_type(0x33,m_Numbers[3]));m_Numbers[3]->pkname=0x33;
  132. MyKeys.insert(KeyHash::value_type(0x34,m_Numbers[4]));m_Numbers[4]->pkname=0x34;
  133. MyKeys.insert(KeyHash::value_type(0x35,m_Numbers[5]));m_Numbers[5]->pkname=0x35;
  134. MyKeys.insert(KeyHash::value_type(0x36,m_Numbers[6]));m_Numbers[6]->pkname=0x36;
  135. MyKeys.insert(KeyHash::value_type(0x37,m_Numbers[7]));m_Numbers[7]->pkname=0x37;
  136. MyKeys.insert(KeyHash::value_type(0x38,m_Numbers[8]));m_Numbers[8]->pkname=0x38;
  137. MyKeys.insert(KeyHash::value_type(0x39,m_Numbers[9]));m_Numbers[9]->pkname=0x39;
  138. MyKeys.insert(KeyHash::value_type(0x30,m_Numbers[0]));m_Numbers[0]->pkname=0x30;
  139. MyKeys.insert(KeyHash::value_type(0xBD,m_Minus));m_Minus->pkname=0xBD;
  140. MyKeys.insert(KeyHash::value_type(0xBB,m_Equal));m_Equal->pkname=0xBB;
  141. MyKeys.insert(KeyHash::value_type(0xDC,m_Div));m_Div->pkname=0xDC;
  142. MyKeys.insert(KeyHash::value_type(0x08,m_BackSpace));m_BackSpace->pkname=0x08;
  143. //static int Row2[]={15,14,4,21,20,19,18,26,7,6,5,8};
  144. Row2.push_back(m_TAB);
  145. Row2.push_back(m_Letters[15]);
  146. Row2.push_back(m_Letters[14]);
  147. Row2.push_back(m_Letters[4]);
  148. Row2.push_back(m_Letters[21]);
  149. Row2.push_back(m_Letters[20]);
  150. Row2.push_back(m_Letters[19]);
  151. Row2.push_back(m_Letters[18]);
  152. Row2.push_back(m_Letters[26]);
  153. Row2.push_back(m_Letters[7]);
  154. Row2.push_back(m_Letters[6]);
  155. Row2.push_back(m_Letters[5]);
  156. Row2.push_back(m_Letters[8]);
  157. MyKeys.insert(KeyHash::value_type(0x09,m_TAB));m_TAB->pkname=0x09;
  158. MyKeys.insert(KeyHash::value_type(0x51,m_Letters[15]));m_Letters[15]->pkname=0x51;
  159. MyKeys.insert(KeyHash::value_type(0x57,m_Letters[14]));m_Letters[14]->pkname=0x57;
  160. MyKeys.insert(KeyHash::value_type(0x45,m_Letters[4]));m_Letters[4]->pkname=0x45;
  161. MyKeys.insert(KeyHash::value_type(0x52,m_Letters[21]));m_Letters[21]->pkname=0x52;
  162. MyKeys.insert(KeyHash::value_type(0x54,m_Letters[20]));m_Letters[20]->pkname=0x54;
  163. MyKeys.insert(KeyHash::value_type(0x59,m_Letters[19]));m_Letters[19]->pkname=0x59;
  164. MyKeys.insert(KeyHash::value_type(0x55,m_Letters[18]));m_Letters[18]->pkname=0x55;
  165. MyKeys.insert(KeyHash::value_type(0x49,m_Letters[26]));m_Letters[26]->pkname=0x49;
  166. MyKeys.insert(KeyHash::value_type(0x4F,m_Letters[7]));m_Letters[7]->pkname=0x4F;
  167. MyKeys.insert(KeyHash::value_type(0x50,m_Letters[6]));m_Letters[6]->pkname=0x50;
  168. MyKeys.insert(KeyHash::value_type(0xDB,m_Letters[5]));m_Letters[5]->pkname=0xDB;
  169. MyKeys.insert(KeyHash::value_type(0xDD,m_Letters[8]));m_Letters[8]->pkname=0xDD;
  170. //static int Row3[]={13,12,0,2,23,1,3,25,24,22,16};
  171. Row3.push_back(m_CAPS);
  172. Row3.push_back(m_Letters[13]);
  173. Row3.push_back(m_Letters[12]);
  174. Row3.push_back(m_Ya2Dot);
  175. Row3.push_back(m_Letters[2]);
  176. Row3.push_back(m_Letters[23]);
  177. Row3.push_back(m_Letters[1]);
  178. Row3.push_back(m_Letters[3]);
  179. Row3.push_back(m_Letters[25]);
  180. Row3.push_back(m_Letters[24]);
  181. Row3.push_back(m_Letters[22]);
  182. Row3.push_back(m_Letters[16]);
  183. MyKeys.insert(KeyHash::value_type(0x14,m_CAPS));m_CAPS->pkname=0x14;
  184. MyKeys.insert(KeyHash::value_type(0x41,m_Letters[13]));m_Letters[13]->pkname=0x41;
  185. MyKeys.insert(KeyHash::value_type(0x53,m_Letters[12]));m_Letters[12]->pkname=0x53;
  186. MyKeys.insert(KeyHash::value_type(0x44,m_Ya2Dot));m_Ya2Dot->pkname =0x44;
  187. MyKeys.insert(KeyHash::value_type(0x46,m_Letters[2]));m_Letters[2]->pkname=0x46;
  188. MyKeys.insert(KeyHash::value_type(0x47,m_Letters[23]));m_Letters[23]->pkname=0x47;
  189. MyKeys.insert(KeyHash::value_type(0x48,m_Letters[1]));m_Letters[1]->pkname=0x48;
  190. MyKeys.insert(KeyHash::value_type(0x4A,m_Letters[3]));m_Letters[3]->pkname=0x4A;
  191. MyKeys.insert(KeyHash::value_type(0x4B,m_Letters[25]));m_Letters[25]->pkname=0x4B;
  192. MyKeys.insert(KeyHash::value_type(0x4C,m_Letters[24]));m_Letters[24]->pkname=0x4C;
  193. MyKeys.insert(KeyHash::value_type(0xBA,m_Letters[22]));m_Letters[22]->pkname=0xBA;
  194. MyKeys.insert(KeyHash::value_type(0xDE,m_Letters[16]));m_Letters[16]->pkname=0xDE;
  195. //static int Row4[]={0,0,0,10,0,28,0,27,11,17};
  196. Row4.push_back(m_LSHIFT);
  197. Row4.push_back(m_HamzaOnYa);
  198. Row4.push_back(m_Hamza);
  199. Row4.push_back(m_HamzaOnWow);
  200. Row4.push_back(m_Letters[10]);
  201. Row4.push_back(m_La);
  202. Row4.push_back(m_Letters[28]);
  203. Row4.push_back(m_TaMarbota);
  204. Row4.push_back(m_Letters[27]);
  205. Row4.push_back(m_Letters[11]);
  206. Row4.push_back(m_Letters[17]);
  207. Row4.push_back(m_RSHIFT);
  208. MyKeys.insert(KeyHash::value_type(0x5A,m_HamzaOnYa));m_HamzaOnYa->pkname=0x5a;
  209. MyKeys.insert(KeyHash::value_type(0x58,m_Hamza));m_Hamza->pkname=0x58;
  210. MyKeys.insert(KeyHash::value_type(0x43,m_HamzaOnWow));m_HamzaOnWow->pkname=0x43;
  211. MyKeys.insert(KeyHash::value_type(0x56,m_Letters[10]));m_Letters[10]->pkname=0x56;
  212. MyKeys.insert(KeyHash::value_type(0x42,m_La));m_La->pkname=0x42;
  213. MyKeys.insert(KeyHash::value_type(0x4E,m_Letters[28]));m_Letters[28]->pkname=0x4E;
  214. MyKeys.insert(KeyHash::value_type(0x4D,m_TaMarbota));m_TaMarbota->pkname=0x4D;
  215. MyKeys.insert(KeyHash::value_type(0xBC,m_Letters[27]));m_Letters[27]->pkname=0xBC;
  216. MyKeys.insert(KeyHash::value_type(0xBE,m_Letters[11]));m_Letters[11]->pkname=0xBE;
  217. MyKeys.insert(KeyHash::value_type(0xBF,m_Letters[17]));m_Letters[17]->pkname=0xBF;
  218. Row5.push_back(m_LCTRL);
  219. Row5.push_back(m_LWIN);
  220. Row5.push_back(m_LALT);
  221. Row5.push_back(m_SPACE);
  222. Row5.push_back(m_RALT);
  223. Row5.push_back(m_RWIN);
  224. Row5.push_back(m_APPS);
  225. Row5.push_back(m_RCTRL);
  226. MyKeys.insert(KeyHash::value_type(VK_LWIN,m_LWIN));m_LWIN->pkname=VK_LWIN;
  227. MyKeys.insert(KeyHash::value_type(VK_RWIN,m_RWIN));m_RWIN->pkname=VK_RWIN;
  228. MyKeys.insert(KeyHash::value_type(VK_APPS,m_APPS));m_APPS->pkname=VK_APPS;
  229. MyKeys.insert(KeyHash::value_type(VK_SPACE,m_SPACE));m_SPACE->pkname=VK_SPACE;
  230. MyKeys.insert(KeyHash::value_type(VK_RETURN,m_Enter));m_Enter->pkname=VK_RETURN;
  231. }
  232. void KeyBoard::Draw(void)
  233. {
  234. int i=0;
  235. egl->BeginRender();
  236. //glLoadIdentity();
  237. //glTranslated(0.5,0.0,0.0);
  238. //glBegin(GL_QUADS);
  239. // glVertex3d(-1,0,-0.5);
  240. // glVertex3d(1,0,-0.5);
  241. // glVertex3d(1,0,0.5);
  242. // glVertex3d(-1,0,0.5);
  243. //glEnd();
  244. //ROW 1
  245. for(ptrKey=Row1.begin();ptrKey!=Row1.end();ptrKey++)
  246. {
  247. IKey* kk=(*ptrKey);
  248. kk->x=i*2;
  249. kk->y=4;
  250. egl->RenderModel(kk);
  251. //kk->Draw(i*2,4,0);
  252. i++;
  253. }
  254. //ROW 2
  255. i=0;
  256. ptrKey=Row2.begin();
  257. (*ptrKey)->x=(i*2)+.5;
  258. (*ptrKey)->y=2;
  259. egl->RenderModel((*ptrKey));
  260. //(*ptrKey)->Draw((i*2)+.5,2,0);
  261. ptrKey++;
  262. for(;ptrKey!=Row2.end();ptrKey++)
  263. {
  264. IKey* kk=(*ptrKey);
  265. kk->x=(i*2)+2.9;
  266. kk->y=2;
  267. egl->RenderModel(kk);
  268. //(*ptrKey)->Draw((i*2)+2.9,2,0);
  269. i++;
  270. }
  271. //ROW 3
  272. i=0;
  273. ptrKey=Row3.begin();
  274. (*ptrKey)->x=(i*2)+.6;
  275. (*ptrKey)->y=0;
  276. egl->RenderModel((*ptrKey));
  277. //(*ptrKey)->Draw((i*2)+.6,0,0);
  278. ptrKey++;
  279. for(;ptrKey!=Row3.end();ptrKey++)
  280. {
  281. IKey* kk=(*ptrKey);
  282. kk->x=(i*2)+3.2;
  283. kk->y=0;
  284. egl->RenderModel(kk);
  285. //(*ptrKey)->Draw((i*2)+3.2,0,0);
  286. i++;
  287. }
  288. //ROW 4
  289. i=0;
  290. ptrKey=Row4.begin();
  291. (*ptrKey)->Draw((i*2)+1,-2,0);
  292. ptrKey++;
  293. for(;ptrKey!=Row4.end();ptrKey++)
  294. {
  295. if((ptrKey+1)==Row4.end())break;
  296. IKey* kk=(*ptrKey);
  297. kk->x=(i*2)+4;
  298. kk->y=-2;
  299. egl->RenderModel(kk);
  300. //(*ptrKey)->Draw((i*2)+4,-2,0);
  301. i++;
  302. }
  303. (*ptrKey)->Draw((i*2)+6,-2,0);
  304. //LAST ROW
  305. m_LCTRL->Draw(0+0.3,-4,0);
  306. m_LWIN->Draw((2.6)+0.3,-4,0);
  307. m_LALT->Draw((2*2.6)+0.3,-4,0);
  308. m_SPACE->Draw((3*2.6)+4.93,-4,0);
  309. m_RALT->Draw((7.55*2.6)+0.3,-4,0);
  310. m_RWIN->Draw((8.55*2.6)+0.3,-4,0);
  311. m_APPS->Draw((9.55*2.6)+0.3,-4,0);
  312. m_RCTRL->Draw((10.55*2.6)+0.3,-4,0);
  313. m_Enter->x=27.4;
  314. m_Enter->y=1;
  315. this->egl->RenderModel(m_Enter);
  316. egl->EndRender();
  317. egl->UpdateRender();
  318. }
  319. void KeyBoard::SendVK(WPARAM wp,LPARAM lp)
  320. {
  321. //0x30-0x39 0-9
  322. //0x41-0x5A A-Z
  323. KeyHash::const_iterator it;
  324. it=MyKeys.find(wp);
  325. if(it!=MyKeys.end())
  326. {
  327. it->second->Pressed=true;
  328. }
  329. int ScanCode = HIWORD(lp);
  330. if(wp==VK_SHIFT)
  331. {
  332. unsigned short l=GetKeyState(VK_LSHIFT);
  333. unsigned short r=GetKeyState(VK_RSHIFT);
  334. unsigned short rl=l&0xf000;
  335. unsigned short rr=r&0xf000;
  336. if(rl==0xf000)m_LSHIFT->Pressed=true;
  337. if(rr==0xf000)m_RSHIFT->Pressed=true;
  338. }
  339. if(wp==VK_CONTROL)
  340. {
  341. unsigned short l=GetKeyState(VK_LCONTROL);
  342. unsigned short r=GetKeyState(VK_RCONTROL);
  343. unsigned short rl=l&0xf000;
  344. unsigned short rr=r&0xf000;
  345. if(rl==0xf000)m_LCTRL->Pressed=true;
  346. if(rr==0xf000)m_RCTRL->Pressed=true;
  347. }
  348. }
  349. void KeyBoard::ReSetVK(WPARAM wp,LPARAM lp)
  350. {
  351. //0x30-0x39 0-9
  352. //0x41-0x5A A-Z
  353. KeyHash::const_iterator it;
  354. it=MyKeys.find(wp);
  355. if(it!=MyKeys.end())
  356. {
  357. it->second->Pressed=false;
  358. }
  359. int ScanCode = HIWORD(lp);
  360. if(wp==VK_SHIFT)
  361. {
  362. unsigned short l=GetKeyState(VK_LSHIFT);
  363. unsigned short r=GetKeyState(VK_RSHIFT);
  364. unsigned short rl=l&0xf000;
  365. unsigned short rr=r&0xf000;
  366. if(rl==0x0000)m_LSHIFT->Pressed=false;
  367. if(rr==0x0000)m_RSHIFT->Pressed=false;
  368. }
  369. if(wp==VK_CONTROL)
  370. {
  371. unsigned short l=GetKeyState(VK_LCONTROL);
  372. unsigned short r=GetKeyState(VK_RCONTROL);
  373. unsigned short rl=l&0xf000;
  374. unsigned short rr=r&0xf000;
  375. if(rl==0x0000)m_LCTRL->Pressed=false;
  376. if(rr==0x0000)m_RCTRL->Pressed=false;
  377. }
  378. }
  379. void KeyBoard::Test(void)
  380. {
  381. egl->BeginRender();
  382. Button* bb;
  383. //Row 1
  384. for(int i=1;i<=13;i++)
  385. {
  386. bb=new Button(this,"Data\\Number_8.bmp");
  387. bb->Draw(i*2,4,0);
  388. delete bb;
  389. }
  390. //Row 2
  391. for(int i=1;i<=12;i++)
  392. {
  393. bb=new Button(this,"Data\\Letter26.bmp");
  394. bb->Draw((i*2)+1,2,0);
  395. delete bb;
  396. }
  397. //Row 3
  398. for(int i=1;i<=11;i++)
  399. {
  400. bb=new Button(this,"Data\\Letter2.bmp");
  401. if ((i%2)==0)
  402. bb->Draw((i*2)+2,0,1);
  403. else
  404. bb->Draw((i*2)+2,0,0);
  405. delete bb;
  406. }
  407. //Row 4
  408. for(int i=1;i<=10;i++)
  409. {
  410. bb=new Button(this,"Data\\Letter26.bmp");
  411. bb->Draw((i*2)+3,-2,0);
  412. delete bb;
  413. }
  414. egl->EndRender();
  415. egl->UpdateRender();
  416. }
  417. /*
  418. IKey Implementation
  419. */
  420. IKey::IKey()
  421. {
  422. this->MyKeyBoard=NULL;
  423. this->Pressed=false;
  424. }
  425. IKey::IKey(KeyBoard* ParentKB)
  426. {
  427. this->MyKeyBoard = ParentKB;
  428. }
  429. void IKey::Mark(void)
  430. {
  431. this->marked=true;
  432. }
  433. void IKey::UnMark(void)
  434. {
  435. this->marked=false;
  436. }
  437. bool IKey::IsMarked(void)
  438. {
  439. return this->marked;
  440. }
  441. /*
  442. Button Implementation
  443. */
  444. Button::Button(KeyBoard* ParentKB,LPSTR li)
  445. {
  446. this->MyKeyBoard = ParentKB;
  447. this->LetterImage=li;
  448. tex.ReadImage(LetterImage);
  449. }
  450. void Button::Draw(float x,float y,unsigned int cases)
  451. {
  452. if(!Pressed)
  453. {
  454. ml.Ambient(0.0f,0.0f,0.0f,0.0f);
  455. ml.Diffuse(0.5f,0.5f,0.5f,0.5f);
  456. ml.Emission(0.0f,0.0f,0.0f,0.0f);
  457. ml.Specular(0.0f,0.0f,0.0f,0.0f);
  458. }
  459. else
  460. {
  461. ml.Ambient(0.0f,0.0f,0.0f,0.0f);
  462. ml.Diffuse(0.4f,0.4f,0.4f,0.4f);
  463. ml.Emission(0.0f,0.0f,0.0f,0.0f);
  464. ml.Specular(0.0f,0.0f,0.0f,0.0f);
  465. }
  466. ml.ApplyMaterial();
  467. glEnable(GL_TEXTURE_2D);
  468. tex.ApplyTexture();
  469. glPushMatrix();
  470. glLoadIdentity();
  471. glScalef(0.2,0.2,0.2);
  472. if(!Pressed)
  473. {
  474. glTranslatef(x,y,0.0f);
  475. }
  476. else
  477. glTranslatef(x,y,-(BH-BH/8));
  478. glBegin(GL_QUADS);
  479. //Front Face
  480. glNormal3f( 0.0f, 0.0f, BH);
  481. glTexCoord2f(0.0f, 0.0f); glVertex3f(-FFW, -FFW, BH); // Point 1 (Front)
  482. glTexCoord2f(1.0f, 0.0f); glVertex3f( FFW, -FFW, BH); // Point 2 (Front)
  483. glTexCoord2f(1.0f, 1.0f); glVertex3f( FFW, FFW, BH); // Point 3 (Front)
  484. glTexCoord2f(0.0f, 1.0f); glVertex3f(-FFW, FFW, BH); // Point 4 (Front)
  485. //// Back Face
  486. //ml._Bronze();
  487. //ml.ApplyMaterial();
  488. //glVertex3f(-1.0f, -1.0f, -BH); // Point 1 (Back)
  489. //glVertex3f(-1.0f, 1.0f, -BH); // Point 2 (Back)
  490. //glVertex3f( 1.0f, 1.0f, -BH); // Point 3 (Back)
  491. //glVertex3f( 1.0f, -1.0f, -BH); // Point 4 (Back)
  492. // Top Face
  493. glNormal3f(-0.1f,1.0f,-BH);glVertex3f(-1.0f, 1.0f, -BH); // Point 1 (Top)
  494. glNormal3f(-FFW,FFW,BH);glVertex3f(-FFW, FFW, BH); // Point 2 (Top)
  495. glNormal3f(FFW,FFW,BH);glVertex3f( FFW, FFW, BH); // Point 3 (Top)
  496. glNormal3f(1.0f,1.0f,-BH);glVertex3f( 1.0f, 1.0f, -BH); // Point 4 (Top)
  497. // Bottom Face
  498. glNormal3f(-1.0f,-1.0f,-BH);glVertex3f(-1.0f, -1.0f, -BH); // Point 1 (Bottom)
  499. glNormal3f(1.0f,-1.0f,-BH);glVertex3f( 1.0f, -1.0f, -BH); // Point 2 (Bottom)
  500. glNormal3f(FFW,-FFW,BH);glVertex3f( FFW, -FFW, BH); // Point 3 (Bottom)
  501. glNormal3f(-FFW,-FFW,BH);glVertex3f(-FFW, -FFW, BH); // Point 4 (Bottom)
  502. // Right face
  503. glNormal3f(1.0f,-1.0f,-BH);glVertex3f( 1.0f, -1.0f, -BH); // Point 1 (Right)
  504. glNormal3f(1.0f,1.0f,-BH);glVertex3f( 1.0f, 1.0f, -BH); // Point 2 (Right)
  505. glNormal3f(FFW,FFW,BH);glVertex3f( FFW, FFW, BH); // Point 3 (Right)
  506. glNormal3f(FFW,-FFW,BH);glVertex3f( FFW, -FFW, BH); // Point 4 (Right)
  507. // Left Face
  508. glNormal3f(-1.0f,-1.0f,-BH);glVertex3f(-1.0f, -1.0f, -BH); // Point 1 (Left)
  509. glNormal3f(-FFW,-FFW,BH);glVertex3f(-FFW, -FFW, BH); // Point 2 (Left)
  510. glNormal3f(-FFW,FFW,BH);glVertex3f(-FFW, FFW, BH); // Point 3 (Left)
  511. glNormal3f(-1.0f,1.0f,-BH);glVertex3f(-1.0f, 1.0f, -BH); // Point
  512. glEnd();
  513. glPopMatrix();
  514. glDisable(GL_TEXTURE_2D);
  515. }
  516. /*
  517. VariableButton Implementation
  518. */
  519. VariableButton::VariableButton(KeyBoard* ParentKB,LPSTR li,float ExWidth=0)
  520. {
  521. this->MyKeyBoard = ParentKB;
  522. this->LetterImage=li;
  523. tex.ReadImage(LetterImage);
  524. this->ExtendedWidth=ExWidth;
  525. }
  526. void VariableButton::Draw(float x,float y,unsigned int cases)
  527. {
  528. if(!Pressed)
  529. {
  530. ml.Ambient(0.0f,0.0f,0.0f,0.0f);
  531. ml.Diffuse(0.5f,0.5f,0.5f,0.5f);
  532. ml.Emission(0.0f,0.0f,0.0f,0.0f);
  533. ml.Specular(0.0f,0.0f,0.0f,0.0f);
  534. }
  535. else
  536. {
  537. ml.Ambient(0.0f,0.0f,0.0f,0.0f);
  538. ml.Diffuse(0.4f,0.4f,0.4f,0.4f);
  539. ml.Emission(0.0f,0.0f,0.0f,0.0f);
  540. ml.Specular(0.0f,0.0f,0.0f,0.0f);
  541. }
  542. ml.ApplyMaterial();
  543. glEnable(GL_TEXTURE_2D);
  544. tex.ApplyTexture();
  545. glPushMatrix();
  546. glLoadIdentity();
  547. glScalef(0.2,0.2,0.2);
  548. if(!Pressed)
  549. {
  550. glTranslatef(x,y,0.0f);
  551. }
  552. else
  553. glTranslatef(x,y,-(BH-BH/8));
  554. glBegin(GL_QUADS);
  555. //Front Face
  556. glNormal3f( 0.0f, 0.0f, BH);
  557. glTexCoord2f(0.0f, 0.0f); glVertex3f(-FFW-ExtendedWidth/2, -FFW, BH); // Point 1 (Front)
  558. glTexCoord2f(1.0f, 0.0f); glVertex3f( FFW+ExtendedWidth/2, -FFW, BH); // Point 2 (Front)
  559. glTexCoord2f(1.0f, 1.0f); glVertex3f( FFW+ExtendedWidth/2, FFW, BH); // Point 3 (Front)
  560. glTexCoord2f(0.0f, 1.0f); glVertex3f(-FFW-ExtendedWidth/2, FFW, BH); // Point 4 (Front)
  561. //// Back Face
  562. //ml._Bronze();
  563. //ml.ApplyMaterial();
  564. //glVertex3f(-1.0f, -1.0f, -BH); // Point 1 (Back)
  565. //glVertex3f(-1.0f, 1.0f, -BH); // Point 2 (Back)
  566. //glVertex3f( 1.0f, 1.0f, -BH); // Point 3 (Back)
  567. //glVertex3f( 1.0f, -1.0f, -BH); // Point 4 (Back)
  568. // Top Face
  569. glNormal3f(-0.1f,1.0f,-BH);glVertex3f(-1.0f-ExtendedWidth/2, 1.0f, -BH); // Point 1 (Top)
  570. glNormal3f(-FFW,FFW,BH);glVertex3f(-FFW-ExtendedWidth/2, FFW, BH); // Point 2 (Top)
  571. glNormal3f(FFW,FFW,BH);glVertex3f( FFW+ExtendedWidth/2, FFW, BH); // Point 3 (Top)
  572. glNormal3f(1.0f,1.0f,-BH);glVertex3f( 1.0f+ExtendedWidth/2, 1.0f, -BH); // Point 4 (Top)
  573. // Bottom Face
  574. glNormal3f(-1.0f,-1.0f,-BH);glVertex3f(-1.0f-ExtendedWidth/2, -1.0f, -BH); // Point 1 (Bottom)
  575. glNormal3f(1.0f,-1.0f,-BH);glVertex3f( 1.0f+ExtendedWidth/2, -1.0f, -BH); // Point 2 (Bottom)
  576. glNormal3f(FFW,-FFW,BH);glVertex3f( FFW+ExtendedWidth/2, -FFW, BH); // Point 3 (Bottom)
  577. glNormal3f(-FFW,-FFW,BH);glVertex3f(-FFW-ExtendedWidth/2, -FFW, BH); // Point 4 (Bottom)
  578. // Right face
  579. glNormal3f(1.0f,-1.0f,-BH);glVertex3f( 1.0f+ExtendedWidth/2, -1.0f, -BH); // Point 1 (Right)
  580. glNormal3f(1.0f,1.0f,-BH);glVertex3f( 1.0f+ExtendedWidth/2, 1.0f, -BH); // Point 2 (Right)
  581. glNormal3f(FFW,FFW,BH);glVertex3f( FFW+ExtendedWidth/2, FFW, BH); // Point 3 (Right)
  582. glNormal3f(FFW,-FFW,BH);glVertex3f( FFW+ExtendedWidth/2, -FFW, BH); // Point 4 (Right)
  583. // Left Face
  584. glNormal3f(-1.0f,-1.0f,-BH);glVertex3f(-1.0f-ExtendedWidth/2, -1.0f, -BH); // Point 1 (Left)
  585. glNormal3f(-FFW,-FFW,BH);glVertex3f(-FFW-ExtendedWidth/2, -FFW, BH); // Point 2 (Left)
  586. glNormal3f(-FFW,FFW,BH);glVertex3f(-FFW-ExtendedWidth/2, FFW, BH); // Point 3 (Left)
  587. glNormal3f(-1.0f,1.0f,-BH);glVertex3f(-1.0f-ExtendedWidth/2, 1.0f, -BH); // Point
  588. glEnd();
  589. glPopMatrix();
  590. glDisable(GL_TEXTURE_2D);
  591. }
  592. /*
  593. Enter Implementation
  594. */
  595. Enter::Enter(KeyBoard* ParentKB,LPSTR li)
  596. {
  597. this->MyKeyBoard = ParentKB;
  598. this->LetterImage=li;
  599. tex.ReadImage(LetterImage);
  600. }
  601. void Enter::Draw(float x,float y,unsigned int cases)
  602. {
  603. if(!Pressed)
  604. {
  605. ml.Ambient(0.0f,0.0f,0.0f,0.0f);
  606. ml.Diffuse(0.5f,0.5f,0.5f,0.5f);
  607. ml.Emission(0.0f,0.0f,0.0f,0.0f);
  608. ml.Specular(0.0f,0.0f,0.0f,0.0f);
  609. }
  610. else
  611. {
  612. ml.Ambient(0.0f,0.0f,0.0f,0.0f);
  613. ml.Diffuse(0.4f,0.4f,0.4f,0.4f);
  614. ml.Emission(0.0f,0.0f,0.0f,0.0f);
  615. ml.Specular(0.0f,0.0f,0.0f,0.0f);
  616. }
  617. ml.ApplyMaterial();
  618. glEnable(GL_TEXTURE_2D);
  619. tex.ApplyTexture();
  620. glPushMatrix();
  621. glLoadIdentity();
  622. glScalef(0.2,0.2,0.2);
  623. if(!Pressed)
  624. {
  625. glTranslatef(x,y,0.0f);
  626. }
  627. else
  628. glTranslatef(x,y,-(BH-BH/8));
  629. glBegin(GL_QUADS);
  630. //Front Face
  631. glNormal3f( 0.0f, 0.0f, BH);
  632. glTexCoord2f(0.0f, 0.0f); glVertex3f(-FFW*1.6, -FFW*2, BH); // Point 1 (Front)
  633. glTexCoord2f(1.0f, 0.0f); glVertex3f( FFW*1.6, -FFW*2, BH); // Point 2 (Front)
  634. glTexCoord2f(1.0f, 1.0f); glVertex3f( FFW*1.6, FFW*2, BH); // Point 3 (Front)
  635. glTexCoord2f(0.0f, 1.0f); glVertex3f(-FFW*1.6, FFW*2, BH); // Point 4 (Front)
  636. //// Back Face
  637. //ml._Bronze();
  638. //ml.ApplyMaterial();
  639. //glVertex3f(-1.0f, -1.0f, -BH); // Point 1 (Back)
  640. //glVertex3f(-1.0f, 1.0f, -BH); // Point 2 (Back)
  641. //glVertex3f( 1.0f, 1.0f, -BH); // Point 3 (Back)
  642. //glVertex3f( 1.0f, -1.0f, -BH); // Point 4 (Back)
  643. // Top Face
  644. glNormal3f(-0.1f,1.0f,-BH);glVertex3f(-1.0f*1.6, 1.0f*2, -BH); // Point 1 (Top)
  645. glNormal3f(-FFW,FFW,BH);glVertex3f(-FFW*1.6, FFW*2, BH); // Point 2 (Top)
  646. glNormal3f(FFW,FFW,BH);glVertex3f( FFW*1.6, FFW*2, BH); // Point 3 (Top)
  647. glNormal3f(1.0f,1.0f,-BH);glVertex3f( 1.0f*1.6, 1.0f*2, -BH); // Point 4 (Top)
  648. // Bottom Face
  649. glNormal3f(-1.0f,-1.0f,-BH);glVertex3f((-1.0f*1.6)-1.6, -1.0f*2, -BH); // Point 1 (Bottom)
  650. glNormal3f(1.0f,-1.0f,-BH);glVertex3f( 1.0f*1.6, -1.0f*2, -BH); // Point 2 (Bottom)
  651. glNormal3f(FFW,-FFW,BH);glVertex3f( FFW*1.6, -FFW*2, BH); // Point 3 (Bottom)
  652. glNormal3f(-FFW,-FFW,BH);glVertex3f((-FFW*1.6)-1.6, -FFW*2, BH); // Point 4 (Bottom)
  653. // Right face
  654. glNormal3f(1.0f,-1.0f,-BH);glVertex3f( 1.0f*1.6, -1.0f*2, -BH); // Point 1 (Right)
  655. glNormal3f(1.0f,1.0f,-BH);glVertex3f( 1.0f*1.6, 1.0f*2, -BH); // Point 2 (Right)
  656. glNormal3f(FFW,FFW,BH);glVertex3f( FFW*1.6, FFW*2, BH); // Point 3 (Right)
  657. glNormal3f(FFW,-FFW,BH);glVertex3f( FFW*1.6, -FFW*2, BH); // Point 4 (Right)
  658. // Left Face Part 1/2 length
  659. //glNormal3f(-1.0f,-1.0f,-BH);glVertex3f(-1.0f*1.6, -1.0f/6, -BH); // Point 1 (Left)
  660. //glNormal3f(-FFW,-FFW,BH);glVertex3f(-FFW*1.6, -FFW/2, BH); // Point 2 (Left)
  661. glNormal3f(-1.0f,-1.0f,-BH);glVertex3f(-1.0f*1.6, 0, -BH); // Point 1 (Left)
  662. glNormal3f(-FFW,-FFW,BH);glVertex3f(-FFW*1.6, -FFW, BH); // Point 2 (Left)
  663. glNormal3f(-FFW,FFW,BH);glVertex3f(-FFW*1.6, FFW*2, BH); // Point 3 (Left)
  664. glNormal3f(-1.0f,1.0f,-BH);glVertex3f(-1.0f*1.6, (1.0f*2), -BH); // Point
  665. //Rest of ENTER//
  666. //start of the extended block
  667. glNormal3f(-1.0f,-1.0f,-BH);glVertex3f(-1.0f*1.6, 0, -BH);
  668. glNormal3f(-FFW,-FFW,BH);glVertex3f(-FFW*1.6, -FFW, BH);
  669. glNormal3f(-FFW,-FFW,BH);glVertex3f((-FFW*1.6)-1.6, -FFW, BH);
  670. glNormal3f(-1.0f,-1.0f,-BH);glVertex3f((-1.0f*1.6)-1.6, 0, -BH);
  671. glNormal3f(-FFW,-FFW,BH);glVertex3f(-FFW*1.6, -FFW, BH);
  672. glNormal3f(-FFW,-FFW,BH);glVertex3f((-FFW*1.6)-1.6, -FFW, BH);
  673. glNormal3f(-FFW,-FFW,BH);glVertex3f((-FFW*1.6)-1.6, -FFW*2, BH);
  674. glNormal3f(-FFW,-FFW,BH);glVertex3f(-FFW*1.6, -FFW*2, BH);
  675. glNormal3f(-FFW,-FFW,BH);glVertex3f((-FFW*1.6)-1.6, -FFW*2, BH);
  676. glNormal3f(-FFW,-FFW,BH);glVertex3f((-FFW*1.6)-1.6, -FFW, BH);
  677. glNormal3f(-1.0f,-1.0f,-BH);glVertex3f((-1.0f*1.6)-1.6, 0, -BH);
  678. glNormal3f(-1.0f,-1.0f,-BH);glVertex3f((-1.0f*1.6)-1.6, -1.0f*2, -BH); // Point 1 (Bottom)
  679. glEnd();
  680. glPopMatrix();
  681. glDisable(GL_TEXTURE_2D);
  682. }
  683. void IKey::Render()
  684. {
  685. if (modelMaterial != NULL)
  686. {
  687. modelMaterial->ApplyMaterial();
  688. }
  689. if (usepath==TRUE)
  690. {
  691. GetNextPoint();
  692. }
  693. glPushMatrix();
  694. glLoadMatrixf(effectmatrix); //Get the current transformation
  695. if (camerame!=NULL) // if camera is attached
  696. {
  697. // Move its center
  698. camerame->ChangeCenter(effectmatrix[12],effectmatrix[13],effectmatrix[14]);
  699. }
  700. if (cameraEye!=NULL) // if camera eye is attached
  701. {
  702. // Move its center
  703. cameraEye->ChangeEye
  704. (effectmatrix[12],effectmatrix[13],effectmatrix[14]);
  705. }
  706. this->Draw(x,y,0);
  707. glPopMatrix();
  708. }
  709. void IKey::RunPickFunction(void)
  710. {
  711. this->Pressed=!this->Pressed;
  712. }