reflexion 0.1.22 → 0.1.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.doc/ext/reflex/event.cpp +9 -1
  3. data/.doc/ext/reflex/key_event.cpp +3 -3
  4. data/.doc/ext/reflex/native.cpp +2 -0
  5. data/.doc/ext/reflex/pointer.cpp +158 -0
  6. data/.doc/ext/reflex/pointer_event.cpp +29 -88
  7. data/.doc/ext/reflex/selector.cpp +8 -0
  8. data/.doc/ext/reflex/view.cpp +57 -0
  9. data/.doc/ext/reflex/window.cpp +24 -0
  10. data/VERSION +1 -1
  11. data/ext/reflex/event.cpp +11 -2
  12. data/ext/reflex/key_event.cpp +3 -3
  13. data/ext/reflex/native.cpp +2 -0
  14. data/ext/reflex/pointer.cpp +170 -0
  15. data/ext/reflex/pointer_event.cpp +29 -94
  16. data/ext/reflex/selector.cpp +9 -0
  17. data/ext/reflex/view.cpp +67 -3
  18. data/ext/reflex/window.cpp +30 -3
  19. data/include/reflex/defs.h +0 -18
  20. data/include/reflex/event.h +26 -27
  21. data/include/reflex/pointer.h +107 -0
  22. data/include/reflex/ruby/pointer.h +41 -0
  23. data/include/reflex/ruby/view.h +9 -0
  24. data/include/reflex/ruby/window.h +9 -0
  25. data/include/reflex/selector.h +1 -1
  26. data/include/reflex/view.h +6 -4
  27. data/include/reflex/window.h +10 -8
  28. data/lib/reflex/key_event.rb +1 -1
  29. data/lib/reflex/pointer.rb +107 -0
  30. data/lib/reflex/pointer_event.rb +16 -54
  31. data/lib/reflex.rb +1 -0
  32. data/reflex.gemspec +5 -5
  33. data/src/event.cpp +189 -37
  34. data/src/event.h +32 -0
  35. data/src/ios/event.h +15 -3
  36. data/src/ios/event.mm +126 -11
  37. data/src/ios/view_controller.mm +49 -21
  38. data/src/osx/event.h +6 -3
  39. data/src/osx/event.mm +40 -22
  40. data/src/osx/native_window.mm +79 -16
  41. data/src/pointer.cpp +203 -0
  42. data/src/pointer.h +26 -0
  43. data/src/selector.cpp +1 -1
  44. data/src/view.cpp +83 -72
  45. data/src/view.h +0 -4
  46. data/src/window.cpp +321 -97
  47. data/src/window.h +22 -3
  48. data/test/test_event.rb +16 -2
  49. data/test/test_pointer.rb +149 -0
  50. data/test/test_pointer_event.rb +70 -104
  51. data/test/test_selector.rb +7 -0
  52. data/test/test_view.rb +38 -11
  53. data/test/test_window.rb +27 -25
  54. metadata +46 -35
@@ -0,0 +1,170 @@
1
+ #include "reflex/ruby/pointer.h"
2
+
3
+
4
+ #include <rays/ruby/point.h>
5
+ #include "defs.h"
6
+
7
+
8
+ RUCY_DEFINE_VALUE_FROM_TO(Reflex::Pointer)
9
+
10
+ #define THIS to<Reflex::Pointer*>(self)
11
+
12
+ #define CHECK RUCY_CHECK_OBJ(Reflex::Pointer, self)
13
+
14
+
15
+ static
16
+ RUCY_DEF_ALLOC(alloc, klass)
17
+ {
18
+ return new_type<Reflex::Pointer>(klass);
19
+ }
20
+ RUCY_END
21
+
22
+ static
23
+ RUCY_DEF8(initialize,
24
+ id, type, action, position, modifiers, click_count, drag, time)
25
+ {
26
+ CHECK;
27
+
28
+ *THIS = Reflex::Pointer(
29
+ to<Reflex::Pointer::ID>(id),
30
+ to<uint>(type),
31
+ (Reflex::Pointer::Action) to<int>(action),
32
+ to<Rays::Point>(position),
33
+ to<uint>(modifiers),
34
+ to<uint>(click_count),
35
+ to<bool>(drag),
36
+ to<double>(time));
37
+ return self;
38
+ }
39
+ RUCY_END
40
+
41
+ static
42
+ RUCY_DEF1(initialize_copy, obj)
43
+ {
44
+ CHECK;
45
+ *THIS = to<Reflex::Pointer&>(obj);
46
+ return self;
47
+ }
48
+ RUCY_END
49
+
50
+ static
51
+ RUCY_DEF0(get_id)
52
+ {
53
+ CHECK;
54
+ return value(THIS->id());
55
+ }
56
+ RUCY_END
57
+
58
+ static
59
+ RUCY_DEF0(get_type)
60
+ {
61
+ CHECK;
62
+ return value(THIS->type());
63
+ }
64
+ RUCY_END
65
+
66
+ static
67
+ RUCY_DEF0(get_action)
68
+ {
69
+ CHECK;
70
+ return value(THIS->action());
71
+ }
72
+ RUCY_END
73
+
74
+ static
75
+ RUCY_DEF0(get_position)
76
+ {
77
+ CHECK;
78
+ return value(THIS->position());
79
+ }
80
+ RUCY_END
81
+
82
+ static
83
+ RUCY_DEF0(get_modifiers)
84
+ {
85
+ CHECK;
86
+ return value(THIS->modifiers());
87
+ }
88
+ RUCY_END
89
+
90
+ static
91
+ RUCY_DEF0(get_click_count)
92
+ {
93
+ CHECK;
94
+ return value(THIS->click_count());
95
+ }
96
+ RUCY_END
97
+
98
+ static
99
+ RUCY_DEF0(is_drag)
100
+ {
101
+ CHECK;
102
+ return value(THIS->is_drag());
103
+ }
104
+ RUCY_END
105
+
106
+ static
107
+ RUCY_DEF0(get_time)
108
+ {
109
+ CHECK;
110
+ return value(THIS->time());
111
+ }
112
+ RUCY_END
113
+
114
+ static
115
+ RUCY_DEF0(get_prev)
116
+ {
117
+ CHECK;
118
+ return value(THIS->prev());
119
+ }
120
+ RUCY_END
121
+
122
+
123
+ static Class cPointer;
124
+
125
+ void
126
+ Init_pointer ()
127
+ {
128
+ Module mReflex = define_module("Reflex");
129
+
130
+ cPointer = mReflex.define_class("Pointer");
131
+ cPointer.define_alloc_func(alloc);
132
+ cPointer.define_private_method("initialize", initialize);
133
+ cPointer.define_private_method("initialize_copy", initialize_copy);
134
+ cPointer.define_method("id", get_id);
135
+ cPointer.define_private_method("get_type", get_type);
136
+ cPointer.define_private_method("get_action", get_action);
137
+ cPointer.define_method("position", get_position);
138
+ cPointer.define_method("modifiers", get_modifiers);
139
+ cPointer.define_method("click_count", get_click_count);
140
+ cPointer.define_method("drag?", is_drag);
141
+ cPointer.define_method("time", get_time);
142
+ cPointer.define_method("prev", get_prev);
143
+ cPointer.define_const("TYPE_NONE", Reflex::Pointer::TYPE_NONE);
144
+ cPointer.define_const("MOUSE", Reflex::Pointer::MOUSE);
145
+ cPointer.define_const("MOUSE_LEFT", Reflex::Pointer::MOUSE_LEFT);
146
+ cPointer.define_const("MOUSE_RIGHT", Reflex::Pointer::MOUSE_RIGHT);
147
+ cPointer.define_const("MOUSE_MIDDLE", Reflex::Pointer::MOUSE_MIDDLE);
148
+ cPointer.define_const("TOUCH", Reflex::Pointer::TOUCH);
149
+ cPointer.define_const("PEN", Reflex::Pointer::PEN);
150
+ cPointer.define_const("ACTION_NONE", Reflex::Pointer::ACTION_NONE);
151
+ cPointer.define_const("DOWN", Reflex::Pointer::DOWN);
152
+ cPointer.define_const("UP", Reflex::Pointer::UP);
153
+ cPointer.define_const("MOVE", Reflex::Pointer::MOVE);
154
+ cPointer.define_const("CANCEL", Reflex::Pointer::CANCEL);
155
+ cPointer.define_const("STAY", Reflex::Pointer::STAY);
156
+ }
157
+
158
+
159
+ namespace Reflex
160
+ {
161
+
162
+
163
+ Class
164
+ pointer_class ()
165
+ {
166
+ return cPointer;
167
+ }
168
+
169
+
170
+ }// Reflex
@@ -1,7 +1,9 @@
1
1
  #include "reflex/ruby/event.h"
2
2
 
3
3
 
4
+ #include <vector>
4
5
  #include <rays/ruby/point.h>
6
+ #include "reflex/ruby/pointer.h"
5
7
  #include "defs.h"
6
8
 
7
9
 
@@ -20,23 +22,18 @@ RUCY_DEF_ALLOC(alloc, klass)
20
22
  RUCY_END
21
23
 
22
24
  static
23
- RUCY_DEF6(initialize, type, pointer_type, modifiers, count, drag, positions)
25
+ RUCY_DEFN(initialize)
24
26
  {
25
27
  CHECK;
26
28
 
27
- int size = positions.size();
28
- if (size <= 0 || Reflex::PointerEvent::MAX < size)
29
+ if (argc == 0)
29
30
  argument_error(__FILE__, __LINE__);
30
31
 
31
- THIS->type = (Reflex::PointerEvent::Type) to<int>(type);
32
- THIS->pointer_type = to<uint>(pointer_type);
33
- THIS->modifiers = to<uint>(modifiers);
34
- THIS->count = to<uint>(count);
35
- THIS->drag = to<bool>(drag);
36
- THIS->size = (size_t) size;
32
+ std::vector<Reflex::Pointer> pointers;
33
+ for (size_t i = 0; i < argc; ++i)
34
+ pointers.emplace_back(to<Reflex::Pointer&>(argv[i]));
37
35
 
38
- for (int i = 0; i < size; ++i)
39
- THIS->positions[i] = to<Rays::Point>(positions[i]);
36
+ *THIS = Reflex::PointerEvent(&pointers[0], pointers.size());
40
37
 
41
38
  return rb_call_super(0, NULL);
42
39
  }
@@ -51,99 +48,53 @@ RUCY_DEF1(initialize_copy, obj)
51
48
  }
52
49
  RUCY_END
53
50
 
54
- static
55
- RUCY_DEF0(get_type)
56
- {
57
- CHECK;
58
- return value(THIS->type);
59
- }
60
- RUCY_END
61
-
62
- static
63
- RUCY_DEF0(get_pointer_type)
64
- {
65
- CHECK;
66
- return value(THIS->pointer_type);
67
- }
68
- RUCY_END
69
-
70
51
  static
71
52
  RUCY_DEF0(get_size)
72
53
  {
73
54
  CHECK;
74
- return value(THIS->size);
75
- }
76
- RUCY_END
77
-
78
- static
79
- RUCY_DEF0(get_modifiers)
80
- {
81
- CHECK;
82
- return value(THIS->modifiers);
83
- }
84
- RUCY_END
85
-
86
- static
87
- RUCY_DEF0(get_count)
88
- {
89
- CHECK;
90
- return value(THIS->count);
55
+ return value(THIS->size());
91
56
  }
92
57
  RUCY_END
93
58
 
94
59
  static
95
- RUCY_DEF0(is_drag)
60
+ RUCY_DEF0(is_empty)
96
61
  {
97
62
  CHECK;
98
- return value(THIS->drag);
63
+ return value(THIS->empty());
99
64
  }
100
65
  RUCY_END
101
66
 
102
67
  static
103
- RUCY_DEF0(is_capture)
68
+ RUCY_DEF0(is_captured)
104
69
  {
105
70
  CHECK;
106
- return value(THIS->capture);
71
+ return value(THIS->is_captured());
107
72
  }
108
73
  RUCY_END
109
74
 
110
75
  static
111
- RUCY_DEF0(get_x)
112
- {
113
- CHECK;
114
- return value(THIS->x);
115
- }
116
- RUCY_END
117
-
118
- static
119
- RUCY_DEF0(get_y)
76
+ RUCY_DEF1(get_at, index)
120
77
  {
121
78
  CHECK;
122
- return value(THIS->y);
123
- }
124
- RUCY_END
125
79
 
126
- static
127
- RUCY_DEFN(get_position)
128
- {
129
- CHECK;
130
- check_arg_count(__FILE__, __LINE__, "PointerEvent#position", argc, 0, 1);
80
+ int size = (int) THIS->size();
81
+ int i = to<int>(index);
82
+ if (i < -size || size <= i)
83
+ return Qnil;
131
84
 
132
- size_t index = argc >= 1 ? to<int>(argv[0]) : 0;
133
- return value(THIS->position(index));
85
+ return value((*THIS)[i >= 0 ? i : i + size]);
134
86
  }
135
87
  RUCY_END
136
88
 
137
89
  static
138
- RUCY_DEF1(get_at, index)
90
+ RUCY_DEF0(each)
139
91
  {
140
92
  CHECK;
141
93
 
142
- int i = to<int>(index);
143
- if (i < 0 || THIS->size <= (size_t) i)
144
- index_error(__FILE__, __LINE__);
145
-
146
- return value((*THIS)[i]);
94
+ Value ret;
95
+ for (size_t i = 0, size = THIS->size(); i < size; ++i)
96
+ ret = rb_yield(value((*THIS)[i]));
97
+ return ret;
147
98
  }
148
99
  RUCY_END
149
100
 
@@ -159,27 +110,11 @@ Init_pointer_event ()
159
110
  cPointerEvent.define_alloc_func(alloc);
160
111
  cPointerEvent.define_private_method("initialize", initialize);
161
112
  cPointerEvent.define_private_method("initialize_copy", initialize_copy);
162
- cPointerEvent.define_method("type", get_type);
163
- cPointerEvent.define_method("pointer_type", get_pointer_type);
164
- cPointerEvent.define_method("size", get_size);
165
- cPointerEvent.define_method("modifiers", get_modifiers);
166
- cPointerEvent.define_method("count", get_count);
167
- cPointerEvent.define_method("drag?", is_drag);
168
- cPointerEvent.define_method("capture?", is_capture);
169
- cPointerEvent.define_method("x", get_x);
170
- cPointerEvent.define_method("y", get_y);
171
- cPointerEvent.define_method("position", get_position);
172
- cPointerEvent.define_method("[]", get_at);
173
- cPointerEvent.define_const("TYPE_NONE", Reflex::PointerEvent::NONE);
174
- cPointerEvent.define_const("TYPE_DOWN", Reflex::PointerEvent::DOWN);
175
- cPointerEvent.define_const("TYPE_UP", Reflex::PointerEvent::UP);
176
- cPointerEvent.define_const("TYPE_MOVE", Reflex::PointerEvent::MOVE);
177
- cPointerEvent.define_const("POINTER_NONE", Reflex::POINTER_NONE);
178
- cPointerEvent.define_const("POINTER_MOUSE_LEFT", Reflex::POINTER_MOUSE_LEFT);
179
- cPointerEvent.define_const("POINTER_MOUSE_RIGHT", Reflex::POINTER_MOUSE_RIGHT);
180
- cPointerEvent.define_const("POINTER_MOUSE_MIDDLE", Reflex::POINTER_MOUSE_MIDDLE);
181
- cPointerEvent.define_const("POINTER_TOUCH", Reflex::POINTER_TOUCH);
182
- cPointerEvent.define_const("POINTER_PEN", Reflex::POINTER_PEN);
113
+ cPointerEvent.define_method("size", get_size);
114
+ cPointerEvent.define_method("empty?", is_empty);
115
+ cPointerEvent.define_method("captured?", is_captured);
116
+ cPointerEvent.define_method("[]", get_at);
117
+ cPointerEvent.define_method("each", each);
183
118
  }
184
119
 
185
120
 
@@ -90,6 +90,14 @@ RUCY_DEF0(each_tag)
90
90
  }
91
91
  RUCY_END
92
92
 
93
+ static
94
+ RUCY_DEF0(is_empty)
95
+ {
96
+ CHECK;
97
+ return value(C_THIS->empty());
98
+ }
99
+ RUCY_END
100
+
93
101
  static
94
102
  RUCY_DEF1(contains, selector)
95
103
  {
@@ -124,6 +132,7 @@ Init_selector ()
124
132
  cSelector.define_method("clear_tags", clear_tags);
125
133
  cSelector.define_method("tag?", has_tag);
126
134
  cSelector.define_method("each_tag", each_tag);
135
+ cSelector.define_method("empty?", is_empty);
127
136
  cSelector.define_method("contains", contains);
128
137
  cSelector.define_method("==", equal);
129
138
  }
data/ext/reflex/view.cpp CHANGED
@@ -130,6 +130,54 @@ RUCY_DEF0(update_layout)
130
130
  }
131
131
  RUCY_END
132
132
 
133
+ static
134
+ RUCY_DEF1(from_parent, point)
135
+ {
136
+ CHECK;
137
+ return value(THIS->from_parent(to<Rays::Point>(point)));
138
+ }
139
+ RUCY_END
140
+
141
+ static
142
+ RUCY_DEF1(to_parent, point)
143
+ {
144
+ CHECK;
145
+ return value(THIS->to_parent(to<Rays::Point>(point)));
146
+ }
147
+ RUCY_END
148
+
149
+ static
150
+ RUCY_DEF1(from_window, point)
151
+ {
152
+ CHECK;
153
+ return value(THIS->from_window(to<Rays::Point>(point)));
154
+ }
155
+ RUCY_END
156
+
157
+ static
158
+ RUCY_DEF1(to_window, point)
159
+ {
160
+ CHECK;
161
+ return value(THIS->to_window(to<Rays::Point>(point)));
162
+ }
163
+ RUCY_END
164
+
165
+ static
166
+ RUCY_DEF1(from_screen, point)
167
+ {
168
+ CHECK;
169
+ return value(THIS->from_screen(to<Rays::Point>(point)));
170
+ }
171
+ RUCY_END
172
+
173
+ static
174
+ RUCY_DEF1(to_screen, point)
175
+ {
176
+ CHECK;
177
+ return value(THIS->to_screen(to<Rays::Point>(point)));
178
+ }
179
+ RUCY_END
180
+
133
181
  static
134
182
  RUCY_DEF1(add_child, child)
135
183
  {
@@ -1034,6 +1082,14 @@ RUCY_DEF1(on_pointer_move, event)
1034
1082
  }
1035
1083
  RUCY_END
1036
1084
 
1085
+ static
1086
+ RUCY_DEF1(on_pointer_cancel, event)
1087
+ {
1088
+ CHECK;
1089
+ CALL(on_pointer_cancel(to<Reflex::PointerEvent*>(event)));
1090
+ }
1091
+ RUCY_END
1092
+
1037
1093
  static
1038
1094
  RUCY_DEF1(on_wheel, event)
1039
1095
  {
@@ -1102,6 +1158,13 @@ Init_view ()
1102
1158
  cView.define_private_method("start_timer", start_timer);
1103
1159
  cView.define_method("update_layout", update_layout);
1104
1160
 
1161
+ cView.define_method("from_parent", from_parent);
1162
+ cView.define_method( "to_parent", to_parent);
1163
+ cView.define_method("from_window", from_window);
1164
+ cView.define_method( "to_window", to_window);
1165
+ cView.define_method("from_screen", from_screen);
1166
+ cView.define_method( "to_screen", to_screen);
1167
+
1105
1168
  cView.define_method("add_child", add_child);
1106
1169
  cView.define_method("remove_child", remove_child);
1107
1170
  cView.define_method("clear_children", clear_children);
@@ -1201,9 +1264,10 @@ Init_view ()
1201
1264
  cView.define_method("on_key_down", on_key_down);
1202
1265
  cView.define_method("on_key_up", on_key_up);
1203
1266
  cView.define_method("on_pointer", on_pointer);
1204
- cView.define_method("on_pointer_down", on_pointer_down);
1205
- cView.define_method("on_pointer_up", on_pointer_up);
1206
- cView.define_method("on_pointer_move", on_pointer_move);
1267
+ cView.define_method("on_pointer_down", on_pointer_down);
1268
+ cView.define_method("on_pointer_up", on_pointer_up);
1269
+ cView.define_method("on_pointer_move", on_pointer_move);
1270
+ cView.define_method("on_pointer_cancel", on_pointer_cancel);
1207
1271
  cView.define_method("on_wheel", on_wheel);
1208
1272
  cView.define_method("on_capture", on_capture);
1209
1273
  cView.define_method("on_timer", on_timer);
@@ -59,6 +59,22 @@ RUCY_DEF0(redraw)
59
59
  }
60
60
  RUCY_END
61
61
 
62
+ static
63
+ RUCY_DEF1(from_screen, point)
64
+ {
65
+ CHECK;
66
+ return value(THIS->from_screen(to<Rays::Point>(point)));
67
+ }
68
+ RUCY_END
69
+
70
+ static
71
+ RUCY_DEF1(to_screen, point)
72
+ {
73
+ CHECK;
74
+ return value(THIS->to_screen(to<Rays::Point>(point)));
75
+ }
76
+ RUCY_END
77
+
62
78
  static
63
79
  RUCY_DEF1(set_title, title)
64
80
  {
@@ -258,6 +274,14 @@ RUCY_DEF1(on_pointer_move, event)
258
274
  }
259
275
  RUCY_END
260
276
 
277
+ static
278
+ RUCY_DEF1(on_pointer_cancel, event)
279
+ {
280
+ CHECK;
281
+ CALL(on_pointer_cancel(to<Reflex::PointerEvent*>(event)));
282
+ }
283
+ RUCY_END
284
+
261
285
  static
262
286
  RUCY_DEF1(on_wheel, event)
263
287
  {
@@ -280,6 +304,8 @@ Init_window ()
280
304
  cWindow.define_method("hide", hide);
281
305
  cWindow.define_method("close", close);
282
306
  cWindow.define_method("redraw", redraw);
307
+ cWindow.define_method("from_screen", from_screen);
308
+ cWindow.define_method( "to_screen", to_screen);
283
309
  cWindow.define_method("title=", set_title);
284
310
  cWindow.define_method("title", get_title);
285
311
  cWindow.define_method("frame=", set_frame);
@@ -301,9 +327,10 @@ Init_window ()
301
327
  cWindow.define_method("on_key_down", on_key_down);
302
328
  cWindow.define_method("on_key_up", on_key_up);
303
329
  cWindow.define_method("on_pointer", on_pointer);
304
- cWindow.define_method("on_pointer_down", on_pointer_down);
305
- cWindow.define_method("on_pointer_up", on_pointer_up);
306
- cWindow.define_method("on_pointer_move", on_pointer_move);
330
+ cWindow.define_method("on_pointer_down", on_pointer_down);
331
+ cWindow.define_method("on_pointer_up", on_pointer_up);
332
+ cWindow.define_method("on_pointer_move", on_pointer_move);
333
+ cWindow.define_method("on_pointer_cancel", on_pointer_cancel);
307
334
  cWindow.define_method("on_wheel", on_wheel);
308
335
  }
309
336
 
@@ -252,24 +252,6 @@ namespace Reflex
252
252
  };// KeyCode
253
253
 
254
254
 
255
- enum PointerType
256
- {
257
-
258
- POINTER_NONE = 0,
259
-
260
- POINTER_MOUSE_LEFT = 0x1 << 0,
261
-
262
- POINTER_MOUSE_RIGHT = 0x1 << 1,
263
-
264
- POINTER_MOUSE_MIDDLE = 0x1 << 2,
265
-
266
- POINTER_TOUCH = 0x1 << 3,
267
-
268
- POINTER_PEN = 0x1 << 4,
269
-
270
- };// PointType
271
-
272
-
273
255
  enum Modifier
274
256
  {
275
257
 
@@ -4,10 +4,12 @@
4
4
  #define __REFLEX_EVENT_H__
5
5
 
6
6
 
7
+ #include <xot/pimpl.h>
7
8
  #include <rays/point.h>
8
9
  #include <rays/bounds.h>
9
10
  #include <rays/painter.h>
10
11
  #include <reflex/defs.h>
12
+ #include <reflex/pointer.h>
11
13
  #include <reflex/timer.h>
12
14
 
13
15
 
@@ -30,10 +32,14 @@ namespace Reflex
30
32
 
31
33
  bool is_blocked () const;
32
34
 
35
+ double time () const;
36
+
33
37
  private:
34
38
 
35
39
  bool blocked;
36
40
 
41
+ double time_;
42
+
37
43
  };// Event
38
44
 
39
45
 
@@ -161,7 +167,7 @@ namespace Reflex
161
167
 
162
168
  int repeat;
163
169
 
164
- bool capture;
170
+ bool captured;
165
171
 
166
172
  KeyEvent ();
167
173
 
@@ -172,47 +178,40 @@ namespace Reflex
172
178
  };// KeyEvent
173
179
 
174
180
 
175
- struct PointerEvent : public Event
181
+ class PointerEvent : public Event
176
182
  {
177
183
 
178
- enum Type {NONE = 0, DOWN, UP, MOVE};
179
-
180
- enum {MAX = 10};
181
-
182
- Type type;
184
+ typedef PointerEvent This;
183
185
 
184
- uint pointer_type;
186
+ public:
185
187
 
186
- size_t size;
188
+ PointerEvent (bool captured = false);
187
189
 
188
- uint modifiers, count;
190
+ PointerEvent (
191
+ const Pointer& pointer,
192
+ bool captured = false);
189
193
 
190
- bool drag, capture;
194
+ PointerEvent (
195
+ const Pointer* pointers, size_t size,
196
+ bool captured = false);
191
197
 
192
- union
193
- {
194
- struct {coord x, y, z;};
198
+ PointerEvent (const This& obj);
195
199
 
196
- Coord3 positions[MAX];
197
- };
200
+ PointerEvent& operator = (const This& obj);
198
201
 
199
- PointerEvent ();
202
+ ~PointerEvent ();
200
203
 
201
- PointerEvent (
202
- Type type, uint pointer_type, coord x, coord y,
203
- uint modifiers = 0, uint count = 1, bool drag = false);
204
+ size_t size () const;
204
205
 
205
- PointerEvent (
206
- Type type, uint pointer_type, const Point* positions, size_t size,
207
- uint modifiers = 0, uint count = 1, bool drag = false);
206
+ bool empty () const;
208
207
 
209
- Point& position (size_t i = 0);
208
+ bool is_captured () const;
210
209
 
211
- const Point& position (size_t i = 0) const;
210
+ const Pointer& operator [] (size_t index) const;
212
211
 
213
- Point& operator [] (size_t i);
212
+ struct Data;
214
213
 
215
- const Point& operator [] (size_t i) const;
214
+ Xot::PImpl<Data> self;
216
215
 
217
216
  };// PointerEvent
218
217