gegl_draw_gui.pas 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397
  1. {
  2. * Copyright (c) 2021 SSW
  3. *
  4. * This software is provided 'as-is', without any express or
  5. * implied warranty. In no event will the authors be held
  6. * liable for any damages arising from the use of this software.
  7. *
  8. * Permission is granted to anyone to use this software for any purpose,
  9. * including commercial applications, and to alter it and redistribute
  10. * it freely, subject to the following restrictions:
  11. *
  12. * 1. The origin of this software must not be misrepresented;
  13. * you must not claim that you wrote the original software.
  14. * If you use this software in a product, an acknowledgment
  15. * in the product documentation would be appreciated but
  16. * is not required.
  17. *
  18. * 2. Altered source versions must be plainly marked as such,
  19. * and must not be misrepresented as being the original software.
  20. *
  21. * 3. This notice may not be removed or altered from any
  22. * source distribution.
  23. }
  24. unit gegl_draw_gui;
  25. {$I zgl_config.cfg}
  26. interface
  27. uses
  28. zgl_textures_png,
  29. zgl_utils,
  30. zgl_render_2d,
  31. zgl_types;
  32. var
  33. // Rus: шрифт по умолчанию для клавиатуры.
  34. // Eng; the default font for the keyboard.
  35. fontUse: LongWord;
  36. JoyArrow: zglPTexture;
  37. MenuRed: array[0..2] of Single = ($AF / 255, $7F / 255, $7F / 255);
  38. MenuGreen: array[0..2] of Single = ($AF / 255, $1F / 255, $7F / 255);
  39. MenuBlue: array[0..2] of Single = ($AF / 255, $5F / 255, $7F / 255);
  40. MenuAlpha: array[0..2] of Single = (224 / 255, 224 / 255, 224 / 255);
  41. CircleRed: array[0..2] of Single = (1, 1, 1);
  42. CircleGreen: array[0..2] of Single = (0, 1, 1);
  43. CircleBlue: array[0..2] of Single = (0, 1, 128 / 255);
  44. CircleAlpha: array[0..2] of Single = (192 / 255, 192 / 255, 192 / 255);
  45. MenuColorText: Cardinal = $000000B0;
  46. procedure DrawCircle(x, y, R: Single);
  47. procedure DrawButton(x, y, w, h: Single; numColor: LongWord);
  48. procedure DrawGameJoy01;
  49. procedure DrawGameJoy02;
  50. procedure DrawTouchKeyboard;
  51. procedure DrawTouchSymbol;
  52. implementation
  53. uses
  54. zgl_text,
  55. zgl_font,
  56. gegl_menu_gui,
  57. zgl_sprite_2d,
  58. zgl_keyboard,
  59. zgl_fx,
  60. zgl_log,
  61. zgl_gltypeconst,
  62. {$IFNDEF USE_GLES}
  63. zgl_opengl_all
  64. {$ELSE}
  65. zgl_opengles_all
  66. {$ENDIF}
  67. ;
  68. {$IfDef LINUX}
  69. var
  70. rs0: Single = 0;
  71. rs05: Single = 0.5;
  72. rs1: Single = 1;
  73. rs1_5: Single = 1.5;
  74. rs2: Single = 2;
  75. rs3: Single = 3;
  76. rs5: Single = 5;
  77. rs10: Single = 10;
  78. rs16: Single = 16;
  79. rs90: Single = 90;
  80. rs270: Single = 270;
  81. {$EndIf}
  82. procedure DrawCircle(x, y, R: Single);
  83. var
  84. dx, dy, dx_05add, dx_05sub, dy_05add, dy_05sub: single;
  85. n: LongWord;
  86. begin
  87. dx := {$IfDef LINUX}rs0{$Else}0{$EndIf};
  88. dy := R;
  89. n := 0;
  90. while dy >= 0 do
  91. begin
  92. if (n and 1) > 0 then
  93. begin
  94. dy := dy - {$IfDef LINUX}rs1{$Else}1{$EndIf};
  95. dx := sqrt(sqr(R) - sqr(dy));
  96. end
  97. else begin
  98. dx := dx + {$IfDef LINUX}rs1{$Else}1{$EndIf};
  99. dy := sqrt(sqr(R) - sqr(dx));
  100. if dy < dx then
  101. begin
  102. n := 1;
  103. dy := round(dy);
  104. end;
  105. end;
  106. dx_05add := x + dx - {$IfDef LINUX}rs05{$Else}0.5{$EndIf};
  107. dx_05sub := x - dx - {$IfDef LINUX}rs05{$Else}0.5{$EndIf};
  108. dy_05add := y + dy - {$IfDef LINUX}rs05{$Else}0.5{$EndIf};
  109. dy_05sub := y - dy - {$IfDef LINUX}rs05{$Else}0.5{$EndIf};
  110. glBegin(GL_LINES);
  111. glVertex3f(dx_05add, dy_05add, {$IfDef LINUX}rs0{$Else}0{$EndIf});
  112. glVertex3f(dx_05sub, dy_05add, {$IfDef LINUX}rs0{$Else}0{$EndIf});
  113. glVertex3f(dx_05add, dy_05sub, {$IfDef LINUX}rs0{$Else}0{$EndIf});
  114. glVertex3f(dx_05sub, dy_05sub, {$IfDef LINUX}rs0{$Else}0{$EndIf});
  115. glEnd;
  116. end;
  117. end;
  118. procedure DrawButton(x, y, w, h: Single; numColor: LongWord);
  119. var
  120. Box: array[0..3, 0..2] of Single;
  121. begin
  122. glEnable(GL_BLEND);
  123. Box[0, 2] := {$IfDef LINUX}rs0{$Else}0{$EndIf};
  124. Box[1, 2] := {$IfDef LINUX}rs0{$Else}0{$EndIf};
  125. Box[2, 2] := {$IfDef LINUX}rs0{$Else}0{$EndIf};
  126. Box[3, 2] := {$IfDef LINUX}rs0{$Else}0{$EndIf};
  127. Box[0, 0] := x + w;
  128. Box[0, 1] := y;
  129. Box[1, 0] := x + w;
  130. Box[1, 1] := y + h;
  131. Box[2, 0] := x;
  132. Box[2, 1] := y;
  133. Box[3, 0] := x;
  134. Box[3, 1] := y + h;
  135. glColor4f(MenuRed[numColor], MenuGreen[numColor], MenuBlue[numColor], MenuAlpha[numColor]);
  136. glVertexPointer(3, GL_FLOAT, 0, @Box);
  137. glEnableClientState(GL_VERTEX_ARRAY);
  138. glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
  139. Box[0, 0] := x + {$IfDef LINUX}rs1_5{$Else}1.5{$EndIf};
  140. Box[0, 1] := y + {$IfDef LINUX}rs1_5{$Else}1.5{$EndIf};
  141. Box[1, 0] := x + w - {$IfDef LINUX}rs1_5{$Else}1.5{$EndIf};
  142. Box[1, 1] := y + {$IfDef LINUX}rs1_5{$Else}1.5{$EndIf};
  143. Box[2, 0] := x + w - {$IfDef LINUX}rs1_5{$Else}1.5{$EndIf};
  144. Box[2, 1] := y + h - {$IfDef LINUX}rs1_5{$Else}1.5{$EndIf};
  145. Box[3, 0] := x + {$IfDef LINUX}rs1_5{$Else}1.5{$EndIf};
  146. Box[3, 1] := y + h - {$IfDef LINUX}rs1_5{$Else}1.5{$EndIf};
  147. glColor4f(MenuRed[1], MenuGreen[1], MenuBlue[1], MenuAlpha[1]);
  148. glDrawArrays(GL_LINE_LOOP, 0, 4);
  149. glDisableClientState(GL_VERTEX_ARRAY);
  150. glDisable(GL_BLEND);
  151. end;
  152. procedure DrawGameJoy01;
  153. var
  154. r: zglTRect2D;
  155. i: Integer;
  156. begin
  157. // setTextScale(22, fontUse);
  158. // setTextColor(MenuColorText);
  159. glColor4f(CircleRed[0], CircleGreen[0], CircleBlue[0], CircleAlpha[0]);
  160. DrawCircle(TouchJoyRolling.Rolling.X, TouchJoyRolling.Rolling.Y, TouchJoyRolling.Rolling.R);
  161. if (TouchJoyRolling.Rolling.bPush and 1) > 0 then
  162. begin
  163. glColor4f(CircleRed[1], CircleGreen[1], CircleBlue[1], CircleAlpha[1]);
  164. DrawCircle(TouchJoyRolling.Rolling._x, TouchJoyRolling.Rolling._y, {$IfDef LINUX}rs5{$Else}5{$EndIf});
  165. end;
  166. glColor4f(CircleRed[2], CircleGreen[2], CircleBlue[2], CircleAlpha[2]);
  167. DrawCircle(TouchJoyRolling.Rolling.X, TouchJoyRolling.Rolling.Y, {$IfDef LINUX}rs10{$Else}10{$EndIf});
  168. r.W := TouchJoyRolling.Width;
  169. r.H := TouchJoyRolling.Height;
  170. for i := 1 to TouchJoyRolling.count do
  171. Begin
  172. r.X := TouchJoyRolling.OneButton[i].X;
  173. r.Y := TouchJoyRolling.OneButton[i].Y + {$IfDef LINUX}rs3{$Else}3{$EndIf};
  174. if ((TouchJoyRolling.OneButton[i].bPush and 1) > 0) then
  175. begin
  176. setFontTextScale(21, fontUse);
  177. DrawButton(TouchJoyRolling.OneButton[i].X + {$IfDef LINUX}rs1{$Else}1{$EndIf}, TouchJoyRolling.OneButton[i].Y + {$IfDef LINUX}rs1{$Else}1{$EndIf},
  178. TouchJoyRolling.Width - {$IfDef LINUX}rs2{$Else}2{$EndIf}, TouchJoyRolling.Height - {$IfDef LINUX}rs2{$Else}2{$EndIf}, 2);
  179. text_DrawInRect(fontUse, r, TouchJoyRolling.OneButton[i].symb, TEXT_HALIGN_CENTER or TEXT_VALIGN_CENTER);
  180. setFontTextScale(22, fontUse);
  181. end
  182. else begin
  183. DrawButton(TouchJoyRolling.OneButton[i].X, TouchJoyRolling.OneButton[i].Y, TouchJoyRolling.Width, TouchJoyRolling.Height, 0);
  184. text_DrawInRect(fontUse, r, TouchJoyRolling.OneButton[i].symb, TEXT_HALIGN_CENTER or TEXT_VALIGN_CENTER);
  185. end;
  186. end;
  187. end;
  188. procedure DrawGameJoy02;
  189. var
  190. i: Integer;
  191. r: zglTRect2D;
  192. begin
  193. // setTextScale(22, fontUse);
  194. // setTextColor(MenuColorText);
  195. for i := 1 to 9 do
  196. begin
  197. if i <> 5 then
  198. if (TouchJoy.BArrow[i].bPush and 1) > 0 then
  199. asprite2d_Draw(JoyArrow, TouchJoy.BArrow[i].X, TouchJoy.BArrow[i].Y, TouchJoy.Width, TouchJoy.Height, TouchJoy.BArrow[i].Angle, TouchJoy.TextureDown)
  200. else
  201. asprite2d_Draw(JoyArrow, TouchJoy.BArrow[i].X, TouchJoy.BArrow[i].Y, TouchJoy.Width, TouchJoy.Height, TouchJoy.BArrow[i].Angle, TouchJoy.TextureUp);
  202. end;
  203. r.W := TouchJoy.Width;
  204. r.H := TouchJoy.Height;
  205. for i := 1 to TouchJoy.count do
  206. Begin
  207. r.X := TouchJoy.OneButton[i].X;
  208. r.Y := TouchJoy.OneButton[i].Y + {$IfDef LINUX}rs3{$Else}3{$EndIf};
  209. if (TouchJoy.OneButton[i].bPush and 1) > 0 then
  210. begin
  211. setFontTextScale(21, fontUse);
  212. DrawButton(TouchJoy.OneButton[i].X + {$IfDef LINUX}rs1{$Else}1{$EndIf}, TouchJoy.OneButton[i].Y + {$IfDef LINUX}rs1{$Else}1{$EndIf},
  213. TouchJoy.Width - {$IfDef LINUX}rs2{$Else}2{$EndIf}, TouchJoy.Height - {$IfDef LINUX}rs2{$Else}2{$EndIf}, 2);
  214. text_DrawInRect(fontUse, r, TouchJoy.OneButton[i].symb, TEXT_HALIGN_CENTER or TEXT_VALIGN_CENTER);
  215. setFontTextScale(22, fontUse);
  216. end
  217. else begin
  218. DrawButton(TouchJoy.OneButton[i].X, TouchJoy.OneButton[i].Y, TouchJoy.Width, TouchJoy.Height, 0);
  219. text_DrawInRect(fontUse, r, TouchJoy.OneButton[i].symb, TEXT_HALIGN_CENTER or TEXT_VALIGN_CENTER);
  220. end;
  221. end;
  222. end;
  223. procedure DrawTouchKeyboard;
  224. var
  225. n: LongWord;
  226. i: Integer;
  227. r: zglTRect2D;
  228. oldTextScaleEx: Single;
  229. begin
  230. oldTextScaleEx := getTextScaleEx();
  231. setTextFontScaleEx(TouchKey.textScale / {$IfDef LINUX}rs10{$Else}10{$EndIf}, fontUse);
  232. setScallingOff(True); // отключаем шкалу
  233. // Off_TextScale := True;
  234. // useScaleEx := TouchKey.textScale * managerFont.Font[fontUse].ScaleNorm;
  235. // setTextColor(MenuColorText);
  236. if (keybFlags and keyboardLatinRus) > 0 then
  237. if ((keybFlags and keyboardCaps) > 0) or ((keybFlags and keyboardShift) > 0) then
  238. n := 3
  239. else
  240. n := 4
  241. else
  242. if ((keybFlags and keyboardCaps) > 0) or ((keybFlags and keyboardShift) > 0) then
  243. n := 1
  244. else
  245. n := 2;
  246. r.W := TouchKey.OWidth;
  247. r.H := TouchKey.Height;
  248. for i := 1 to TouchKey.count do
  249. Begin
  250. r.X := TouchKey.OneButton[i].X;
  251. r.Y := TouchKey.OneButton[i].Y + {$IfDef LINUX}rs2{$Else}2{$EndIf};
  252. if keysDown[TouchKey.OneButton[i]._key] then
  253. begin
  254. r.X := r.X + 1;
  255. r.Y := r.Y + 1;
  256. DrawButton(TouchKey.OneButton[i].X + {$IfDef LINUX}rs1{$Else}1{$EndIf}, TouchKey.OneButton[i].Y + {$IfDef LINUX}rs1{$Else}1{$EndIf}, TouchKey.OWidth, TouchKey.Height, 2);
  257. text_DrawInRect(fontUse, r, ID_toUTF8( TouchKey.OneButton[i].symb[n]), TEXT_HALIGN_CENTER or TEXT_VALIGN_CENTER);
  258. // log_Add(ID_toUTF8(TouchKey.OneButton[i].symb[n]));
  259. Continue;
  260. end;
  261. DrawButton(TouchKey.OneButton[i].X, TouchKey.OneButton[i].Y, TouchKey.OWidth, TouchKey.Height, 0);
  262. text_DrawInRect(fontUse, r, ID_toUTF8(TouchKey.OneButton[i].symb[n]), TEXT_HALIGN_CENTER or TEXT_VALIGN_CENTER);
  263. end;
  264. for i := 35 to 44 do
  265. Begin
  266. if (i = _Rus) and ((keybFlags and keyboardLatinRus) > 0) then
  267. Continue;
  268. if (i = _Latin) and ((keybFlags and keyboardLatinRus) = 0) then
  269. Continue;
  270. r.X := TouchKey.StringButton[i].X;
  271. r.Y := TouchKey.StringButton[i].Y + {$IfDef LINUX}rs2{$Else}2{$EndIf};
  272. r.W := TouchKey.StringButton[i].Width;
  273. if (keysDown[TouchKey.StringButton[i]._key]) or (((keybFlags and keyboardCaps) > 0) and (i = _CapsLock)) or
  274. (((keybFlags and keyboardInsert) > 0) and (i = _Insert)) or
  275. ((i = _Shift) and ((keybFlags and keyboardShift) > 0)) then
  276. begin
  277. r.X := r.X + {$IfDef LINUX}rs1{$Else}1{$EndIf};
  278. r.Y := r.Y + {$IfDef LINUX}rs1{$Else}1{$EndIf};
  279. DrawButton(TouchKey.StringButton[i].X + {$IfDef LINUX}rs1{$Else}1{$EndIf}, TouchKey.StringButton[i].Y + {$IfDef LINUX}rs1{$Else}1{$EndIf}, TouchKey.StringButton[i].Width, TouchKey.Height, 2);
  280. text_DrawInRect(fontUse, r, TouchKey.StringButton[i].bString, TEXT_HALIGN_CENTER or TEXT_VALIGN_CENTER);
  281. Continue;
  282. end;
  283. DrawButton(TouchKey.StringButton[i].X, TouchKey.StringButton[i].Y, TouchKey.StringButton[i].Width, TouchKey.Height, 0);
  284. text_DrawInRect(fontUse, r, TouchKey.StringButton[i].bString, TEXT_HALIGN_CENTER or TEXT_VALIGN_CENTER);
  285. end;
  286. setScallingOff(False);
  287. setTextScaleEx(oldTextScaleEx);
  288. end;
  289. procedure DrawTouchSymbol;
  290. var
  291. n: LongWord;
  292. i: Integer;
  293. r: zglTRect2D;
  294. begin
  295. // setTextScale(TouchKeySymb.textScale, fontUse);
  296. // Off_TextScale := True;
  297. // useScaleEx := TouchKey.textScale * managerFont.Font[fontUse].ScaleNorm;
  298. // setTextColor(MenuColorText);
  299. if (keybFlags and keyboardShift) > 0 then
  300. n := 2
  301. else
  302. n := 1;
  303. r.W := TouchKeySymb.OWidth;
  304. r.H := TouchKeySymb.Height;
  305. for i := 1 to TouchKeySymb.count do
  306. Begin
  307. r.X := TouchKeySymb.OneDoubleButton[i].X;
  308. r.Y := TouchKeySymb.OneDoubleButton[i].Y + {$IfDef LINUX}rs2{$Else}2{$EndIf};
  309. if keysDown[TouchKeySymb.OneDoubleButton[i]._key] then
  310. begin
  311. r.X := r.X + {$IfDef LINUX}rs1{$Else}1{$EndIf};
  312. r.Y := r.Y + {$IfDef LINUX}rs1{$Else}1{$EndIf};
  313. DrawButton(TouchKeySymb.OneDoubleButton[i].X + {$IfDef LINUX}rs1{$Else}1{$EndIf}, TouchKeySymb.OneDoubleButton[i].Y + {$IfDef LINUX}rs1{$Else}1{$EndIf}, TouchKeySymb.OWidth, TouchKeySymb.Height, 2);
  314. text_DrawInRect(fontUse, r, TouchKeySymb.OneDoubleButton[i].symb[n], TEXT_HALIGN_CENTER or TEXT_VALIGN_CENTER);
  315. Continue;
  316. end;
  317. DrawButton(TouchKeySymb.OneDoubleButton[i].X, TouchKeySymb.OneDoubleButton[i].Y, TouchKeySymb.OWidth, TouchKeySymb.Height, 0);
  318. text_DrawInRect(fontUse, r, TouchKeySymb.OneDoubleButton[i].symb[n], TEXT_HALIGN_CENTER or TEXT_VALIGN_CENTER);
  319. end;
  320. for i := 36 to 44 do
  321. Begin
  322. r.X := TouchKeySymb.StringButton[i].X;
  323. r.Y := TouchKeySymb.StringButton[i].Y + {$IfDef LINUX}rs2{$Else}2{$EndIf};
  324. r.W := TouchKeySymb.StringButton[i].Width;
  325. if (i = _home) or (i = _end) then
  326. setFontTextScale(Round(TouchKeySymb.textScale / 2), fontUse);
  327. if ((keysDown[TouchKeySymb.StringButton[i]._key]) or (((keybFlags and keyboardInsert) > 0) and (i = _Insert))) or
  328. (*((i = _Shift) and (keysDown[TouchKeySymb.StringButton[i]._key])) or*) (((keybFlags and keyboardCtrl) > 0) and (i = _Ctrl)) then
  329. begin
  330. r.X := r.X + 1;
  331. r.Y := r.Y + 1;
  332. DrawButton(TouchKeySymb.StringButton[i].X + {$IfDef LINUX}rs1{$Else}1{$EndIf}, TouchKeySymb.StringButton[i].Y + {$IfDef LINUX}rs1{$Else}1{$EndIf}, TouchKeySymb.StringButton[i].Width, TouchKeySymb.Height, 2);
  333. text_DrawInRect(fontUse, r, TouchKeySymb.StringButton[i].bString, TEXT_HALIGN_CENTER or TEXT_VALIGN_CENTER);
  334. end
  335. else begin
  336. DrawButton(TouchKeySymb.StringButton[i].X, TouchKeySymb.StringButton[i].Y, TouchKeySymb.StringButton[i].Width, TouchKeySymb.Height, 0);
  337. text_DrawInRect(fontUse, r, TouchKeySymb.StringButton[i].bString, TEXT_HALIGN_CENTER or TEXT_VALIGN_CENTER);
  338. end;
  339. if (i = _home) or (i = _end) then
  340. setFontTextScale(TouchKeySymb.textScale, fontUse);
  341. end;
  342. for i := 24 to 27 do
  343. begin
  344. fx2d_SetColor(0);
  345. if (TouchKeySymb.BArrow[i].Angle = {$IfDef LINUX}rs90{$Else}90{$EndIf}) or (TouchKeySymb.BArrow[i].Angle = {$IfDef LINUX}rs270{$Else}270{$EndIf}) then
  346. begin
  347. r.W := {$IfDef LINUX}rs16{$Else}16{$EndIf};
  348. r.H := {$IfDef LINUX}rs0{$Else}0{$EndIf};
  349. end
  350. else begin
  351. r.W := {$IfDef LINUX}rs0{$Else}0{$EndIf};
  352. r.H := {$IfDef LINUX}rs16{$Else}16{$EndIf};
  353. end;
  354. if keysDown[TouchKeySymb.BArrow[i]._key] then
  355. begin
  356. DrawButton(TouchKeySymb.BArrow[i].X + {$IfDef LINUX}rs1{$Else}1{$EndIf}, TouchKeySymb.BArrow[i].Y + {$IfDef LINUX}rs1{$Else}1{$EndIf}, TouchKeySymb.OWidth, TouchKeySymb.Height, 2);
  357. asprite2d_Draw(JoyArrow, TouchKeySymb.BArrow[i].X + {$IfDef LINUX}rs1{$Else}1{$EndIf} + r.W / {$IfDef LINUX}rs2{$Else}2{$EndIf},
  358. TouchKeySymb.BArrow[i].Y + {$IfDef LINUX}rs1{$Else}1{$EndIf} + r.H / {$IfDef LINUX}rs2{$Else}2{$EndIf},
  359. TouchKeySymb.OWidth - {$IfDef LINUX}rs1{$Else}1{$EndIf} - r.W, TouchKeySymb.Height - {$IfDef LINUX}rs1{$Else}1{$EndIf} - r.H,
  360. TouchKeySymb.BArrow[i].Angle, TouchKeySymb.TextureDown, 192, FX_COLOR or FX_BLEND);
  361. end
  362. else begin
  363. DrawButton(TouchKeySymb.BArrow[i].X, TouchKeySymb.BArrow[i].Y, TouchKeySymb.OWidth, TouchKeySymb.Height, 0);
  364. asprite2d_Draw(JoyArrow, TouchKeySymb.BArrow[i].X + r.W / {$IfDef LINUX}rs2{$Else}2{$EndIf}, TouchKeySymb.BArrow[i].Y + r.H / {$IfDef LINUX}rs2{$Else}2{$EndIf},
  365. TouchKeySymb.OWidth - r.W, TouchKeySymb.Height - r.H,
  366. TouchKeySymb.BArrow[i].Angle, TouchKeySymb.TextureUp, 192, FX_COLOR or FX_BLEND);
  367. end;
  368. end;
  369. // Off_TextScale := False;
  370. end;
  371. end.