Subversion Repositories Games.Descent

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 pmbaty 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