1 | /* |
---|
2 | * Abuse - dark 2D side-scrolling platform game |
---|
3 | * Copyright (c) 1995 Crack dot Com |
---|
4 | * Copyright (c) 2005-2011 Sam Hocevar <sam@hocevar.net> |
---|
5 | * |
---|
6 | * This software was released into the Public Domain. As with most public |
---|
7 | * domain software, no warranty is made or implied by Crack dot Com, by |
---|
8 | * Jonathan Clark, or by Sam Hocevar. |
---|
9 | */ |
---|
10 | |
---|
11 | #ifndef __EVENT_HPP_ |
---|
12 | #define __EVENT_HPP_ |
---|
13 | #define EV_MOUSE_MOVE 1 |
---|
14 | #define EV_MOUSE_BUTTON 2 |
---|
15 | #define EV_KEY 4 |
---|
16 | #define EV_KEY_SPECIAL 8 |
---|
17 | #define EV_REDRAW 16 |
---|
18 | #define EV_SPURIOUS 32 |
---|
19 | #define EV_RESIZE 64 |
---|
20 | #define EV_KEYRELEASE 128 |
---|
21 | #define EV_CLOSE_WINDOW 256 |
---|
22 | #define EV_DRAG_WINDOW 512 |
---|
23 | #define EV_MESSAGE 1024 |
---|
24 | |
---|
25 | #define LEFT_BUTTON 1 |
---|
26 | #define RIGHT_BUTTON 2 |
---|
27 | #define MIDDLE_BUTTON 4 |
---|
28 | |
---|
29 | #include "keys.h" |
---|
30 | #include "sprite.h" |
---|
31 | |
---|
32 | class Jwindow; |
---|
33 | |
---|
34 | class Event : public linked_node |
---|
35 | { |
---|
36 | public: |
---|
37 | Event() |
---|
38 | { |
---|
39 | type = EV_SPURIOUS; |
---|
40 | } |
---|
41 | |
---|
42 | Event(int id, char *data) |
---|
43 | { |
---|
44 | type = EV_MESSAGE; |
---|
45 | message.id = id; |
---|
46 | message.data = data; |
---|
47 | } |
---|
48 | |
---|
49 | int type; |
---|
50 | vec2i mouse_move; |
---|
51 | int mouse_button, key; |
---|
52 | |
---|
53 | struct { char alt, ctrl, shift; } key_special; |
---|
54 | struct { int x1, y1, x2, y2; void *start; } redraw; |
---|
55 | |
---|
56 | Jwindow *window; // NULL is root |
---|
57 | vec2i window_position; |
---|
58 | struct { int id; char *data; } message; |
---|
59 | }; |
---|
60 | |
---|
61 | class EventHandler |
---|
62 | { |
---|
63 | public: |
---|
64 | EventHandler(image *screen, palette *pal); |
---|
65 | ~EventHandler(); |
---|
66 | |
---|
67 | void Push(Event *ev) |
---|
68 | { |
---|
69 | m_events.add_end(ev); |
---|
70 | } |
---|
71 | |
---|
72 | void SysInit(); |
---|
73 | void SysWarpMouse(vec2i pos); |
---|
74 | void SysEvent(Event &ev); |
---|
75 | |
---|
76 | int IsPending(); |
---|
77 | void Get(Event &ev); |
---|
78 | void add_redraw(int X1, int Y1, int X2, int Y2, void *Start); |
---|
79 | void flush_screen(); |
---|
80 | |
---|
81 | int has_mouse() { return 1; } |
---|
82 | void SetMouseShape(image *im, vec2i center) |
---|
83 | { |
---|
84 | m_sprite->SetVisual(im, 1); |
---|
85 | m_center = center; |
---|
86 | } |
---|
87 | void SetMousePos(vec2i pos) |
---|
88 | { |
---|
89 | m_pos = vec2i(Min(Max(pos.x, 0), m_screen->Size().x - 1), |
---|
90 | Min(Max(pos.y, 0), m_screen->Size().y - 1)); |
---|
91 | SysWarpMouse(m_pos); |
---|
92 | } |
---|
93 | |
---|
94 | private: |
---|
95 | linked_list m_events; |
---|
96 | int m_pending, last_key; |
---|
97 | |
---|
98 | image *m_screen; |
---|
99 | |
---|
100 | protected: |
---|
101 | /* Mouse information */ |
---|
102 | Sprite *m_sprite; |
---|
103 | vec2i m_pos, m_center; |
---|
104 | int m_button; |
---|
105 | }; |
---|
106 | |
---|
107 | #endif |
---|
108 | |
---|