0
|
1 #ifndef __EVENT__
|
|
2 #define __EVENT__
|
|
3
|
|
4 #include"rect.h"
|
|
5 #include"SDL.h"
|
|
6
|
|
7 namespace Event {
|
|
8
|
|
9 class Video;
|
|
10 class Time;
|
|
11 class Container;
|
|
12
|
|
13 /*
|
|
14 ** マウスの press, ドラッグ、in/out を検出できる
|
|
15 ** focus がある時の left/right/space(==press) のキーを判別できる
|
|
16 */
|
|
17 struct Video {
|
|
18 virtual void Press(void) {}
|
|
19 virtual void Release(void) {}
|
|
20 virtual void Drag(int x_from, int y_from, int x_to, int y_to) {}
|
|
21 virtual void Motion(int x, int y) {}
|
|
22 virtual void In(void) {}
|
|
23 virtual void Out(void) {}
|
|
24 virtual void KeyLeft(void) {}
|
|
25 virtual void KeyRight(void) {}
|
|
26
|
|
27 int point_in(int x, int y); /* z or -1 を返す。大きいほど高いところにある */
|
|
28
|
|
29 Video(Container& container);
|
|
30 Video(Container& container, const Rect& init_rect);
|
|
31 Video(Container& container, const Rect& init_rect, int z);
|
|
32 void SetRegion(const Rect& new_rect);
|
|
33 void SetZ(int new_z);
|
|
34 void activate(void);
|
|
35 void deactivate(void);
|
|
36 virtual ~Video();
|
|
37
|
|
38 Rect Region(void) const { return region;}
|
|
39 private:
|
|
40 Rect region;
|
|
41 int z;
|
|
42 Container& parent;
|
|
43 bool activated;
|
|
44 friend bool operator <(const Video& position1, const Video& position2);
|
|
45 };
|
|
46
|
|
47 struct Time {
|
|
48 enum { NEVER_WAKE = 0xffffffff, FRAME_UPDATE = 0xfffffffe};
|
|
49 virtual void Elapsed(unsigned int current_time) {wakeup_time = NEVER_WAKE; }; /* next: never elapsed */
|
|
50 void SetWakeup(unsigned int new_wakeup_time) { wakeup_time = new_wakeup_time; }
|
|
51 unsigned Wakeup(void) const { return wakeup_time; }
|
|
52
|
|
53 Time(Container& container);
|
|
54 ~Time();
|
|
55 private:
|
|
56 unsigned int wakeup_time;
|
|
57 Container& parent;
|
|
58 };
|
|
59
|
|
60 struct Container {
|
|
61 #define MOUSE_LEFT 0
|
|
62 #define MOUSE_MIDDLE 1
|
|
63 #define MOUSE_RIGHT 2
|
|
64 #define MOUSE_UP 3
|
|
65 #define MOUSE_DOWN 4
|
|
66 #define KEY_SHIFT 10
|
|
67 #define BUTTON_MAX 32
|
|
68 int button_pressed;
|
|
69 int button_presscount[BUTTON_MAX];
|
|
70 int current_time;
|
|
71
|
|
72 void MousePos(int& x, int& y);
|
|
73 bool Exec(unsigned int current_time);
|
|
74
|
|
75 void Add(Video* item);
|
|
76 void Delete(Video* item);
|
|
77
|
|
78 void Add(Time* item);
|
|
79 void Delete(Time* item);
|
|
80
|
|
81 typedef bool (*motionfunc)(int x, int y, void* pointer);
|
|
82 void RegisterGlobalMotionFunc(motionfunc, void* pointer); // マウスの移動のたびに呼び出される関数を登録する
|
|
83 void DeleteGlobalMotionFunc(motionfunc, void* pointer);
|
|
84 void RegisterGlobalPressFunc(motionfunc, void* pointer); // マウスのクリックのたびに呼び出される関数を登録する
|
|
85 void DeleteGlobalPressFunc(motionfunc, void* pointer);
|
|
86
|
|
87 Container(void);
|
|
88 ~Container(void);
|
|
89 bool pressed(int mask);
|
|
90 bool presscount(int mask);
|
|
91 private:
|
|
92 class ContainerImplVideo* pimpl_video;
|
|
93 class ContainerImplTime* pimpl_time;
|
|
94 };
|
|
95
|
|
96 }; /* end of namespace Event */
|
|
97
|
|
98
|
|
99 #endif
|