entry_p.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. /*
  2. * Copyright 2011-2013 Branimir Karadzic. All rights reserved.
  3. * License: http://www.opensource.org/licenses/BSD-2-Clause
  4. */
  5. #ifndef ENTRY_PRIVATE_H_HEADER_GUARD
  6. #define ENTRY_PRIVATE_H_HEADER_GUARD
  7. #include <bx/spscqueue.h>
  8. #include "entry.h"
  9. #ifndef ENTRY_CONFIG_USE_SDL
  10. # define ENTRY_CONFIG_USE_SDL 0 //BX_PLATFORM_OSX
  11. #endif // ENTRY_CONFIG_USE_SDL
  12. #ifndef ENTRY_CONFIG_USE_NATIVE
  13. # define ENTRY_CONFIG_USE_NATIVE !ENTRY_CONFIG_USE_SDL
  14. #endif // ENTRY_CONFIG_USE_NATIVE
  15. #if !defined(ENTRY_DEFAULT_WIDTH) && !defined(ENTRY_DEFAULT_HEIGHT)
  16. # define ENTRY_DEFAULT_WIDTH 1280
  17. # define ENTRY_DEFAULT_HEIGHT 720
  18. #elif !defined(ENTRY_DEFAULT_WIDTH) || !defined(ENTRY_DEFAULT_HEIGHT)
  19. # error "Both ENTRY_DEFAULT_WIDTH and ENTRY_DEFAULT_HEIGHT must be defined."
  20. #endif // ENTRY_DEFAULT_WIDTH
  21. namespace entry
  22. {
  23. int main(int _argc, char** _argv);
  24. struct Event
  25. {
  26. enum Enum
  27. {
  28. Exit,
  29. Key,
  30. Mouse,
  31. Size,
  32. };
  33. Event::Enum m_type;
  34. };
  35. struct KeyEvent : public Event
  36. {
  37. Key::Enum m_key;
  38. uint8_t m_modifiers;
  39. bool m_down;
  40. };
  41. struct MouseEvent : public Event
  42. {
  43. int32_t m_mx;
  44. int32_t m_my;
  45. MouseButton::Enum m_button;
  46. bool m_down;
  47. bool m_move;
  48. };
  49. struct SizeEvent : public Event
  50. {
  51. uint32_t m_width;
  52. uint32_t m_height;
  53. };
  54. const Event* poll();
  55. void release(const Event* _event);
  56. void setWindowSize(uint32_t _width, uint32_t _height);
  57. void toggleWindowFrame();
  58. void setMouseLock(bool _lock);
  59. class EventQueue
  60. {
  61. public:
  62. void postExitEvent()
  63. {
  64. Event* ev = new Event;
  65. ev->m_type = Event::Exit;
  66. m_queue.push(ev);
  67. }
  68. void postKeyEvent(Key::Enum _key, uint8_t _modifiers, bool _down)
  69. {
  70. KeyEvent* ev = new KeyEvent;
  71. ev->m_type = Event::Key;
  72. ev->m_key = _key;
  73. ev->m_modifiers = _modifiers;
  74. ev->m_down = _down;
  75. m_queue.push(ev);
  76. }
  77. void postMouseEvent(int32_t _mx, int32_t _my)
  78. {
  79. MouseEvent* ev = new MouseEvent;
  80. ev->m_type = Event::Mouse;
  81. ev->m_mx = _mx;
  82. ev->m_my = _my;
  83. ev->m_button = MouseButton::None;
  84. ev->m_down = false;
  85. ev->m_move = true;
  86. m_queue.push(ev);
  87. }
  88. void postMouseEvent(int32_t _mx, int32_t _my, MouseButton::Enum _button, bool _down)
  89. {
  90. MouseEvent* ev = new MouseEvent;
  91. ev->m_type = Event::Mouse;
  92. ev->m_mx = _mx;
  93. ev->m_my = _my;
  94. ev->m_button = _button;
  95. ev->m_down = _down;
  96. ev->m_move = false;
  97. m_queue.push(ev);
  98. }
  99. void postSizeEvent(uint32_t _width, uint32_t _height)
  100. {
  101. SizeEvent* ev = new SizeEvent;
  102. ev->m_type = Event::Size;
  103. ev->m_width = _width;
  104. ev->m_height = _height;
  105. m_queue.push(ev);
  106. }
  107. const Event* poll()
  108. {
  109. return m_queue.pop();
  110. }
  111. void release(const Event* _event) const
  112. {
  113. delete _event;
  114. }
  115. private:
  116. bx::SpScUnboundedQueue<Event> m_queue;
  117. };
  118. } // namespace entry
  119. #endif // ENTRY_PRIVATE_H_HEADER_GUARD