entry_p.h 2.7 KB

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