File: events.h

package info (click to toggle)
scummvm 2.9.1%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 450,580 kB
  • sloc: cpp: 4,299,825; asm: 28,322; python: 12,901; sh: 11,302; java: 9,289; xml: 7,895; perl: 2,639; ansic: 2,465; yacc: 1,670; javascript: 1,020; makefile: 933; lex: 578; awk: 275; objc: 82; sed: 11; php: 1
file content (141 lines) | stat: -rw-r--r-- 3,301 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
/* ScummVM - Graphic Adventure Engine
 *
 * ScummVM is the legal property of its developers, whose names
 * are too numerous to list here. Please refer to the COPYRIGHT
 * file distributed with this source distribution.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */

#ifndef M4_PLATFORM_EVENTS_H
#define M4_PLATFORM_EVENTS_H

#include "common/queue.h"
#include "common/events.h"
#include "m4/m4_types.h"

namespace M4 {

enum MouseEvent {
	_ME_no_event,		// 0
	_ME_move,			// 1
	_ME_L_click,		// 2
	_ME_L_hold,			// 3
	_ME_L_drag,			// 4
	_ME_L_release,		// 5
	_ME_R_click,		// 6
	_ME_R_hold,			// 7
	_ME_R_drag,			// 8
	_ME_R_release,		// 9
	_ME_both_click,		// 10
	_ME_both_hold,		// 11
	_ME_both_drag,		// 12
	_ME_both_release,	// 13
	_ME_doubleclick,	// 14
	_ME_doubleclick_hold, // 15
	_ME_doubleclick_drag, // 16
	_ME_doubleclick_release
};

enum mausState {
	_MS_no_event,		// 0
	_MS_L_clickDown,	// 1
	_MS_R_clickDown,	// 2
	_MS_both_clickDown,	// 3
	_MS_doubleclick_Down // 4
};

struct MouseInfo {
	uint16 Event = 0;
	uint16 ButtonState = 0;
	uint16 CursorColumn = 0;	// x
	uint16 CursorRow = 0;		// y
	uint16 HorizontalMickeyCount = 0;
	uint16 VerticalMickeyCount = 0;
};

struct Events : public MouseInfo {
private:
	Common::Queue<Common::KeyState> _pendingKeys;
	uint16 &_mouseX = CursorColumn;
	uint16 &_mouseY = CursorRow;
	uint16 _oldX = 0xffff;
	uint16 _oldY = 0xffff;
	mausState _mouse_state = _MS_no_event;
	uint32 _mouseStateEvent = 0;
	uint32 _dclickTime = 0;

	/**
	 * Handles reading in pending events from the ScummVM event queue
	 */
	void pollEvents();

	/**
	 * Handles mouse events
	 */
	void handleMouseEvent(const Common::Event &ev);

	/**
	 * Handles keyboard events
	 */
	void handleKeyboardEvent(const Common::Event &ev);

	/**
	 * Tells if key event refers to one of the mod-keys
	 */
	inline bool is_mod_key(const Common::KeyState &ks) {
		return ks.keycode == Common::KEYCODE_LCTRL || ks.keycode == Common::KEYCODE_RCTRL ||
			ks.keycode == Common::KEYCODE_LALT || ks.keycode == Common::KEYCODE_RALT ||
			ks.keycode == Common::KEYCODE_LSHIFT || ks.keycode == Common::KEYCODE_RSHIFT ||
			ks.keycode == Common::KEYCODE_MODE;
	}

public:
	Events();
	~Events();

	/**
	 * Updates pending events and timers
	 */
	void process();

	/**
	 * Get the next pending mouse event
	 */
	MouseEvent mouse_get_event();

	/**
	 * Get the next pending keyboard event
	 */
	bool util_kbd_check(int32 *parm1);

	void clearMouseStateEvent() {
		_mouseStateEvent = 0;
	}

	/**
	 * Delays by a given number of milliseconds
	 */
	void delay(uint amount);
};

extern Events *g_events;

MouseEvent mouse_get_event();
bool util_kbd_check(int32 *parm1);

} // namespace M4

#endif