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
|
#include "flatserial.h"
#include "task.hpp"
SDL_EventCollector::SDL_EventCollector()
{
/* Checker task, pre-process, maximum priority */
checker = new flat::core::task<SDL_EventCollector>(this, &SDL_EventCollector::collect, 0, true, 0);
/* Eraser task, post-process, minimum priority */
eraser = new flat::core::task<SDL_EventCollector>(this, &SDL_EventCollector::erase, 0, false, 0xff);
}
SDL_EventCollector::~SDL_EventCollector()
{
delete checker;
delete eraser;
}
void SDL_EventCollector::collect(void*)
{
SDL_Event event;
while ( SDL_PollEvent(&event) )
{
switch(event.type)
{
/* Keyboard */
case SDL_KEYDOWN:
keyboard.push_back(event);
break;
case SDL_KEYUP:
keyboard.push_back(event);
break;
/* Window */
case SDL_WINDOWEVENT:
window.push_back(event);
break;
/* Quit */
case SDL_QUIT:
quit.push_back(event);
break;
/* User */
case SDL_USEREVENT:
user.push_back(event);
break;
}
// TODO other events
}
}
void SDL_EventCollector::erase(void*)
{
keyboard.clear();
window.clear();
quit.clear();
user.clear();
}
const std::vector<SDL_Event>& SDL_EventCollector::getStack(uint32_t id) const
{
switch(id)
{
{
/* Keyboard */
case SDL_KEYDOWN:
return keyboard;
case SDL_KEYUP:
return keyboard;
/* Window */
case SDL_WINDOWEVENT:
return window;
/* Quit */
case SDL_QUIT:
return quit;
/* User */
case SDL_USEREVENT:
return user;
}
// TODO other events
}
}
SDL_EventCollector * FlatSerial::collector = new SDL_EventCollector();
|