PageRenderTime 56ms CodeModel.GetById 28ms RepoModel.GetById 0ms app.codeStats 1ms

/Aurora/External/libRocket/Source/Core/Python/Module.cpp

https://github.com/jeffora/RuntimeCompiledCPlusPlus
C++ | 282 lines | 238 code | 17 blank | 27 comment | 2 complexity | b6140bd4c597ead6e4621a0f98ac944c MD5 | raw file
  1. /*
  2. * This source file is part of libRocket, the HTML/CSS Interface Middleware
  3. *
  4. * For the latest information, see http://www.librocket.com
  5. *
  6. * Copyright (c) 2008-2010 CodePoint Ltd, Shift Technology Ltd
  7. *
  8. * Permission is hereby granted, free of charge, to any person obtaining a copy
  9. * of this software and associated documentation files (the "Software"), to deal
  10. * in the Software without restriction, including without limitation the rights
  11. * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  12. * copies of the Software, and to permit persons to whom the Software is
  13. * furnished to do so, subject to the following conditions:
  14. *
  15. * The above copyright notice and this permission notice shall be included in
  16. * all copies or substantial portions of the Software.
  17. *
  18. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  19. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  20. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  21. * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  22. * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  23. * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  24. * THE SOFTWARE.
  25. *
  26. */
  27. #include "precompiled.h"
  28. #include "Module.h"
  29. #include <Rocket/Core/Python/Utilities.h>
  30. #include <Rocket/Core/Input.h>
  31. #include <Rocket/Core/Factory.h>
  32. #include <Rocket/Core/FontDatabase.h>
  33. #include "ContextInterface.h"
  34. #include "ContextProxy.h"
  35. #include "ElementInterface.h"
  36. #include "EventInterface.h"
  37. #include <Rocket/Core/Python/ElementInstancer.h>
  38. namespace Rocket {
  39. namespace Core {
  40. namespace Python {
  41. static Module module;
  42. static python::object CreateContext(const char* name, const Rocket::Core::Vector2i& dimensions);
  43. static void RegisterTag(const char* tag, python::object& object);
  44. static void InitialisePythonKeyMap();
  45. void RegisterPythonInterfaces();
  46. void RegisterPythonConverters();
  47. BOOST_PYTHON_MODULE(_rocketcore)
  48. {
  49. RegisterPythonInterfaces();
  50. RegisterPythonConverters();
  51. ContextInterface::InitialisePythonInterface();
  52. ElementInterface::InitialisePythonInterface();
  53. EventInterface::InitialisePythonInterface();
  54. InitialisePythonKeyMap();
  55. bool (*LoadFontFace)(const Rocket::Core::String&) = &FontDatabase::LoadFontFace;
  56. python::def("CreateContext", &CreateContext);
  57. python::def("LoadFontFace", LoadFontFace);
  58. python::def("RegisterTag", &RegisterTag);
  59. ContextProxy::InitialisePythonInterface();
  60. python::scope().attr("contexts") = ContextProxy();
  61. Rocket::Core::RegisterPlugin(&module);
  62. }
  63. python::object CreateContext(const char* name, const Rocket::Core::Vector2i& dimensions)
  64. {
  65. Context* new_context = Rocket::Core::CreateContext(name, dimensions);
  66. if (new_context == NULL)
  67. return python::object();
  68. python::object py_context = Rocket::Core::Python::Utilities::MakeObject(new_context);
  69. new_context->RemoveReference();
  70. return py_context;
  71. }
  72. void RegisterTag(const char* tag, python::object& object)
  73. {
  74. // Add the new tag
  75. Factory::RegisterElementInstancer(tag, new ElementInstancer(object.ptr()))->RemoveReference();
  76. }
  77. void Module::OnInitialise()
  78. {
  79. ContextInterface::InitialiseRocketInterface();
  80. EventInterface::InitialiseRocketInterface();
  81. ElementInterface::InitialiseRocketInterface();
  82. }
  83. static void InitialisePythonKeyMap()
  84. {
  85. python::enum_< Input::KeyIdentifier >("key_identifier")
  86. .value("UNKNOWN", Input::KI_UNKNOWN)
  87. .value("SPACE", Input::KI_SPACE)
  88. .value("0", Input::KI_0)
  89. .value("1", Input::KI_1)
  90. .value("2", Input::KI_2)
  91. .value("3", Input::KI_3)
  92. .value("4", Input::KI_4)
  93. .value("5", Input::KI_5)
  94. .value("6", Input::KI_6)
  95. .value("7", Input::KI_7)
  96. .value("8", Input::KI_8)
  97. .value("9", Input::KI_9)
  98. .value("A", Input::KI_A)
  99. .value("B", Input::KI_B)
  100. .value("C", Input::KI_C)
  101. .value("D", Input::KI_D)
  102. .value("E", Input::KI_E)
  103. .value("F", Input::KI_F)
  104. .value("G", Input::KI_G)
  105. .value("H", Input::KI_H)
  106. .value("I", Input::KI_I)
  107. .value("J", Input::KI_J)
  108. .value("K", Input::KI_K)
  109. .value("L", Input::KI_L)
  110. .value("M", Input::KI_M)
  111. .value("N", Input::KI_N)
  112. .value("O", Input::KI_O)
  113. .value("P", Input::KI_P)
  114. .value("Q", Input::KI_Q)
  115. .value("R", Input::KI_R)
  116. .value("S", Input::KI_S)
  117. .value("T", Input::KI_T)
  118. .value("U", Input::KI_U)
  119. .value("V", Input::KI_V)
  120. .value("W", Input::KI_W)
  121. .value("X", Input::KI_X)
  122. .value("Y", Input::KI_Y)
  123. .value("Z", Input::KI_Z)
  124. .value("OEM_1", Input::KI_OEM_1)
  125. .value("OEM_PLUS", Input::KI_OEM_PLUS)
  126. .value("OEM_COMMA", Input::KI_OEM_COMMA)
  127. .value("OEM_MINUS", Input::KI_OEM_MINUS)
  128. .value("OEM_PERIOD", Input::KI_OEM_PERIOD)
  129. .value("OEM_2", Input::KI_OEM_2)
  130. .value("OEM_3", Input::KI_OEM_3)
  131. .value("OEM_4", Input::KI_OEM_4)
  132. .value("OEM_5", Input::KI_OEM_5)
  133. .value("OEM_6", Input::KI_OEM_6)
  134. .value("OEM_7", Input::KI_OEM_7)
  135. .value("OEM_8", Input::KI_OEM_8)
  136. .value("OEM_102", Input::KI_OEM_102)
  137. .value("NUMPAD0", Input::KI_NUMPAD0)
  138. .value("NUMPAD1", Input::KI_NUMPAD1)
  139. .value("NUMPAD2", Input::KI_NUMPAD2)
  140. .value("NUMPAD3", Input::KI_NUMPAD3)
  141. .value("NUMPAD4", Input::KI_NUMPAD4)
  142. .value("NUMPAD5", Input::KI_NUMPAD5)
  143. .value("NUMPAD6", Input::KI_NUMPAD6)
  144. .value("NUMPAD7", Input::KI_NUMPAD7)
  145. .value("NUMPAD8", Input::KI_NUMPAD8)
  146. .value("NUMPAD9", Input::KI_NUMPAD9)
  147. .value("NUMPADENTER", Input::KI_NUMPADENTER)
  148. .value("MULTIPLY", Input::KI_MULTIPLY)
  149. .value("ADD", Input::KI_ADD)
  150. .value("SEPARATOR", Input::KI_SEPARATOR)
  151. .value("SUBTRACT", Input::KI_SUBTRACT)
  152. .value("DECIMAL", Input::KI_DECIMAL)
  153. .value("DIVIDE", Input::KI_DIVIDE)
  154. .value("OEM_NEC_EQUAL", Input::KI_OEM_NEC_EQUAL)
  155. .value("BACK", Input::KI_BACK)
  156. .value("TAB", Input::KI_TAB)
  157. .value("CLEAR", Input::KI_CLEAR)
  158. .value("RETURN", Input::KI_RETURN)
  159. .value("PAUSE", Input::KI_PAUSE)
  160. .value("CAPITAL", Input::KI_CAPITAL)
  161. .value("KANA", Input::KI_KANA)
  162. .value("HANGUL", Input::KI_HANGUL)
  163. .value("JUNJA", Input::KI_JUNJA)
  164. .value("FINAL", Input::KI_FINAL)
  165. .value("HANJA", Input::KI_HANJA)
  166. .value("KANJI", Input::KI_KANJI)
  167. .value("ESCAPE", Input::KI_ESCAPE)
  168. .value("CONVERT", Input::KI_CONVERT)
  169. .value("NONCONVERT", Input::KI_NONCONVERT)
  170. .value("ACCEPT", Input::KI_ACCEPT)
  171. .value("MODECHANGE", Input::KI_MODECHANGE)
  172. .value("PRIOR", Input::KI_PRIOR)
  173. .value("NEXT", Input::KI_NEXT)
  174. .value("END", Input::KI_END)
  175. .value("HOME", Input::KI_HOME)
  176. .value("LEFT", Input::KI_LEFT)
  177. .value("UP", Input::KI_UP)
  178. .value("RIGHT", Input::KI_RIGHT)
  179. .value("DOWN", Input::KI_DOWN)
  180. .value("SELECT", Input::KI_SELECT)
  181. .value("PRINT", Input::KI_PRINT)
  182. .value("EXECUTE", Input::KI_EXECUTE)
  183. .value("SNAPSHOT", Input::KI_SNAPSHOT)
  184. .value("INSERT", Input::KI_INSERT)
  185. .value("DELETE", Input::KI_DELETE)
  186. .value("HELP", Input::KI_HELP)
  187. .value("LWIN", Input::KI_LWIN)
  188. .value("RWIN", Input::KI_RWIN)
  189. .value("APPS", Input::KI_APPS)
  190. .value("POWER", Input::KI_POWER)
  191. .value("SLEEP", Input::KI_SLEEP)
  192. .value("WAKE", Input::KI_WAKE)
  193. .value("F1", Input::KI_F1)
  194. .value("F2", Input::KI_F2)
  195. .value("F3", Input::KI_F3)
  196. .value("F4", Input::KI_F4)
  197. .value("F5", Input::KI_F5)
  198. .value("F6", Input::KI_F6)
  199. .value("F7", Input::KI_F7)
  200. .value("F8", Input::KI_F8)
  201. .value("F9", Input::KI_F9)
  202. .value("F10", Input::KI_F10)
  203. .value("F11", Input::KI_F11)
  204. .value("F12", Input::KI_F12)
  205. .value("F13", Input::KI_F13)
  206. .value("F14", Input::KI_F14)
  207. .value("F15", Input::KI_F15)
  208. .value("F16", Input::KI_F16)
  209. .value("F17", Input::KI_F17)
  210. .value("F18", Input::KI_F18)
  211. .value("F19", Input::KI_F19)
  212. .value("F20", Input::KI_F20)
  213. .value("F21", Input::KI_F21)
  214. .value("F22", Input::KI_F22)
  215. .value("F23", Input::KI_F23)
  216. .value("F24", Input::KI_F24)
  217. .value("NUMLOCK", Input::KI_NUMLOCK)
  218. .value("SCROLL", Input::KI_SCROLL)
  219. .value("OEM_FJ_JISHO", Input::KI_OEM_FJ_JISHO)
  220. .value("OEM_FJ_MASSHOU", Input::KI_OEM_FJ_MASSHOU)
  221. .value("OEM_FJ_TOUROKU", Input::KI_OEM_FJ_TOUROKU)
  222. .value("OEM_FJ_LOYA", Input::KI_OEM_FJ_LOYA)
  223. .value("OEM_FJ_ROYA", Input::KI_OEM_FJ_ROYA)
  224. .value("LSHIFT", Input::KI_LSHIFT)
  225. .value("RSHIFT", Input::KI_RSHIFT)
  226. .value("LCONTROL", Input::KI_LCONTROL)
  227. .value("RCONTROL", Input::KI_RCONTROL)
  228. .value("LMENU", Input::KI_LMENU)
  229. .value("RMENU", Input::KI_RMENU)
  230. .value("BROWSER_BACK", Input::KI_BROWSER_BACK)
  231. .value("BROWSER_FORWARD", Input::KI_BROWSER_FORWARD)
  232. .value("BROWSER_REFRESH", Input::KI_BROWSER_REFRESH)
  233. .value("BROWSER_STOP", Input::KI_BROWSER_STOP)
  234. .value("BROWSER_SEARCH", Input::KI_BROWSER_SEARCH)
  235. .value("BROWSER_FAVORITES", Input::KI_BROWSER_FAVORITES)
  236. .value("BROWSER_HOME", Input::KI_BROWSER_HOME)
  237. .value("VOLUME_MUTE", Input::KI_VOLUME_MUTE)
  238. .value("VOLUME_DOWN", Input::KI_VOLUME_DOWN)
  239. .value("VOLUME_UP", Input::KI_VOLUME_UP)
  240. .value("MEDIA_NEXT_TRACK", Input::KI_MEDIA_NEXT_TRACK)
  241. .value("MEDIA_PREV_TRACK", Input::KI_MEDIA_PREV_TRACK)
  242. .value("MEDIA_STOP", Input::KI_MEDIA_STOP)
  243. .value("MEDIA_PLAY_PAUSE", Input::KI_MEDIA_PLAY_PAUSE)
  244. .value("LAUNCH_MAIL", Input::KI_LAUNCH_MAIL)
  245. .value("LAUNCH_MEDIA_SELECT", Input::KI_LAUNCH_MEDIA_SELECT)
  246. .value("LAUNCH_APP1", Input::KI_LAUNCH_APP1)
  247. .value("LAUNCH_APP2", Input::KI_LAUNCH_APP2)
  248. .value("OEM_AX", Input::KI_OEM_AX)
  249. .value("ICO_HELP", Input::KI_ICO_HELP)
  250. .value("ICO_00", Input::KI_ICO_00)
  251. .value("PROCESSKEY", Input::KI_PROCESSKEY)
  252. .value("ICO_CLEAR", Input::KI_ICO_CLEAR)
  253. .value("ATTN", Input::KI_ATTN)
  254. .value("CRSEL", Input::KI_CRSEL)
  255. .value("EXSEL", Input::KI_EXSEL)
  256. .value("EREOF", Input::KI_EREOF)
  257. .value("PLAY", Input::KI_PLAY)
  258. .value("ZOOM", Input::KI_ZOOM)
  259. .value("PA1", Input::KI_PA1)
  260. .value("OEM_CLEAR", Input::KI_OEM_CLEAR)
  261. ;
  262. }
  263. }
  264. }
  265. }