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.
- checksums.yaml +4 -4
- data/.doc/ext/reflex/event.cpp +9 -1
- data/.doc/ext/reflex/key_event.cpp +3 -3
- data/.doc/ext/reflex/native.cpp +2 -0
- data/.doc/ext/reflex/pointer.cpp +158 -0
- data/.doc/ext/reflex/pointer_event.cpp +29 -88
- data/.doc/ext/reflex/selector.cpp +8 -0
- data/.doc/ext/reflex/view.cpp +57 -0
- data/.doc/ext/reflex/window.cpp +24 -0
- data/VERSION +1 -1
- data/ext/reflex/event.cpp +11 -2
- data/ext/reflex/key_event.cpp +3 -3
- data/ext/reflex/native.cpp +2 -0
- data/ext/reflex/pointer.cpp +170 -0
- data/ext/reflex/pointer_event.cpp +29 -94
- data/ext/reflex/selector.cpp +9 -0
- data/ext/reflex/view.cpp +67 -3
- data/ext/reflex/window.cpp +30 -3
- data/include/reflex/defs.h +0 -18
- data/include/reflex/event.h +26 -27
- data/include/reflex/pointer.h +107 -0
- data/include/reflex/ruby/pointer.h +41 -0
- data/include/reflex/ruby/view.h +9 -0
- data/include/reflex/ruby/window.h +9 -0
- data/include/reflex/selector.h +1 -1
- data/include/reflex/view.h +6 -4
- data/include/reflex/window.h +10 -8
- data/lib/reflex/key_event.rb +1 -1
- data/lib/reflex/pointer.rb +107 -0
- data/lib/reflex/pointer_event.rb +16 -54
- data/lib/reflex.rb +1 -0
- data/reflex.gemspec +5 -5
- data/src/event.cpp +189 -37
- data/src/event.h +32 -0
- data/src/ios/event.h +15 -3
- data/src/ios/event.mm +126 -11
- data/src/ios/view_controller.mm +49 -21
- data/src/osx/event.h +6 -3
- data/src/osx/event.mm +40 -22
- data/src/osx/native_window.mm +79 -16
- data/src/pointer.cpp +203 -0
- data/src/pointer.h +26 -0
- data/src/selector.cpp +1 -1
- data/src/view.cpp +83 -72
- data/src/view.h +0 -4
- data/src/window.cpp +321 -97
- data/src/window.h +22 -3
- data/test/test_event.rb +16 -2
- data/test/test_pointer.rb +149 -0
- data/test/test_pointer_event.rb +70 -104
- data/test/test_selector.rb +7 -0
- data/test/test_view.rb +38 -11
- data/test/test_window.rb +27 -25
- metadata +46 -35
data/src/osx/event.mm
CHANGED
@@ -185,9 +185,9 @@ namespace Reflex
|
|
185
185
|
{
|
186
186
|
NSUInteger buttons = [NSEvent pressedMouseButtons];
|
187
187
|
uint ret = 0;
|
188
|
-
if (buttons & (
|
189
|
-
if (buttons & (1
|
190
|
-
if (buttons >= (
|
188
|
+
if (buttons & Xot::bit(0)) ret |= Reflex::Pointer::MOUSE_LEFT;
|
189
|
+
if (buttons & Xot::bit(1)) ret |= Reflex::Pointer::MOUSE_RIGHT;
|
190
|
+
if (buttons >= Xot::bit(2)) ret |= Reflex::Pointer::MOUSE_MIDDLE;
|
191
191
|
return ret;
|
192
192
|
}
|
193
193
|
|
@@ -199,22 +199,24 @@ namespace Reflex
|
|
199
199
|
case NSLeftMouseDown:
|
200
200
|
case NSLeftMouseUp:
|
201
201
|
case NSLeftMouseDragged:
|
202
|
-
return
|
202
|
+
return Reflex::Pointer::MOUSE | Reflex::Pointer::MOUSE_LEFT;
|
203
203
|
|
204
204
|
case NSRightMouseDown:
|
205
205
|
case NSRightMouseUp:
|
206
206
|
case NSRightMouseDragged:
|
207
|
-
return
|
207
|
+
return Reflex::Pointer::MOUSE | Reflex::Pointer::MOUSE_RIGHT;
|
208
208
|
|
209
209
|
case NSOtherMouseDown:
|
210
210
|
case NSOtherMouseUp:
|
211
211
|
case NSOtherMouseDragged:
|
212
|
-
return
|
212
|
+
return Reflex::Pointer::MOUSE | Reflex::Pointer::MOUSE_MIDDLE;
|
213
213
|
|
214
214
|
case NSMouseMoved:
|
215
|
-
return get_current_pointer_type();
|
215
|
+
return Reflex::Pointer::MOUSE | get_current_pointer_type();
|
216
|
+
|
217
|
+
default:
|
218
|
+
return Reflex::Pointer::TYPE_NONE;
|
216
219
|
}
|
217
|
-
return 0;
|
218
220
|
}
|
219
221
|
|
220
222
|
static uint
|
@@ -241,6 +243,13 @@ namespace Reflex
|
|
241
243
|
return p;
|
242
244
|
}
|
243
245
|
|
246
|
+
static Point
|
247
|
+
get_pointer_position (NSEvent* e, NSView* view)
|
248
|
+
{
|
249
|
+
NSPoint p = correct_point(view, [e locationInWindow]);
|
250
|
+
return Point(p.x, p.y);
|
251
|
+
}
|
252
|
+
|
244
253
|
|
245
254
|
NativeKeyEvent::NativeKeyEvent (NSEvent* e, Type type)
|
246
255
|
: KeyEvent(
|
@@ -258,26 +267,35 @@ namespace Reflex
|
|
258
267
|
}
|
259
268
|
|
260
269
|
|
261
|
-
|
262
|
-
|
263
|
-
type, get_pointer_type(e), (coord) 0, (coord) 0,
|
264
|
-
get_modifiers(e), (uint) [e clickCount],
|
265
|
-
[e type] == NSLeftMouseDragged || [e type] == NSRightMouseDragged || [e type] == NSOtherMouseDragged)
|
270
|
+
static bool
|
271
|
+
is_pointer_dragging (NSEvent* e)
|
266
272
|
{
|
267
|
-
|
268
|
-
|
269
|
-
|
273
|
+
return
|
274
|
+
[e type] == NSLeftMouseDragged ||
|
275
|
+
[e type] == NSRightMouseDragged ||
|
276
|
+
[e type] == NSOtherMouseDragged;
|
277
|
+
}
|
278
|
+
|
279
|
+
NativePointerEvent::NativePointerEvent (
|
280
|
+
NSEvent* event, NSView* view, Pointer::ID id, Pointer::Action action)
|
281
|
+
{
|
282
|
+
bool dragging = is_pointer_dragging(event);
|
283
|
+
PointerEvent_add_pointer(this, Pointer(
|
284
|
+
id,
|
285
|
+
get_pointer_type(event),
|
286
|
+
action,
|
287
|
+
get_pointer_position(event, view),
|
288
|
+
get_modifiers(event),
|
289
|
+
action == Pointer::MOVE && !dragging ? 0 : (uint) [event clickCount],
|
290
|
+
dragging,
|
291
|
+
time()));
|
270
292
|
}
|
271
293
|
|
272
294
|
|
273
295
|
NativeWheelEvent::NativeWheelEvent (NSEvent* e, NSView* view)
|
274
|
-
: WheelEvent([e deltaX], [e deltaY], [e deltaZ])
|
296
|
+
: WheelEvent(0, 0, 0, [e deltaX], [e deltaY], [e deltaZ], get_modifiers(e))
|
275
297
|
{
|
276
|
-
|
277
|
-
x = p.x;
|
278
|
-
y = p.y;
|
279
|
-
z = 0;
|
280
|
-
modifiers = get_modifiers(e);
|
298
|
+
position_ = get_pointer_position(e, view);
|
281
299
|
}
|
282
300
|
|
283
301
|
|
data/src/osx/native_window.mm
CHANGED
@@ -4,9 +4,9 @@
|
|
4
4
|
|
5
5
|
#include <assert.h>
|
6
6
|
#import <Cocoa/Cocoa.h>
|
7
|
-
#include "rays/bounds.h"
|
8
7
|
#include "reflex/exception.h"
|
9
8
|
#include "../view.h"
|
9
|
+
#include "../pointer.h"
|
10
10
|
#include "event.h"
|
11
11
|
#include "window.h"
|
12
12
|
#import "opengl_view.h"
|
@@ -20,12 +20,30 @@ static const NSUInteger WINDOW_STYLE_MASK =
|
|
20
20
|
0;//NSTexturedBackgroundWindowMask
|
21
21
|
|
22
22
|
|
23
|
+
static int
|
24
|
+
count_mouse_buttons (const Reflex::PointerEvent& e)
|
25
|
+
{
|
26
|
+
uint nbuttons = 0;
|
27
|
+
PointerEvent_each_pointer(&e, [&](const auto& pointer) {
|
28
|
+
uint t = pointer.type();
|
29
|
+
nbuttons +=
|
30
|
+
(t & Reflex::Pointer::MOUSE_LEFT ? 1 : 0) +
|
31
|
+
(t & Reflex::Pointer::MOUSE_RIGHT ? 1 : 0) +
|
32
|
+
(t & Reflex::Pointer::MOUSE_MIDDLE ? 1 : 0);
|
33
|
+
});
|
34
|
+
return nbuttons;
|
35
|
+
}
|
36
|
+
|
23
37
|
@implementation NativeWindow
|
24
38
|
|
25
39
|
{
|
26
40
|
Reflex::Window *pwindow, *ptr_for_rebind;
|
27
41
|
OpenGLView* view;
|
28
42
|
NSTimer* timer;
|
43
|
+
int update_count;
|
44
|
+
int clicking_count;
|
45
|
+
Reflex::Pointer::ID pointer_id;
|
46
|
+
Reflex::Pointer prevPointer;
|
29
47
|
}
|
30
48
|
|
31
49
|
- (id) init
|
@@ -37,9 +55,13 @@ static const NSUInteger WINDOW_STYLE_MASK =
|
|
37
55
|
defer: NO];
|
38
56
|
if (!self) return nil;
|
39
57
|
|
40
|
-
pwindow
|
41
|
-
|
42
|
-
|
58
|
+
pwindow =
|
59
|
+
ptr_for_rebind = NULL;
|
60
|
+
view = nil;
|
61
|
+
timer = nil;
|
62
|
+
update_count = 0;
|
63
|
+
clicking_count = 0;
|
64
|
+
pointer_id = 0;
|
43
65
|
|
44
66
|
[self setDelegate: self];
|
45
67
|
[self setupContentView];
|
@@ -152,6 +174,8 @@ static const NSUInteger WINDOW_STYLE_MASK =
|
|
152
174
|
Reflex::Window* win = self.window;
|
153
175
|
if (!win) return;
|
154
176
|
|
177
|
+
++update_count;
|
178
|
+
|
155
179
|
double now = Xot::time();
|
156
180
|
Reflex::UpdateEvent e(now, now - win->self->prev_time_update);
|
157
181
|
win->self->prev_time_update = now;
|
@@ -172,6 +196,9 @@ static const NSUInteger WINDOW_STYLE_MASK =
|
|
172
196
|
Reflex::Window* win = self.window;
|
173
197
|
if (!win) return;
|
174
198
|
|
199
|
+
if (update_count == 0)
|
200
|
+
[self update];
|
201
|
+
|
175
202
|
double now = Xot::time();
|
176
203
|
double dt = now - win->self->prev_time_draw;
|
177
204
|
double fps = 1. / dt;
|
@@ -266,7 +293,7 @@ static const NSUInteger WINDOW_STYLE_MASK =
|
|
266
293
|
if (!win) return;
|
267
294
|
|
268
295
|
Reflex::NativeKeyEvent e(event, Reflex::KeyEvent::DOWN);
|
269
|
-
win
|
296
|
+
Window_call_key_event(win, &e);
|
270
297
|
}
|
271
298
|
|
272
299
|
- (void) keyUp: (NSEvent*) event
|
@@ -275,7 +302,7 @@ static const NSUInteger WINDOW_STYLE_MASK =
|
|
275
302
|
if (!win) return;
|
276
303
|
|
277
304
|
Reflex::NativeKeyEvent e(event, Reflex::KeyEvent::UP);
|
278
|
-
win
|
305
|
+
Window_call_key_event(win, &e);
|
279
306
|
}
|
280
307
|
|
281
308
|
- (void) flagsChanged: (NSEvent*) event
|
@@ -284,7 +311,7 @@ static const NSUInteger WINDOW_STYLE_MASK =
|
|
284
311
|
if (!win) return;
|
285
312
|
|
286
313
|
Reflex::NativeFlagKeyEvent e(event);
|
287
|
-
win
|
314
|
+
Window_call_key_event(win, &e);
|
288
315
|
}
|
289
316
|
|
290
317
|
- (void) mouseDown: (NSEvent*) event
|
@@ -292,8 +319,22 @@ static const NSUInteger WINDOW_STYLE_MASK =
|
|
292
319
|
Reflex::Window* win = self.window;
|
293
320
|
if (!win) return;
|
294
321
|
|
295
|
-
|
296
|
-
|
322
|
+
if (clicking_count == 0) ++pointer_id;
|
323
|
+
|
324
|
+
Reflex::NativePointerEvent e(event, view, pointer_id, Reflex::Pointer::DOWN);
|
325
|
+
|
326
|
+
if (e[0].position().y < 0)
|
327
|
+
{
|
328
|
+
// ignore mouseDown event since the mouseUp event to the window title bar
|
329
|
+
// will not come and will break clicking_count.
|
330
|
+
return;
|
331
|
+
}
|
332
|
+
|
333
|
+
[self attachAndUpdatePrevPointer: &e];
|
334
|
+
|
335
|
+
clicking_count += count_mouse_buttons(e);
|
336
|
+
|
337
|
+
Window_call_pointer_event(win, &e);
|
297
338
|
}
|
298
339
|
|
299
340
|
- (void) mouseUp: (NSEvent*) event
|
@@ -301,8 +342,16 @@ static const NSUInteger WINDOW_STYLE_MASK =
|
|
301
342
|
Reflex::Window* win = self.window;
|
302
343
|
if (!win) return;
|
303
344
|
|
304
|
-
Reflex::NativePointerEvent e(event, view, Reflex::
|
305
|
-
|
345
|
+
Reflex::NativePointerEvent e(event, view, pointer_id, Reflex::Pointer::UP);
|
346
|
+
[self attachAndUpdatePrevPointer: &e];
|
347
|
+
|
348
|
+
clicking_count -= count_mouse_buttons(e);
|
349
|
+
if (clicking_count == 0)
|
350
|
+
++pointer_id;
|
351
|
+
else if (clicking_count < 0)
|
352
|
+
Reflex::invalid_state_error(__FILE__, __LINE__);
|
353
|
+
|
354
|
+
Window_call_pointer_event(win, &e);
|
306
355
|
}
|
307
356
|
|
308
357
|
- (void) mouseDragged: (NSEvent*) event
|
@@ -310,8 +359,10 @@ static const NSUInteger WINDOW_STYLE_MASK =
|
|
310
359
|
Reflex::Window* win = self.window;
|
311
360
|
if (!win) return;
|
312
361
|
|
313
|
-
Reflex::NativePointerEvent e(event, view, Reflex::
|
314
|
-
|
362
|
+
Reflex::NativePointerEvent e(event, view, pointer_id, Reflex::Pointer::MOVE);
|
363
|
+
[self attachAndUpdatePrevPointer: &e];
|
364
|
+
|
365
|
+
Window_call_pointer_event(win, &e);
|
315
366
|
}
|
316
367
|
|
317
368
|
- (void) mouseMoved: (NSEvent*) event
|
@@ -319,8 +370,20 @@ static const NSUInteger WINDOW_STYLE_MASK =
|
|
319
370
|
Reflex::Window* win = self.window;
|
320
371
|
if (!win) return;
|
321
372
|
|
322
|
-
Reflex::NativePointerEvent e(event, view, Reflex::
|
323
|
-
|
373
|
+
Reflex::NativePointerEvent e(event, view, pointer_id, Reflex::Pointer::MOVE);
|
374
|
+
[self attachAndUpdatePrevPointer: &e];
|
375
|
+
|
376
|
+
Window_call_pointer_event(win, &e);
|
377
|
+
}
|
378
|
+
|
379
|
+
- (void) attachAndUpdatePrevPointer: (Reflex::PointerEvent*) e
|
380
|
+
{
|
381
|
+
assert(e->size() == 1);
|
382
|
+
|
383
|
+
Reflex::Pointer& pointer = Reflex::PointerEvent_pointer_at(e, 0);
|
384
|
+
if (prevPointer)
|
385
|
+
Reflex::Pointer_set_prev(&pointer, &prevPointer);
|
386
|
+
prevPointer = pointer;
|
324
387
|
}
|
325
388
|
|
326
389
|
- (void) scrollWheel: (NSEvent*) event
|
@@ -329,7 +392,7 @@ static const NSUInteger WINDOW_STYLE_MASK =
|
|
329
392
|
if (!win) return;
|
330
393
|
|
331
394
|
Reflex::NativeWheelEvent e(event, view);
|
332
|
-
win
|
395
|
+
Window_call_wheel_event(win, &e);
|
333
396
|
}
|
334
397
|
|
335
398
|
+ (NSRect) frameRectForContentRect: (NSRect) contentRect
|
data/src/pointer.cpp
ADDED
@@ -0,0 +1,203 @@
|
|
1
|
+
#include "pointer.h"
|
2
|
+
|
3
|
+
|
4
|
+
#include <xot/time.h>
|
5
|
+
#include "reflex/exception.h"
|
6
|
+
|
7
|
+
|
8
|
+
namespace Reflex
|
9
|
+
{
|
10
|
+
|
11
|
+
|
12
|
+
class PrevPointerPtr : public Xot::PImpl<Pointer>
|
13
|
+
{
|
14
|
+
|
15
|
+
typedef Xot::PImpl<Pointer> Super;
|
16
|
+
|
17
|
+
public:
|
18
|
+
|
19
|
+
PrevPointerPtr () : Super(NULL) {}
|
20
|
+
|
21
|
+
};// PrevPointerPtr
|
22
|
+
|
23
|
+
|
24
|
+
struct Pointer::Data
|
25
|
+
{
|
26
|
+
|
27
|
+
enum Flag
|
28
|
+
{
|
29
|
+
|
30
|
+
DRAG = Xot::bit(0),
|
31
|
+
|
32
|
+
ENTER = Xot::bit(1),
|
33
|
+
|
34
|
+
EXIT = Xot::bit(2),
|
35
|
+
|
36
|
+
};// Flag
|
37
|
+
|
38
|
+
ID id;
|
39
|
+
|
40
|
+
uint type;
|
41
|
+
|
42
|
+
Action action;
|
43
|
+
|
44
|
+
Point position;
|
45
|
+
|
46
|
+
uint modifiers, click_count, flags;
|
47
|
+
|
48
|
+
double time;
|
49
|
+
|
50
|
+
PrevPointerPtr prev;
|
51
|
+
|
52
|
+
Data (
|
53
|
+
ID id = -1, uint type = TYPE_NONE, Action action = ACTION_NONE,
|
54
|
+
const Point& position = 0, uint modifiers = 0, uint click_count = 0,
|
55
|
+
bool drag = false, bool enter = false, bool exit = false,
|
56
|
+
double time = 0)
|
57
|
+
: id(id), type(type), action(action),
|
58
|
+
position(position), modifiers(modifiers), click_count(click_count),
|
59
|
+
flags(make_flags(drag, enter, exit)),
|
60
|
+
time(time)
|
61
|
+
{
|
62
|
+
}
|
63
|
+
|
64
|
+
uint make_flags (bool drag, bool enter, bool exit)
|
65
|
+
{
|
66
|
+
return
|
67
|
+
(drag ? DRAG : 0) |
|
68
|
+
(enter ? ENTER : 0) |
|
69
|
+
(exit ? EXIT : 0);
|
70
|
+
}
|
71
|
+
|
72
|
+
};// Pointer::Data
|
73
|
+
|
74
|
+
|
75
|
+
void
|
76
|
+
Pointer_update_positions (Pointer* pthis, std::function<void(Point*)> fun)
|
77
|
+
{
|
78
|
+
assert(pthis);
|
79
|
+
|
80
|
+
auto& self = pthis->self;
|
81
|
+
fun(&self->position);
|
82
|
+
if (self->prev)
|
83
|
+
fun(&self->prev->self->position);
|
84
|
+
}
|
85
|
+
|
86
|
+
void
|
87
|
+
Pointer_set_id (Pointer* pthis, Pointer::ID id)
|
88
|
+
{
|
89
|
+
pthis->self->id = id;
|
90
|
+
}
|
91
|
+
|
92
|
+
void
|
93
|
+
Pointer_set_prev (Pointer* pthis, const Pointer* prev)
|
94
|
+
{
|
95
|
+
if (prev)
|
96
|
+
pthis->self->prev.reset(new Pointer(*prev));
|
97
|
+
else
|
98
|
+
pthis->self->prev.reset();
|
99
|
+
}
|
100
|
+
|
101
|
+
|
102
|
+
Pointer::Pointer ()
|
103
|
+
{
|
104
|
+
}
|
105
|
+
|
106
|
+
Pointer::Pointer (
|
107
|
+
ID id, uint type, Action action,
|
108
|
+
const Point& position, uint modifiers, uint click_count, bool drag,
|
109
|
+
double time)
|
110
|
+
: self(new Data(
|
111
|
+
id, type, action,
|
112
|
+
position, modifiers, click_count, drag, false, false,
|
113
|
+
time))
|
114
|
+
{
|
115
|
+
}
|
116
|
+
|
117
|
+
Pointer::Pointer (const This& obj)
|
118
|
+
: self(new Data(*obj.self))
|
119
|
+
{
|
120
|
+
}
|
121
|
+
|
122
|
+
Pointer&
|
123
|
+
Pointer::operator = (const This& obj)
|
124
|
+
{
|
125
|
+
if (&obj == this) return *this;
|
126
|
+
|
127
|
+
*self = *obj.self;
|
128
|
+
return *this;
|
129
|
+
}
|
130
|
+
|
131
|
+
Pointer::~Pointer ()
|
132
|
+
{
|
133
|
+
}
|
134
|
+
|
135
|
+
Pointer::ID
|
136
|
+
Pointer::id () const
|
137
|
+
{
|
138
|
+
return self->id;
|
139
|
+
}
|
140
|
+
|
141
|
+
uint
|
142
|
+
Pointer::type () const
|
143
|
+
{
|
144
|
+
return self->type;
|
145
|
+
}
|
146
|
+
|
147
|
+
Pointer::Action
|
148
|
+
Pointer::action () const
|
149
|
+
{
|
150
|
+
return self->action;
|
151
|
+
}
|
152
|
+
|
153
|
+
const Point&
|
154
|
+
Pointer::position () const
|
155
|
+
{
|
156
|
+
return self->position;
|
157
|
+
}
|
158
|
+
|
159
|
+
uint
|
160
|
+
Pointer::modifiers () const
|
161
|
+
{
|
162
|
+
return self->modifiers;
|
163
|
+
}
|
164
|
+
|
165
|
+
uint
|
166
|
+
Pointer::click_count () const
|
167
|
+
{
|
168
|
+
return self->click_count;
|
169
|
+
}
|
170
|
+
|
171
|
+
bool
|
172
|
+
Pointer::is_drag () const
|
173
|
+
{
|
174
|
+
return self->flags & Data::DRAG;
|
175
|
+
}
|
176
|
+
|
177
|
+
double
|
178
|
+
Pointer::time () const
|
179
|
+
{
|
180
|
+
return self->time;
|
181
|
+
}
|
182
|
+
|
183
|
+
const Pointer*
|
184
|
+
Pointer::prev () const
|
185
|
+
{
|
186
|
+
return self->prev.get();
|
187
|
+
}
|
188
|
+
|
189
|
+
Pointer::operator bool () const
|
190
|
+
{
|
191
|
+
return
|
192
|
+
self->type != TYPE_NONE &&
|
193
|
+
ACTION_NONE < self->action && self->action <= STAY;
|
194
|
+
}
|
195
|
+
|
196
|
+
bool
|
197
|
+
Pointer::operator ! () const
|
198
|
+
{
|
199
|
+
return !operator bool();
|
200
|
+
}
|
201
|
+
|
202
|
+
|
203
|
+
}// Reflex
|
data/src/pointer.h
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
// -*- c++ -*-
|
2
|
+
#pragma once
|
3
|
+
#ifndef __REFLEX_SRC_POINTER_H__
|
4
|
+
#define __REFLEX_SRC_POINTER_H__
|
5
|
+
|
6
|
+
|
7
|
+
#include <functional>
|
8
|
+
#include <reflex/pointer.h>
|
9
|
+
|
10
|
+
|
11
|
+
namespace Reflex
|
12
|
+
{
|
13
|
+
|
14
|
+
|
15
|
+
void Pointer_update_positions (
|
16
|
+
Pointer* pthis, std::function<void(Point*)> fun);
|
17
|
+
|
18
|
+
void Pointer_set_id (Pointer* pthis, Pointer::ID id);
|
19
|
+
|
20
|
+
void Pointer_set_prev (Pointer* pthis, const Pointer* prev);
|
21
|
+
|
22
|
+
|
23
|
+
}// Reflex
|
24
|
+
|
25
|
+
|
26
|
+
#endif//EOH
|