RmlUi.cpp 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. #include "RmlUi.h"
  2. #include "ElementInstancer.h"
  3. #include "LuaElementInstancer.h"
  4. #include "RmlUiContextsProxy.h"
  5. #include <RmlUi/Core/Core.h>
  6. #include <RmlUi/Core/Factory.h>
  7. #include <RmlUi/Core/Input.h>
  8. namespace Rml {
  9. namespace Lua {
  10. #define RMLUILUA_INPUTENUM(keyident, tbl) \
  11. lua_pushinteger(L, Input::KI_##keyident); \
  12. lua_setfield(L, (tbl), #keyident);
  13. #define RMLUILUA_INPUTMODIFIERENUM(keymod, tbl) \
  14. lua_pushinteger(L, Input::KM_##keymod); \
  15. lua_setfield(L, (tbl), #keymod);
  16. // c++ representation of the global variable in Lua so that the syntax is consistent
  17. LuaRmlUi lua_global_rmlui;
  18. void LuaRmlUiPushrmluiGlobal(lua_State* L)
  19. {
  20. luaL_getmetatable(L, GetTClassName<LuaRmlUi>());
  21. LuaRmlUiEnumkey_identifier(L);
  22. lua_global_rmlui.key_identifier_ref = luaL_ref(L, -2);
  23. LuaRmlUiEnumkey_modifier(L);
  24. lua_global_rmlui.key_modifier_ref = luaL_ref(L, -2);
  25. LuaType<LuaRmlUi>::push(L, &lua_global_rmlui, false);
  26. lua_setglobal(L, "rmlui");
  27. }
  28. template <>
  29. void ExtraInit<LuaRmlUi>(lua_State* /*L*/, int /*metatable_index*/)
  30. {
  31. return;
  32. }
  33. int LuaRmlUiCreateContext(lua_State* L, LuaRmlUi* /*obj*/)
  34. {
  35. const char* name = luaL_checkstring(L, 1);
  36. Vector2i* dimensions = LuaType<Vector2i>::check(L, 2);
  37. Context* new_context = CreateContext(name, *dimensions);
  38. if (new_context == nullptr || dimensions == nullptr)
  39. {
  40. lua_pushnil(L);
  41. }
  42. else
  43. {
  44. LuaType<Context>::push(L, new_context);
  45. }
  46. return 1;
  47. }
  48. int LuaRmlUiLoadFontFace(lua_State* L, LuaRmlUi* /*obj*/)
  49. {
  50. const char* file = luaL_checkstring(L, 1);
  51. bool fallback_face = lua_gettop(L) <= 1 ? false : RMLUI_CHECK_BOOL(L, 2);
  52. int face_index = lua_gettop(L) <= 2 ? 0 : static_cast<int>(luaL_checkinteger(L, 3));
  53. lua_pushboolean(L, LoadFontFace(file, fallback_face, Style::FontWeight::Auto, face_index));
  54. return 1;
  55. }
  56. int LuaRmlUiRegisterTag(lua_State* L, LuaRmlUi* /*obj*/)
  57. {
  58. const char* tag = luaL_checkstring(L, 1);
  59. LuaElementInstancer* lei = (LuaElementInstancer*)LuaType<ElementInstancer>::check(L, 2);
  60. RMLUI_CHECK_OBJ(lei);
  61. Factory::RegisterElementInstancer(tag, lei);
  62. return 0;
  63. }
  64. int LuaRmlUiGetAttrcontexts(lua_State* L)
  65. {
  66. RmlUiContextsProxy* proxy = new RmlUiContextsProxy();
  67. LuaType<RmlUiContextsProxy>::push(L, proxy, true);
  68. return 1;
  69. }
  70. int LuaRmlUiGetAttrkey_identifier(lua_State* L)
  71. {
  72. luaL_getmetatable(L, GetTClassName<LuaRmlUi>());
  73. lua_rawgeti(L, -1, lua_global_rmlui.key_identifier_ref);
  74. return 1;
  75. }
  76. int LuaRmlUiGetAttrkey_modifier(lua_State* L)
  77. {
  78. luaL_getmetatable(L, GetTClassName<LuaRmlUi>());
  79. lua_rawgeti(L, -1, lua_global_rmlui.key_modifier_ref);
  80. return 1;
  81. }
  82. void LuaRmlUiEnumkey_identifier(lua_State* L)
  83. {
  84. lua_newtable(L);
  85. int tbl = lua_gettop(L);
  86. RMLUILUA_INPUTENUM(UNKNOWN, tbl)
  87. RMLUILUA_INPUTENUM(SPACE, tbl)
  88. RMLUILUA_INPUTENUM(0, tbl)
  89. RMLUILUA_INPUTENUM(1, tbl)
  90. RMLUILUA_INPUTENUM(2, tbl)
  91. RMLUILUA_INPUTENUM(3, tbl)
  92. RMLUILUA_INPUTENUM(4, tbl)
  93. RMLUILUA_INPUTENUM(5, tbl)
  94. RMLUILUA_INPUTENUM(6, tbl)
  95. RMLUILUA_INPUTENUM(7, tbl)
  96. RMLUILUA_INPUTENUM(8, tbl)
  97. RMLUILUA_INPUTENUM(9, tbl)
  98. RMLUILUA_INPUTENUM(A, tbl)
  99. RMLUILUA_INPUTENUM(B, tbl)
  100. RMLUILUA_INPUTENUM(C, tbl)
  101. RMLUILUA_INPUTENUM(D, tbl)
  102. RMLUILUA_INPUTENUM(E, tbl)
  103. RMLUILUA_INPUTENUM(F, tbl)
  104. RMLUILUA_INPUTENUM(G, tbl)
  105. RMLUILUA_INPUTENUM(H, tbl)
  106. RMLUILUA_INPUTENUM(I, tbl)
  107. RMLUILUA_INPUTENUM(J, tbl)
  108. RMLUILUA_INPUTENUM(K, tbl)
  109. RMLUILUA_INPUTENUM(L, tbl)
  110. RMLUILUA_INPUTENUM(M, tbl)
  111. RMLUILUA_INPUTENUM(N, tbl)
  112. RMLUILUA_INPUTENUM(O, tbl)
  113. RMLUILUA_INPUTENUM(P, tbl)
  114. RMLUILUA_INPUTENUM(Q, tbl)
  115. RMLUILUA_INPUTENUM(R, tbl)
  116. RMLUILUA_INPUTENUM(S, tbl)
  117. RMLUILUA_INPUTENUM(T, tbl)
  118. RMLUILUA_INPUTENUM(U, tbl)
  119. RMLUILUA_INPUTENUM(V, tbl)
  120. RMLUILUA_INPUTENUM(W, tbl)
  121. RMLUILUA_INPUTENUM(X, tbl)
  122. RMLUILUA_INPUTENUM(Y, tbl)
  123. RMLUILUA_INPUTENUM(Z, tbl)
  124. RMLUILUA_INPUTENUM(OEM_1, tbl)
  125. RMLUILUA_INPUTENUM(OEM_PLUS, tbl)
  126. RMLUILUA_INPUTENUM(OEM_COMMA, tbl)
  127. RMLUILUA_INPUTENUM(OEM_MINUS, tbl)
  128. RMLUILUA_INPUTENUM(OEM_PERIOD, tbl)
  129. RMLUILUA_INPUTENUM(OEM_2, tbl)
  130. RMLUILUA_INPUTENUM(OEM_3, tbl)
  131. RMLUILUA_INPUTENUM(OEM_4, tbl)
  132. RMLUILUA_INPUTENUM(OEM_5, tbl)
  133. RMLUILUA_INPUTENUM(OEM_6, tbl)
  134. RMLUILUA_INPUTENUM(OEM_7, tbl)
  135. RMLUILUA_INPUTENUM(OEM_8, tbl)
  136. RMLUILUA_INPUTENUM(OEM_102, tbl)
  137. RMLUILUA_INPUTENUM(NUMPAD0, tbl)
  138. RMLUILUA_INPUTENUM(NUMPAD1, tbl)
  139. RMLUILUA_INPUTENUM(NUMPAD2, tbl)
  140. RMLUILUA_INPUTENUM(NUMPAD3, tbl)
  141. RMLUILUA_INPUTENUM(NUMPAD4, tbl)
  142. RMLUILUA_INPUTENUM(NUMPAD5, tbl)
  143. RMLUILUA_INPUTENUM(NUMPAD6, tbl)
  144. RMLUILUA_INPUTENUM(NUMPAD7, tbl)
  145. RMLUILUA_INPUTENUM(NUMPAD8, tbl)
  146. RMLUILUA_INPUTENUM(NUMPAD9, tbl)
  147. RMLUILUA_INPUTENUM(NUMPADENTER, tbl)
  148. RMLUILUA_INPUTENUM(MULTIPLY, tbl)
  149. RMLUILUA_INPUTENUM(ADD, tbl)
  150. RMLUILUA_INPUTENUM(SEPARATOR, tbl)
  151. RMLUILUA_INPUTENUM(SUBTRACT, tbl)
  152. RMLUILUA_INPUTENUM(DECIMAL, tbl)
  153. RMLUILUA_INPUTENUM(DIVIDE, tbl)
  154. RMLUILUA_INPUTENUM(OEM_NEC_EQUAL, tbl)
  155. RMLUILUA_INPUTENUM(BACK, tbl)
  156. RMLUILUA_INPUTENUM(TAB, tbl)
  157. RMLUILUA_INPUTENUM(CLEAR, tbl)
  158. RMLUILUA_INPUTENUM(RETURN, tbl)
  159. RMLUILUA_INPUTENUM(PAUSE, tbl)
  160. RMLUILUA_INPUTENUM(CAPITAL, tbl)
  161. RMLUILUA_INPUTENUM(KANA, tbl)
  162. RMLUILUA_INPUTENUM(HANGUL, tbl)
  163. RMLUILUA_INPUTENUM(JUNJA, tbl)
  164. RMLUILUA_INPUTENUM(FINAL, tbl)
  165. RMLUILUA_INPUTENUM(HANJA, tbl)
  166. RMLUILUA_INPUTENUM(KANJI, tbl)
  167. RMLUILUA_INPUTENUM(ESCAPE, tbl)
  168. RMLUILUA_INPUTENUM(CONVERT, tbl)
  169. RMLUILUA_INPUTENUM(NONCONVERT, tbl)
  170. RMLUILUA_INPUTENUM(ACCEPT, tbl)
  171. RMLUILUA_INPUTENUM(MODECHANGE, tbl)
  172. RMLUILUA_INPUTENUM(PRIOR, tbl)
  173. RMLUILUA_INPUTENUM(NEXT, tbl)
  174. RMLUILUA_INPUTENUM(END, tbl)
  175. RMLUILUA_INPUTENUM(HOME, tbl)
  176. RMLUILUA_INPUTENUM(LEFT, tbl)
  177. RMLUILUA_INPUTENUM(UP, tbl)
  178. RMLUILUA_INPUTENUM(RIGHT, tbl)
  179. RMLUILUA_INPUTENUM(DOWN, tbl)
  180. RMLUILUA_INPUTENUM(SELECT, tbl)
  181. RMLUILUA_INPUTENUM(PRINT, tbl)
  182. RMLUILUA_INPUTENUM(EXECUTE, tbl)
  183. RMLUILUA_INPUTENUM(SNAPSHOT, tbl)
  184. RMLUILUA_INPUTENUM(INSERT, tbl)
  185. RMLUILUA_INPUTENUM(DELETE, tbl)
  186. RMLUILUA_INPUTENUM(HELP, tbl)
  187. RMLUILUA_INPUTENUM(LWIN, tbl)
  188. RMLUILUA_INPUTENUM(RWIN, tbl)
  189. RMLUILUA_INPUTENUM(APPS, tbl)
  190. RMLUILUA_INPUTENUM(POWER, tbl)
  191. RMLUILUA_INPUTENUM(SLEEP, tbl)
  192. RMLUILUA_INPUTENUM(WAKE, tbl)
  193. RMLUILUA_INPUTENUM(F1, tbl)
  194. RMLUILUA_INPUTENUM(F2, tbl)
  195. RMLUILUA_INPUTENUM(F3, tbl)
  196. RMLUILUA_INPUTENUM(F4, tbl)
  197. RMLUILUA_INPUTENUM(F5, tbl)
  198. RMLUILUA_INPUTENUM(F6, tbl)
  199. RMLUILUA_INPUTENUM(F7, tbl)
  200. RMLUILUA_INPUTENUM(F8, tbl)
  201. RMLUILUA_INPUTENUM(F9, tbl)
  202. RMLUILUA_INPUTENUM(F10, tbl)
  203. RMLUILUA_INPUTENUM(F11, tbl)
  204. RMLUILUA_INPUTENUM(F12, tbl)
  205. RMLUILUA_INPUTENUM(F13, tbl)
  206. RMLUILUA_INPUTENUM(F14, tbl)
  207. RMLUILUA_INPUTENUM(F15, tbl)
  208. RMLUILUA_INPUTENUM(F16, tbl)
  209. RMLUILUA_INPUTENUM(F17, tbl)
  210. RMLUILUA_INPUTENUM(F18, tbl)
  211. RMLUILUA_INPUTENUM(F19, tbl)
  212. RMLUILUA_INPUTENUM(F20, tbl)
  213. RMLUILUA_INPUTENUM(F21, tbl)
  214. RMLUILUA_INPUTENUM(F22, tbl)
  215. RMLUILUA_INPUTENUM(F23, tbl)
  216. RMLUILUA_INPUTENUM(F24, tbl)
  217. RMLUILUA_INPUTENUM(NUMLOCK, tbl)
  218. RMLUILUA_INPUTENUM(SCROLL, tbl)
  219. RMLUILUA_INPUTENUM(OEM_FJ_JISHO, tbl)
  220. RMLUILUA_INPUTENUM(OEM_FJ_MASSHOU, tbl)
  221. RMLUILUA_INPUTENUM(OEM_FJ_TOUROKU, tbl)
  222. RMLUILUA_INPUTENUM(OEM_FJ_LOYA, tbl)
  223. RMLUILUA_INPUTENUM(OEM_FJ_ROYA, tbl)
  224. RMLUILUA_INPUTENUM(LSHIFT, tbl)
  225. RMLUILUA_INPUTENUM(RSHIFT, tbl)
  226. RMLUILUA_INPUTENUM(LCONTROL, tbl)
  227. RMLUILUA_INPUTENUM(RCONTROL, tbl)
  228. RMLUILUA_INPUTENUM(LMENU, tbl)
  229. RMLUILUA_INPUTENUM(RMENU, tbl)
  230. RMLUILUA_INPUTENUM(BROWSER_BACK, tbl)
  231. RMLUILUA_INPUTENUM(BROWSER_FORWARD, tbl)
  232. RMLUILUA_INPUTENUM(BROWSER_REFRESH, tbl)
  233. RMLUILUA_INPUTENUM(BROWSER_STOP, tbl)
  234. RMLUILUA_INPUTENUM(BROWSER_SEARCH, tbl)
  235. RMLUILUA_INPUTENUM(BROWSER_FAVORITES, tbl)
  236. RMLUILUA_INPUTENUM(BROWSER_HOME, tbl)
  237. RMLUILUA_INPUTENUM(VOLUME_MUTE, tbl)
  238. RMLUILUA_INPUTENUM(VOLUME_DOWN, tbl)
  239. RMLUILUA_INPUTENUM(VOLUME_UP, tbl)
  240. RMLUILUA_INPUTENUM(MEDIA_NEXT_TRACK, tbl)
  241. RMLUILUA_INPUTENUM(MEDIA_PREV_TRACK, tbl)
  242. RMLUILUA_INPUTENUM(MEDIA_STOP, tbl)
  243. RMLUILUA_INPUTENUM(MEDIA_PLAY_PAUSE, tbl)
  244. RMLUILUA_INPUTENUM(LAUNCH_MAIL, tbl)
  245. RMLUILUA_INPUTENUM(LAUNCH_MEDIA_SELECT, tbl)
  246. RMLUILUA_INPUTENUM(LAUNCH_APP1, tbl)
  247. RMLUILUA_INPUTENUM(LAUNCH_APP2, tbl)
  248. RMLUILUA_INPUTENUM(OEM_AX, tbl)
  249. RMLUILUA_INPUTENUM(ICO_HELP, tbl)
  250. RMLUILUA_INPUTENUM(ICO_00, tbl)
  251. RMLUILUA_INPUTENUM(PROCESSKEY, tbl)
  252. RMLUILUA_INPUTENUM(ICO_CLEAR, tbl)
  253. RMLUILUA_INPUTENUM(ATTN, tbl)
  254. RMLUILUA_INPUTENUM(CRSEL, tbl)
  255. RMLUILUA_INPUTENUM(EXSEL, tbl)
  256. RMLUILUA_INPUTENUM(EREOF, tbl)
  257. RMLUILUA_INPUTENUM(PLAY, tbl)
  258. RMLUILUA_INPUTENUM(ZOOM, tbl)
  259. RMLUILUA_INPUTENUM(PA1, tbl)
  260. RMLUILUA_INPUTENUM(OEM_CLEAR, tbl)
  261. }
  262. void LuaRmlUiEnumkey_modifier(lua_State* L)
  263. {
  264. lua_newtable(L);
  265. int tbl = lua_gettop(L);
  266. RMLUILUA_INPUTMODIFIERENUM(CTRL, tbl)
  267. RMLUILUA_INPUTMODIFIERENUM(SHIFT, tbl)
  268. RMLUILUA_INPUTMODIFIERENUM(ALT, tbl)
  269. RMLUILUA_INPUTMODIFIERENUM(META, tbl)
  270. RMLUILUA_INPUTMODIFIERENUM(CAPSLOCK, tbl)
  271. RMLUILUA_INPUTMODIFIERENUM(NUMLOCK, tbl)
  272. RMLUILUA_INPUTMODIFIERENUM(SCROLLLOCK, tbl)
  273. }
  274. RegType<LuaRmlUi> LuaRmlUiMethods[] = {
  275. RMLUI_LUAMETHOD(LuaRmlUi, CreateContext),
  276. RMLUI_LUAMETHOD(LuaRmlUi, LoadFontFace),
  277. RMLUI_LUAMETHOD(LuaRmlUi, RegisterTag),
  278. {nullptr, nullptr},
  279. };
  280. luaL_Reg LuaRmlUiGetters[] = {
  281. RMLUI_LUAGETTER(LuaRmlUi, contexts),
  282. RMLUI_LUAGETTER(LuaRmlUi, key_identifier),
  283. RMLUI_LUAGETTER(LuaRmlUi, key_modifier),
  284. {nullptr, nullptr},
  285. };
  286. luaL_Reg LuaRmlUiSetters[] = {
  287. {nullptr, nullptr},
  288. };
  289. RMLUI_LUATYPE_DEFINE(LuaRmlUi)
  290. } // namespace Lua
  291. } // namespace Rml