Subversion Repositories Games.Descent

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /*
  2.  * This file is part of the DXX-Rebirth project <https://www.dxx-rebirth.com/>.
  3.  * It is copyright by its individual contributors, as recorded in the
  4.  * project's Git history.  See COPYING.txt at the top level for license
  5.  * terms and a link to the Git history.
  6.  */
  7. /*
  8.  *
  9.  * SDL mouse driver header
  10.  *
  11.  */
  12.  
  13. #pragma once
  14.  
  15. #include "pstypes.h"
  16. #include "maths.h"
  17.  
  18. #ifdef __cplusplus
  19. #include <SDL_version.h>
  20. #include <cassert>
  21. #include "fwd-window.h"
  22. #include "event.h"
  23.  
  24. struct SDL_MouseButtonEvent;
  25. struct SDL_MouseMotionEvent;
  26.  
  27. namespace dcx {
  28.  
  29. #define MOUSE_MAX_BUTTONS       16
  30. #define Z_SENSITIVITY           100
  31. #define MBTN_LEFT               0
  32. #define MBTN_RIGHT              1
  33. #define MBTN_MIDDLE             2
  34. #define MBTN_Z_UP               3
  35. #define MBTN_Z_DOWN             4
  36. #define MBTN_PITCH_BACKWARD     5
  37. #define MBTN_PITCH_FORWARD      6
  38. #define MBTN_BANK_LEFT          7
  39. #define MBTN_BANK_RIGHT         8
  40. #define MBTN_HEAD_LEFT          9
  41. #define MBTN_HEAD_RIGHT         10
  42. #define MBTN_11                 11
  43. #define MBTN_12                 12
  44. #define MBTN_13                 13
  45. #define MBTN_14                 14
  46. #define MBTN_15                 15
  47. #define MBTN_16                 16
  48. #define MOUSE_LBTN              1
  49. #define MOUSE_RBTN              2
  50. #define MOUSE_MBTN              4
  51.  
  52. extern void mouse_flush();      // clears all mice events...
  53. extern void mouse_init(void);
  54. extern void mouse_close(void);
  55. extern void mouse_get_pos( int *x, int *y, int *z );
  56. window_event_result mouse_in_window(class window *wind);
  57. extern void mouse_get_delta( int *dx, int *dy, int *dz );
  58. void mouse_enable_cursor();
  59. void mouse_disable_cursor();
  60. window_event_result mouse_button_handler(const SDL_MouseButtonEvent *mbe);
  61. window_event_result mouse_motion_handler(const SDL_MouseMotionEvent *mme);
  62. void mouse_cursor_autohide();
  63.  
  64. class d_event_mousebutton : public d_event
  65. {
  66. public:
  67.         d_event_mousebutton(event_type type, unsigned b);
  68.         const unsigned button;
  69. };
  70.  
  71. class d_event_mouse_moved : public d_event
  72. {
  73. public:
  74. #if SDL_MAJOR_VERSION == 1
  75. #define SDL_MOUSE_MOVE_INT_TYPE Sint16
  76. #elif SDL_MAJOR_VERSION == 2
  77. #define SDL_MOUSE_MOVE_INT_TYPE Sint32
  78. #endif
  79.         const SDL_MOUSE_MOVE_INT_TYPE dx, dy;
  80.         const int16_t dz;
  81.         constexpr d_event_mouse_moved(const event_type t, const SDL_MOUSE_MOVE_INT_TYPE x, const SDL_MOUSE_MOVE_INT_TYPE y, const int16_t z) :
  82.                 d_event(t), dx(x), dy(y), dz(z)
  83.         {
  84.         }
  85. #undef SDL_MOUSE_MOVE_INT_TYPE
  86. };
  87.  
  88. static inline int event_mouse_get_button(const d_event &event)
  89. {
  90.         auto &e = static_cast<const d_event_mousebutton &>(event);
  91.         assert(e.type == EVENT_MOUSE_BUTTON_DOWN || e.type == EVENT_MOUSE_BUTTON_UP);
  92.         return e.button;
  93. }
  94.  
  95. static inline void event_mouse_get_delta(const d_event &event, int *dx, int *dy, int *dz)
  96. {
  97.         auto &e = static_cast<const d_event_mouse_moved &>(event);
  98.         assert(e.type == EVENT_MOUSE_MOVED);
  99.         *dx = e.dx;
  100.         *dy = e.dy;
  101.         *dz = e.dz;
  102. }
  103.  
  104. }
  105.  
  106. #endif
  107.