reflexion 0.1.20 → 0.1.24

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 (130) hide show
  1. checksums.yaml +4 -4
  2. data/.doc/ext/reflex/capture_event.cpp +6 -5
  3. data/.doc/ext/reflex/contact_event.cpp +18 -16
  4. data/.doc/ext/reflex/draw_event.cpp +10 -8
  5. data/.doc/ext/reflex/event.cpp +10 -10
  6. data/.doc/ext/reflex/focus_event.cpp +18 -17
  7. data/.doc/ext/reflex/frame_event.cpp +17 -17
  8. data/.doc/ext/reflex/key_event.cpp +227 -28
  9. data/.doc/ext/reflex/native.cpp +2 -0
  10. data/.doc/ext/reflex/pointer.cpp +158 -0
  11. data/.doc/ext/reflex/pointer_event.cpp +32 -91
  12. data/.doc/ext/reflex/scroll_event.cpp +14 -17
  13. data/.doc/ext/reflex/selector.cpp +8 -0
  14. data/.doc/ext/reflex/timer.cpp +9 -1
  15. data/.doc/ext/reflex/timer_event.cpp +4 -13
  16. data/.doc/ext/reflex/update_event.cpp +6 -5
  17. data/.doc/ext/reflex/view.cpp +57 -0
  18. data/.doc/ext/reflex/wheel_event.cpp +39 -22
  19. data/.doc/ext/reflex/window.cpp +41 -0
  20. data/VERSION +1 -1
  21. data/ext/reflex/capture_event.cpp +6 -5
  22. data/ext/reflex/contact_event.cpp +18 -16
  23. data/ext/reflex/draw_event.cpp +9 -7
  24. data/ext/reflex/event.cpp +11 -11
  25. data/ext/reflex/focus_event.cpp +18 -17
  26. data/ext/reflex/frame_event.cpp +16 -16
  27. data/ext/reflex/key_event.cpp +228 -28
  28. data/ext/reflex/native.cpp +2 -0
  29. data/ext/reflex/pointer.cpp +170 -0
  30. data/ext/reflex/pointer_event.cpp +31 -96
  31. data/ext/reflex/scroll_event.cpp +15 -18
  32. data/ext/reflex/selector.cpp +9 -0
  33. data/ext/reflex/timer.cpp +15 -6
  34. data/ext/reflex/timer_event.cpp +9 -19
  35. data/ext/reflex/update_event.cpp +6 -5
  36. data/ext/reflex/view.cpp +67 -3
  37. data/ext/reflex/wheel_event.cpp +40 -21
  38. data/ext/reflex/window.cpp +49 -3
  39. data/include/reflex/defs.h +140 -106
  40. data/include/reflex/event.h +232 -124
  41. data/include/reflex/pointer.h +107 -0
  42. data/include/reflex/ruby/pointer.h +41 -0
  43. data/include/reflex/ruby/view.h +9 -0
  44. data/include/reflex/ruby/window.h +9 -0
  45. data/include/reflex/selector.h +1 -1
  46. data/include/reflex/shape.h +2 -2
  47. data/include/reflex/view.h +6 -4
  48. data/include/reflex/window.h +14 -8
  49. data/lib/reflex/application.rb +3 -3
  50. data/lib/reflex/autoinit.rb +1 -1
  51. data/lib/reflex/button.rb +7 -7
  52. data/lib/reflex/capture_event.rb +7 -7
  53. data/lib/reflex/contact_event.rb +10 -10
  54. data/lib/reflex/draw_event.rb +2 -2
  55. data/lib/reflex/ellipse_shape.rb +2 -2
  56. data/lib/reflex/focus_event.rb +11 -11
  57. data/lib/reflex/frame_event.rb +5 -5
  58. data/lib/reflex/helper.rb +20 -20
  59. data/lib/reflex/image_view.rb +2 -2
  60. data/lib/reflex/key_event.rb +12 -12
  61. data/lib/reflex/model.rb +22 -22
  62. data/lib/reflex/model_owner.rb +7 -7
  63. data/lib/reflex/model_view.rb +1 -1
  64. data/lib/reflex/module.rb +5 -5
  65. data/lib/reflex/pointer.rb +107 -0
  66. data/lib/reflex/pointer_event.rb +16 -54
  67. data/lib/reflex/polygon_shape.rb +2 -2
  68. data/lib/reflex/reflex.rb +3 -3
  69. data/lib/reflex/scroll_event.rb +1 -1
  70. data/lib/reflex/selector.rb +4 -4
  71. data/lib/reflex/shape.rb +13 -13
  72. data/lib/reflex/style.rb +11 -11
  73. data/lib/reflex/style_length.rb +1 -1
  74. data/lib/reflex/text_view.rb +2 -2
  75. data/lib/reflex/timer.rb +2 -2
  76. data/lib/reflex/timer_event.rb +3 -2
  77. data/lib/reflex/update_event.rb +1 -1
  78. data/lib/reflex/view.rb +32 -32
  79. data/lib/reflex/wheel_event.rb +2 -10
  80. data/lib/reflex/window.rb +8 -7
  81. data/lib/reflex.rb +1 -0
  82. data/lib/reflexion.rb +17 -17
  83. data/reflex.gemspec +5 -5
  84. data/samples/reflexion/noise.rb +1 -1
  85. data/samples/tree.rb +1 -1
  86. data/src/event.cpp +792 -86
  87. data/src/event.h +47 -0
  88. data/src/image_view.cpp +2 -2
  89. data/src/ios/event.h +15 -3
  90. data/src/ios/event.mm +126 -11
  91. data/src/ios/view_controller.mm +51 -23
  92. data/src/ios/window.mm +18 -0
  93. data/src/osx/event.h +15 -4
  94. data/src/osx/event.mm +214 -24
  95. data/src/osx/native_window.mm +85 -18
  96. data/src/osx/window.mm +22 -0
  97. data/src/pointer.cpp +203 -0
  98. data/src/pointer.h +26 -0
  99. data/src/selector.cpp +1 -1
  100. data/src/shape.cpp +11 -13
  101. data/src/shape.h +1 -1
  102. data/src/view.cpp +205 -118
  103. data/src/view.h +5 -10
  104. data/src/window.cpp +346 -104
  105. data/src/window.h +28 -3
  106. data/src/world.cpp +6 -4
  107. data/test/helper.rb +3 -3
  108. data/test/test_application.rb +1 -1
  109. data/test/test_capture_event.rb +22 -6
  110. data/test/test_contact_event.rb +40 -0
  111. data/test/test_draw_event.rb +35 -0
  112. data/test/test_event.rb +33 -5
  113. data/test/test_focus_event.rb +34 -0
  114. data/test/test_frame_event.rb +38 -0
  115. data/test/test_has_frame.rb +11 -11
  116. data/test/test_key_event.rb +33 -0
  117. data/test/test_pointer.rb +149 -0
  118. data/test/test_pointer_event.rb +70 -104
  119. data/test/test_reflex.rb +1 -1
  120. data/test/test_scroll_event.rb +39 -0
  121. data/test/test_selector.rb +15 -8
  122. data/test/test_shape.rb +8 -8
  123. data/test/test_style.rb +13 -13
  124. data/test/test_style_length.rb +5 -5
  125. data/test/test_timer_event.rb +38 -0
  126. data/test/test_update_event.rb +29 -0
  127. data/test/test_view.rb +57 -30
  128. data/test/test_wheel_event.rb +40 -0
  129. data/test/test_window.rb +45 -26
  130. metadata +64 -35
@@ -18,15 +18,16 @@ VALUE alloc(VALUE klass)
18
18
  }
19
19
 
20
20
  static
21
- VALUE initialize(VALUE self, VALUE type, VALUE chars, VALUE code, VALUE repeat, VALUE modifiers)
21
+ VALUE initialize(VALUE self, VALUE action, VALUE chars, VALUE code, VALUE modifiers, VALUE repeat)
22
22
  {
23
23
  CHECK;
24
24
 
25
- THIS->type = (Reflex::KeyEvent::Type) to<int>(type);
26
- THIS->chars = chars.c_str();
27
- THIS->code = to<int>(code);
28
- THIS->repeat = to<int>(repeat);
29
- THIS->modifiers = to<uint>(modifiers);
25
+ *THIS = Reflex::KeyEvent(
26
+ (Reflex::KeyEvent::Action) to<uint>(action),
27
+ chars.c_str(),
28
+ to<int>(code),
29
+ to<uint>(modifiers),
30
+ to<int>(repeat));
30
31
 
31
32
  return rb_call_super(0, NULL);
32
33
  }
@@ -35,50 +36,247 @@ static
35
36
  VALUE initialize_copy(VALUE self, VALUE obj)
36
37
  {
37
38
  CHECK;
38
- *THIS = to<Reflex::KeyEvent&>(obj);
39
+ *THIS = to<Reflex::KeyEvent&>(obj).dup();
39
40
  return self;
40
41
  }
41
42
 
42
43
  static
43
- VALUE type(VALUE self)
44
+ VALUE get_action(VALUE self)
44
45
  {
45
46
  CHECK;
46
- return value(THIS->type);
47
+ return value(THIS->action());
47
48
  }
48
49
 
49
50
  static
50
- VALUE chars(VALUE self)
51
+ VALUE get_key(VALUE self)
51
52
  {
52
53
  CHECK;
53
- return value(THIS->chars.c_str());
54
+ switch (THIS->code())
55
+ {
56
+ #define CASE(key) case Reflex::KEY_##key
57
+ #define SYMBOL1(name) SYMBOL2(_##name, #name)
58
+ #define SYMBOL2(var, sym) {RUCY_SYMBOL(var, sym); return var.value();}
59
+
60
+ CASE(A): SYMBOL1(a);
61
+ CASE(B): SYMBOL1(b);
62
+ CASE(C): SYMBOL1(c);
63
+ CASE(D): SYMBOL1(d);
64
+ CASE(E): SYMBOL1(e);
65
+ CASE(F): SYMBOL1(f);
66
+ CASE(G): SYMBOL1(g);
67
+ CASE(H): SYMBOL1(h);
68
+ CASE(I): SYMBOL1(i);
69
+ CASE(J): SYMBOL1(j);
70
+ CASE(K): SYMBOL1(k);
71
+ CASE(L): SYMBOL1(l);
72
+ CASE(M): SYMBOL1(m);
73
+ CASE(N): SYMBOL1(n);
74
+ CASE(O): SYMBOL1(o);
75
+ CASE(P): SYMBOL1(p);
76
+ CASE(Q): SYMBOL1(q);
77
+ CASE(R): SYMBOL1(r);
78
+ CASE(S): SYMBOL1(s);
79
+ CASE(T): SYMBOL1(t);
80
+ CASE(U): SYMBOL1(u);
81
+ CASE(V): SYMBOL1(v);
82
+ CASE(W): SYMBOL1(w);
83
+ CASE(X): SYMBOL1(x);
84
+ CASE(Y): SYMBOL1(y);
85
+ CASE(Z): SYMBOL1(z);
86
+
87
+ CASE(0):
88
+ CASE(NUM_0): SYMBOL1(0);
89
+ CASE(1):
90
+ CASE(NUM_1): SYMBOL1(1);
91
+ CASE(2):
92
+ CASE(NUM_2): SYMBOL1(2);
93
+ CASE(3):
94
+ CASE(NUM_3): SYMBOL1(3);
95
+ CASE(4):
96
+ CASE(NUM_4): SYMBOL1(4);
97
+ CASE(5):
98
+ CASE(NUM_5): SYMBOL1(5);
99
+ CASE(6):
100
+ CASE(NUM_6): SYMBOL1(6);
101
+ CASE(7):
102
+ CASE(NUM_7): SYMBOL1(7);
103
+ CASE(8):
104
+ CASE(NUM_8): SYMBOL1(8);
105
+ CASE(9):
106
+ CASE(NUM_9): SYMBOL1(9);
107
+
108
+ CASE(MINUS): SYMBOL1(minus);
109
+ CASE(EQUAL): SYMBOL1(equal);
110
+ CASE(COMMA): SYMBOL1(comma);
111
+ CASE(PERIOD): SYMBOL1(period);
112
+ CASE(SEMICOLON): SYMBOL1(semicolon);
113
+ CASE(QUOTE): SYMBOL1(quote);
114
+ CASE(SLASH): SYMBOL1(slash);
115
+ CASE(BACKSLASH): SYMBOL1(backslash);
116
+ CASE(UNDERSCORE): SYMBOL1(underscore);
117
+ CASE(GRAVE): SYMBOL1(grave);
118
+ CASE(YEN): SYMBOL1(yen);
119
+ CASE(LBRACKET): SYMBOL1(lbracket);
120
+ CASE(RBRACKET): SYMBOL1(rbracket);
121
+
122
+ CASE(ENTER):
123
+ CASE(RETURN): SYMBOL1(enter);
124
+ CASE(SPACE): SYMBOL1(space);
125
+ CASE(TAB): SYMBOL1(tab);
126
+ CASE(DELETE): SYMBOL2(_delete, "delete");
127
+ CASE(BACKSPACE): SYMBOL1(backspace);
128
+ //CASE(INSERT): SYMBOL1(insert);
129
+ CASE(ESCAPE): SYMBOL1(escape);
130
+
131
+ CASE(LEFT): SYMBOL1(left);
132
+ CASE(RIGHT): SYMBOL1(right);
133
+ CASE(UP): SYMBOL1(up);
134
+ CASE(DOWN): SYMBOL1(down);
135
+ CASE(HOME): SYMBOL1(home);
136
+ CASE(END): SYMBOL1(end);
137
+ CASE(PAGEUP): SYMBOL1(pageup);
138
+ CASE(PAGEDOWN): SYMBOL1(pagedown);
139
+
140
+ CASE(LSHIFT):
141
+ CASE(RSHIFT): SYMBOL1(shift);
142
+ CASE(LCONTROL):
143
+ CASE(RCONTROL): SYMBOL1(control);
144
+ //CASE(LALT):
145
+ //CASE(RALT): SYMBOL1(alt);
146
+ //CASE(LWIN):
147
+ //CASE(RWIN): SYMBOL1(win);
148
+ CASE(LCOMMAND):
149
+ CASE(RCOMMAND): SYMBOL1(command);
150
+ CASE(LOPTION):
151
+ CASE(ROPTION): SYMBOL1(option);
152
+ CASE(FUNCTION): SYMBOL1(function);
153
+
154
+ CASE(F1): SYMBOL1(f1);
155
+ CASE(F2): SYMBOL1(f2);
156
+ CASE(F3): SYMBOL1(f3);
157
+ CASE(F4): SYMBOL1(f4);
158
+ CASE(F5): SYMBOL1(f5);
159
+ CASE(F6): SYMBOL1(f6);
160
+ CASE(F7): SYMBOL1(f7);
161
+ CASE(F8): SYMBOL1(f8);
162
+ CASE(F9): SYMBOL1(f9);
163
+ CASE(F10): SYMBOL1(f10);
164
+ CASE(F11): SYMBOL1(f11);
165
+ CASE(F12): SYMBOL1(f12);
166
+ CASE(F13): SYMBOL1(f13);
167
+ CASE(F14): SYMBOL1(f14);
168
+ CASE(F15): SYMBOL1(f15);
169
+ CASE(F16): SYMBOL1(f16);
170
+ CASE(F17): SYMBOL1(f17);
171
+ CASE(F18): SYMBOL1(f18);
172
+ CASE(F19): SYMBOL1(f19);
173
+ CASE(F20): SYMBOL1(f20);
174
+ //CASE(F21): SYMBOL1(f21);
175
+ //CASE(F22): SYMBOL1(f22);
176
+ //CASE(F23): SYMBOL1(f23);
177
+ //CASE(F24): SYMBOL1(f24);
178
+
179
+ CASE(NUM_PLUS): SYMBOL1(plus);
180
+ CASE(NUM_MINUS): SYMBOL1(minus);
181
+ CASE(NUM_MULTIPLY): SYMBOL1(multiply);
182
+ CASE(NUM_DIVIDE): SYMBOL1(divide);
183
+ CASE(NUM_EQUAL): SYMBOL1(equal);
184
+ CASE(NUM_COMMA): SYMBOL1(comma);
185
+ CASE(NUM_DECIMAL): SYMBOL1(decimal);
186
+ CASE(NUM_CLEAR): SYMBOL1(clear);
187
+
188
+ CASE(CAPSLOCK): SYMBOL1(capslock);
189
+ //CASE(NUMLOCK): SYMBOL1(numlock);
190
+ //CASE(SCROLLLOCK): SYMBOL1(scrolllock);
191
+
192
+ //CASE(PRINTSCREEN): SYMBOL1(printscreen);
193
+ //CASE(PAUSE): SYMBOL1(pause);
194
+ //CASE(BREAK): SYMBOL2(_break, "break");
195
+ CASE(SECTION): SYMBOL1(section);
196
+ CASE(HELP): SYMBOL1(help);
197
+
198
+ CASE(IME_EISU): SYMBOL1(eisu);
199
+ CASE(IME_KANA): SYMBOL1(kana);
200
+ //CASE(IME_KANJI): SYMBOL1(kanji);
201
+ //CASE(IME_JUNJA): SYMBOL1(junja);
202
+ //CASE(IME_PROCESS): SYMBOL1(process);
203
+ //CASE(IME_ACCEPT): SYMBOL1(accept);
204
+ //CASE(IME_FINAL): SYMBOL2(_final, "final");
205
+ //CASE(IME_CONVERT): SYMBOL1(convert);
206
+ //CASE(IME_NONCONVERT): SYMBOL1(nonconvert);
207
+ //CASE(IME_MODECHANGE): SYMBOL1(mode_change);
208
+
209
+ CASE(VOLUME_UP): SYMBOL1(volume_up);
210
+ CASE(VOLUME_DOWN): SYMBOL1(volume_down);
211
+ CASE(MUTE): SYMBOL1(mute);
212
+
213
+ //CASE(SLEEP): SYMBOL1(sleep);
214
+ //CASE(EXEC): SYMBOL1(exec);
215
+ //CASE(PRINT): SYMBOL1(print);
216
+ //CASE(APPS): SYMBOL1(apps);
217
+ //CASE(SELECT): SYMBOL1(select);
218
+ //CASE(CLEAR): SYMBOL1(clear);
219
+ //CASE(PLAY): SYMBOL1(play);
220
+ //CASE(ZOOM): SYMBOL1(zoom);
221
+
222
+ //CASE(BROWSER_BACK): SYMBOL1(browser_back);
223
+ //CASE(BROWSER_FORWARD): SYMBOL1(browser_forward);
224
+ //CASE(BROWSER_REFRESH): SYMBOL1(browser_refresh);
225
+ //CASE(BROWSER_STOP): SYMBOL1(browser_stop);
226
+ //CASE(BROWSER_SEARCH): SYMBOL1(browser_search);
227
+ //CASE(BROWSER_FAVORITES): SYMBOL1(browser_favorites);
228
+ //CASE(BROWSER_HOME): SYMBOL1(browser_home);
229
+
230
+ //CASE(MEDIA_NEXT_TRACK): SYMBOL1(media_next);
231
+ //CASE(MEDIA_PREV_TRACK): SYMBOL1(media_prev);
232
+ //CASE(MEDIA_STOP): SYMBOL1(media_stop);
233
+ //CASE(MEDIA_PLAY_PAUSE): SYMBOL1(media_play_stop);
234
+
235
+ //CASE(LAUNCH_MAIL): SYMBOL1(launch_mail);
236
+ //CASE(LAUNCH_MEDIA_SELECT): SYMBOL1(launch_media_select);
237
+ //CASE(LAUNCH_APP1): SYMBOL1(launch_app1);
238
+ //CASE(LAUNCH_APP2): SYMBOL1(launch_app2);
239
+
240
+ #undef CASE
241
+ #undef SYMBOL1
242
+ #undef SYMBOL2
243
+ }
244
+ return nil();
245
+ }
246
+
247
+ static
248
+ VALUE get_chars(VALUE self)
249
+ {
250
+ CHECK;
251
+ return value(THIS->chars());
54
252
  }
55
253
 
56
254
  static
57
- VALUE code(VALUE self)
255
+ VALUE get_code(VALUE self)
58
256
  {
59
257
  CHECK;
60
- return value(THIS->code);
258
+ return value(THIS->code());
61
259
  }
62
260
 
63
261
  static
64
- VALUE modifiers(VALUE self)
262
+ VALUE get_modifiers(VALUE self)
65
263
  {
66
264
  CHECK;
67
- return value(THIS->modifiers);
265
+ return value(THIS->modifiers());
68
266
  }
69
267
 
70
268
  static
71
- VALUE repeat(VALUE self)
269
+ VALUE get_repeat(VALUE self)
72
270
  {
73
271
  CHECK;
74
- return value(THIS->repeat);
272
+ return value(THIS->repeat());
75
273
  }
76
274
 
77
275
  static
78
- VALUE capture(VALUE self)
276
+ VALUE is_captured(VALUE self)
79
277
  {
80
278
  CHECK;
81
- return value(THIS->capture);
279
+ return value(THIS->is_captured());
82
280
  }
83
281
 
84
282
 
@@ -93,15 +291,16 @@ Init_key_event ()
93
291
  rb_define_alloc_func(cKeyEvent, alloc);
94
292
  rb_define_private_method(cKeyEvent, "initialize", RUBY_METHOD_FUNC(initialize), 5);
95
293
  rb_define_private_method(cKeyEvent, "initialize_copy", RUBY_METHOD_FUNC(initialize_copy), 1);
96
- rb_define_method(cKeyEvent, "type", RUBY_METHOD_FUNC(type), 0);
97
- rb_define_method(cKeyEvent, "chars", RUBY_METHOD_FUNC(chars), 0);
98
- rb_define_method(cKeyEvent, "code", RUBY_METHOD_FUNC(code), 0);
99
- rb_define_method(cKeyEvent, "modifiers", RUBY_METHOD_FUNC(modifiers), 0);
100
- rb_define_method(cKeyEvent, "repeat", RUBY_METHOD_FUNC(repeat), 0);
101
- cKeyEvent.define_method("capture?", capture);
102
- cKeyEvent.define_const("TYPE_NONE", Reflex::KeyEvent::NONE);
103
- cKeyEvent.define_const("TYPE_DOWN", Reflex::KeyEvent::DOWN);
104
- cKeyEvent.define_const("TYPE_UP", Reflex::KeyEvent::UP);
294
+ rb_define_method(cKeyEvent, "action", RUBY_METHOD_FUNC(get_action), 0);
295
+ rb_define_method(cKeyEvent, "key", RUBY_METHOD_FUNC(get_key), 0);
296
+ rb_define_method(cKeyEvent, "chars", RUBY_METHOD_FUNC(get_chars), 0);
297
+ rb_define_method(cKeyEvent, "code", RUBY_METHOD_FUNC(get_code), 0);
298
+ rb_define_method(cKeyEvent, "modifiers", RUBY_METHOD_FUNC(get_modifiers), 0);
299
+ rb_define_method(cKeyEvent, "repeat", RUBY_METHOD_FUNC(get_repeat), 0);
300
+ cKeyEvent.define_method("captured?", is_captured);
301
+ cKeyEvent.define_const("ACTION_NONE", Reflex::KeyEvent::ACTION_NONE);
302
+ cKeyEvent.define_const("DOWN", Reflex::KeyEvent::DOWN);
303
+ cKeyEvent.define_const("UP", Reflex::KeyEvent::UP);
105
304
  }
106
305
 
107
306
 
@@ -17,6 +17,7 @@ void Init_frame_event ();
17
17
  void Init_scroll_event ();
18
18
  void Init_focus_event ();
19
19
  void Init_key_event ();
20
+ void Init_pointer ();
20
21
  void Init_pointer_event ();
21
22
  void Init_wheel_event ();
22
23
  void Init_capture_event ();
@@ -63,6 +64,7 @@ extern "C" void
63
64
  Init_scroll_event();
64
65
  Init_focus_event();
65
66
  Init_key_event();
67
+ Init_pointer();
66
68
  Init_pointer_event();
67
69
  Init_wheel_event();
68
70
  Init_capture_event();
@@ -0,0 +1,158 @@
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
+ VALUE alloc(VALUE klass)
17
+ {
18
+ return new_type<Reflex::Pointer>(klass);
19
+ }
20
+
21
+ static
22
+ VALUE initialize(VALUE self, VALUE
23
+ id, VALUE type, VALUE action, VALUE position, VALUE modifiers, VALUE click_count, VALUE drag, VALUE time)
24
+ {
25
+ CHECK;
26
+
27
+ *THIS = Reflex::Pointer(
28
+ to<Reflex::Pointer::ID>(id),
29
+ to<uint>(type),
30
+ (Reflex::Pointer::Action) to<int>(action),
31
+ to<Rays::Point>(position),
32
+ to<uint>(modifiers),
33
+ to<uint>(click_count),
34
+ to<bool>(drag),
35
+ to<double>(time));
36
+ return self;
37
+ }
38
+
39
+ static
40
+ VALUE initialize_copy(VALUE self, VALUE obj)
41
+ {
42
+ CHECK;
43
+ *THIS = to<Reflex::Pointer&>(obj);
44
+ return self;
45
+ }
46
+
47
+ static
48
+ VALUE get_id(VALUE self)
49
+ {
50
+ CHECK;
51
+ return value(THIS->id());
52
+ }
53
+
54
+ static
55
+ VALUE get_type(VALUE self)
56
+ {
57
+ CHECK;
58
+ return value(THIS->type());
59
+ }
60
+
61
+ static
62
+ VALUE get_action(VALUE self)
63
+ {
64
+ CHECK;
65
+ return value(THIS->action());
66
+ }
67
+
68
+ static
69
+ VALUE get_position(VALUE self)
70
+ {
71
+ CHECK;
72
+ return value(THIS->position());
73
+ }
74
+
75
+ static
76
+ VALUE get_modifiers(VALUE self)
77
+ {
78
+ CHECK;
79
+ return value(THIS->modifiers());
80
+ }
81
+
82
+ static
83
+ VALUE get_click_count(VALUE self)
84
+ {
85
+ CHECK;
86
+ return value(THIS->click_count());
87
+ }
88
+
89
+ static
90
+ VALUE is_drag(VALUE self)
91
+ {
92
+ CHECK;
93
+ return value(THIS->is_drag());
94
+ }
95
+
96
+ static
97
+ VALUE get_time(VALUE self)
98
+ {
99
+ CHECK;
100
+ return value(THIS->time());
101
+ }
102
+
103
+ static
104
+ VALUE get_prev(VALUE self)
105
+ {
106
+ CHECK;
107
+ return value(THIS->prev());
108
+ }
109
+
110
+
111
+ static Class cPointer;
112
+
113
+ void
114
+ Init_pointer ()
115
+ {
116
+ Module mReflex = rb_define_module("Reflex");
117
+
118
+ cPointer = rb_define_class_under(mReflex, "Pointer", rb_cObject);
119
+ rb_define_alloc_func(cPointer, alloc);
120
+ rb_define_private_method(cPointer, "initialize", RUBY_METHOD_FUNC(initialize), 8);
121
+ rb_define_private_method(cPointer, "initialize_copy", RUBY_METHOD_FUNC(initialize_copy), 1);
122
+ rb_define_method(cPointer, "id", RUBY_METHOD_FUNC(get_id), 0);
123
+ rb_define_private_method(cPointer, "get_type", RUBY_METHOD_FUNC(get_type), 0);
124
+ rb_define_private_method(cPointer, "get_action", RUBY_METHOD_FUNC(get_action), 0);
125
+ rb_define_method(cPointer, "position", RUBY_METHOD_FUNC(get_position), 0);
126
+ rb_define_method(cPointer, "modifiers", RUBY_METHOD_FUNC(get_modifiers), 0);
127
+ rb_define_method(cPointer, "click_count", RUBY_METHOD_FUNC(get_click_count), 0);
128
+ cPointer.define_method("drag?", is_drag);
129
+ rb_define_method(cPointer, "time", RUBY_METHOD_FUNC(get_time), 0);
130
+ rb_define_method(cPointer, "prev", RUBY_METHOD_FUNC(get_prev), 0);
131
+ cPointer.define_const("TYPE_NONE", Reflex::Pointer::TYPE_NONE);
132
+ cPointer.define_const("MOUSE", Reflex::Pointer::MOUSE);
133
+ cPointer.define_const("MOUSE_LEFT", Reflex::Pointer::MOUSE_LEFT);
134
+ cPointer.define_const("MOUSE_RIGHT", Reflex::Pointer::MOUSE_RIGHT);
135
+ cPointer.define_const("MOUSE_MIDDLE", Reflex::Pointer::MOUSE_MIDDLE);
136
+ cPointer.define_const("TOUCH", Reflex::Pointer::TOUCH);
137
+ cPointer.define_const("PEN", Reflex::Pointer::PEN);
138
+ cPointer.define_const("ACTION_NONE", Reflex::Pointer::ACTION_NONE);
139
+ cPointer.define_const("DOWN", Reflex::Pointer::DOWN);
140
+ cPointer.define_const("UP", Reflex::Pointer::UP);
141
+ cPointer.define_const("MOVE", Reflex::Pointer::MOVE);
142
+ cPointer.define_const("CANCEL", Reflex::Pointer::CANCEL);
143
+ cPointer.define_const("STAY", Reflex::Pointer::STAY);
144
+ }
145
+
146
+
147
+ namespace Reflex
148
+ {
149
+
150
+
151
+ Class
152
+ pointer_class ()
153
+ {
154
+ return cPointer;
155
+ }
156
+
157
+
158
+ }// 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
 
@@ -19,23 +21,18 @@ VALUE alloc(VALUE klass)
19
21
  }
20
22
 
21
23
  static
22
- VALUE initialize(VALUE self, VALUE type, VALUE pointer_type, VALUE modifiers, VALUE count, VALUE drag, VALUE positions)
24
+ VALUE initialize(VALUE self)
23
25
  {
24
26
  CHECK;
25
27
 
26
- int size = positions.size();
27
- if (size <= 0 || Reflex::PointerEvent::MAX < size)
28
+ if (argc == 0)
28
29
  argument_error(__FILE__, __LINE__);
29
30
 
30
- THIS->type = (Reflex::PointerEvent::Type) to<int>(type);
31
- THIS->pointer_type = to<uint>(pointer_type);
32
- THIS->modifiers = to<uint>(modifiers);
33
- THIS->count = to<uint>(count);
34
- THIS->drag = to<bool>(drag);
35
- THIS->size = (size_t) size;
31
+ std::vector<Reflex::Pointer> pointers;
32
+ for (size_t i = 0; i < argc; ++i)
33
+ pointers.emplace_back(to<Reflex::Pointer&>(argv[i]));
36
34
 
37
- for (int i = 0; i < size; ++i)
38
- THIS->positions[i] = to<Rays::Point>(positions[i]);
35
+ *THIS = Reflex::PointerEvent(&pointers[0], pointers.size());
39
36
 
40
37
  return rb_call_super(0, NULL);
41
38
  }
@@ -44,93 +41,53 @@ static
44
41
  VALUE initialize_copy(VALUE self, VALUE obj)
45
42
  {
46
43
  CHECK;
47
- *THIS = to<Reflex::PointerEvent&>(obj);
44
+ *THIS = to<Reflex::PointerEvent&>(obj).dup();
48
45
  return self;
49
46
  }
50
47
 
51
48
  static
52
- VALUE type(VALUE self)
49
+ VALUE get_size(VALUE self)
53
50
  {
54
51
  CHECK;
55
- return value(THIS->type);
52
+ return value(THIS->size());
56
53
  }
57
54
 
58
55
  static
59
- VALUE pointer_type(VALUE self)
56
+ VALUE is_empty(VALUE self)
60
57
  {
61
58
  CHECK;
62
- return value(THIS->pointer_type);
59
+ return value(THIS->empty());
63
60
  }
64
61
 
65
62
  static
66
- VALUE size(VALUE self)
63
+ VALUE is_captured(VALUE self)
67
64
  {
68
65
  CHECK;
69
- return value(THIS->size);
66
+ return value(THIS->is_captured());
70
67
  }
71
68
 
72
69
  static
73
- VALUE modifiers(VALUE self)
74
- {
75
- CHECK;
76
- return value(THIS->modifiers);
77
- }
78
-
79
- static
80
- VALUE count(VALUE self)
81
- {
82
- CHECK;
83
- return value(THIS->count);
84
- }
85
-
86
- static
87
- VALUE drag(VALUE self)
88
- {
89
- CHECK;
90
- return value(THIS->drag);
91
- }
92
-
93
- static
94
- VALUE capture(VALUE self)
95
- {
96
- CHECK;
97
- return value(THIS->capture);
98
- }
99
-
100
- static
101
- VALUE x(VALUE self)
102
- {
103
- CHECK;
104
- return value(THIS->x);
105
- }
106
-
107
- static
108
- VALUE y(VALUE self)
70
+ VALUE get_at(VALUE self, VALUE index)
109
71
  {
110
72
  CHECK;
111
- return value(THIS->y);
112
- }
113
73
 
114
- static
115
- VALUE position(VALUE self)
116
- {
117
- CHECK;
118
- check_arg_count(__FILE__, __LINE__, "PointerEvent#position", argc, 0, 1);
74
+ int size = (int) THIS->size();
75
+ int i = to<int>(index);
76
+ if (i < -size || size <= i)
77
+ return Qnil;
119
78
 
120
- size_t index = argc >= 1 ? to<int>(argv[0]) : 0;
121
- return value(THIS->position(index));
79
+ return value((*THIS)[i >= 0 ? i : i + size]);
122
80
  }
123
81
 
124
82
  static
125
- VALUE get_at(VALUE self, VALUE index)
83
+ VALUE each(VALUE self)
126
84
  {
127
85
  CHECK;
128
86
 
129
- int i = to<int>(index);
130
- if (i < 0 || THIS->size <= (size_t) i)
131
- index_error(__FILE__, __LINE__);
132
-
133
- return value((*THIS)[i]);
87
+ Value ret;
88
+ for (size_t i = 0, size = THIS->size(); i < size; ++i)
89
+ ret = rb_yield(value((*THIS)[i]));
90
+ return ret;
134
91
  }
135
92
 
136
93
 
@@ -143,29 +100,13 @@ Init_pointer_event ()
143
100
 
144
101
  cPointerEvent = mReflex.define_class("PointerEvent", Reflex::event_class());
145
102
  rb_define_alloc_func(cPointerEvent, alloc);
146
- rb_define_private_method(cPointerEvent, "initialize", RUBY_METHOD_FUNC(initialize), 6);
103
+ rb_define_private_method(cPointerEvent, "initialize", RUBY_METHOD_FUNC(initialize), -1);
147
104
  rb_define_private_method(cPointerEvent, "initialize_copy", RUBY_METHOD_FUNC(initialize_copy), 1);
148
- rb_define_method(cPointerEvent, "type", RUBY_METHOD_FUNC(type), 0);
149
- rb_define_method(cPointerEvent, "pointer_type", RUBY_METHOD_FUNC(pointer_type), 0);
150
- rb_define_method(cPointerEvent, "size", RUBY_METHOD_FUNC(size), 0);
151
- rb_define_method(cPointerEvent, "modifiers", RUBY_METHOD_FUNC(modifiers), 0);
152
- rb_define_method(cPointerEvent, "count", RUBY_METHOD_FUNC(count), 0);
153
- cPointerEvent.define_method("drag?", drag);
154
- cPointerEvent.define_method("capture?", capture);
155
- rb_define_method(cPointerEvent, "x", RUBY_METHOD_FUNC(x), 0);
156
- rb_define_method(cPointerEvent, "y", RUBY_METHOD_FUNC(y), 0);
157
- rb_define_method(cPointerEvent, "position", RUBY_METHOD_FUNC(position), -1);
158
- cPointerEvent.define_method("[]", get_at);
159
- cPointerEvent.define_const("TYPE_NONE", Reflex::PointerEvent::NONE);
160
- cPointerEvent.define_const("TYPE_DOWN", Reflex::PointerEvent::DOWN);
161
- cPointerEvent.define_const("TYPE_UP", Reflex::PointerEvent::UP);
162
- cPointerEvent.define_const("TYPE_MOVE", Reflex::PointerEvent::MOVE);
163
- cPointerEvent.define_const("POINTER_NONE", Reflex::POINTER_NONE);
164
- cPointerEvent.define_const("POINTER_MOUSE_LEFT", Reflex::POINTER_MOUSE_LEFT);
165
- cPointerEvent.define_const("POINTER_MOUSE_RIGHT", Reflex::POINTER_MOUSE_RIGHT);
166
- cPointerEvent.define_const("POINTER_MOUSE_MIDDLE", Reflex::POINTER_MOUSE_MIDDLE);
167
- cPointerEvent.define_const("POINTER_TOUCH", Reflex::POINTER_TOUCH);
168
- cPointerEvent.define_const("POINTER_PEN", Reflex::POINTER_PEN);
105
+ rb_define_method(cPointerEvent, "size", RUBY_METHOD_FUNC(get_size), 0);
106
+ cPointerEvent.define_method("empty?", is_empty);
107
+ cPointerEvent.define_method("captured?", is_captured);
108
+ cPointerEvent.define_method("[]", get_at);
109
+ rb_define_method(cPointerEvent, "each", RUBY_METHOD_FUNC(each), 0);
169
110
  }
170
111
 
171
112