1 /*
2 * Copyright (c) 2011-2021, The DART development contributors
3 * All rights reserved.
4 *
5 * The list of contributors can be found at:
6 * https://github.com/dartsim/dart/blob/master/LICENSE
7 *
8 * This file is provided under the following "BSD-style" License:
9 * Redistribution and use in source and binary forms, with or
10 * without modification, are permitted provided that the following
11 * conditions are met:
12 * * Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * * Redistributions in binary form must reproduce the above
15 * copyright notice, this list of conditions and the following
16 * disclaimer in the documentation and/or other materials provided
17 * with the distribution.
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
19 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
20 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
26 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
27 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
29 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 * POSSIBILITY OF SUCH DAMAGE.
31 */
32
33 #include <dart/dart.hpp>
34 #include <dart/gui/osg/osg.hpp>
35 #include <pybind11/eigen.h>
36 #include <pybind11/pybind11.h>
37
38 PYBIND11_DECLARE_HOLDER_TYPE(T, ::osg::ref_ptr<T>, true);
39
40 namespace py = pybind11;
41
42 namespace dart {
43 namespace python {
44
45 class GUIEventHandlerNoRef : public osgGA::GUIEventHandler
46 {
47 public:
48 using GUIEventHandler::handle;
49
handle(const osgGA::GUIEventAdapter *,osgGA::GUIActionAdapter *)50 virtual bool handle(
51 const osgGA::GUIEventAdapter* /*ea*/, osgGA::GUIActionAdapter* /*aa*/)
52 {
53 return true;
54 }
55
56 protected:
handle(const osgGA::GUIEventAdapter & ea,osgGA::GUIActionAdapter & aa)57 bool handle(
58 const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa) override
59 {
60 return handle(&ea, &aa);
61 }
62 };
63
64 class PyGUIEventHandler final : public GUIEventHandlerNoRef
65 {
66 public:
67 // Inherit the constructors
68 using GUIEventHandlerNoRef::GUIEventHandler;
69
70 // Trampoline for virtual function
handle(const osgGA::GUIEventAdapter * ea,osgGA::GUIActionAdapter * aa)71 bool handle(
72 const osgGA::GUIEventAdapter* ea, osgGA::GUIActionAdapter* aa) override
73 {
74 PYBIND11_OVERLOAD(
75 bool, // Return type
76 GUIEventHandlerNoRef, // Parent class
77 handle, // Name of function in C++ (must match Python name)
78 ea,
79 aa);
80 }
81 };
82
GUIEventHandler(py::module & m)83 void GUIEventHandler(py::module& m)
84 {
85 auto ea = ::py::class_<
86 osgGA::GUIEventAdapter,
87 ::osg::ref_ptr<osgGA::GUIEventAdapter>>(m, "GUIEventAdapter")
88 .def(py::init<>())
89 .def(
90 "getEventType",
91 +[](const osgGA::GUIEventAdapter* self)
92 -> osgGA::GUIEventAdapter::EventType {
93 return self->getEventType();
94 })
95 .def("getKey", +[](const osgGA::GUIEventAdapter* self) -> int {
96 return self->getKey();
97 });
98
99 #define DARTPY_DEFINE_ENUM_MOUSE_BUTTON_MASK(val) \
100 .value(#val, osgGA::GUIEventAdapter::MouseButtonMask::val)
101
102 // clang-format off
103 ::py::enum_<osgGA::GUIEventAdapter::MouseButtonMask>(ea, "MouseButtonMask")
104 DARTPY_DEFINE_ENUM_MOUSE_BUTTON_MASK(LEFT_MOUSE_BUTTON)
105 DARTPY_DEFINE_ENUM_MOUSE_BUTTON_MASK(MIDDLE_MOUSE_BUTTON)
106 DARTPY_DEFINE_ENUM_MOUSE_BUTTON_MASK(RIGHT_MOUSE_BUTTON)
107 .export_values();
108 // clang-format on
109
110 #define DARTPY_DEFINE_ENUM_EVENT_TYPE(val) \
111 .value(#val, osgGA::GUIEventAdapter::EventType::val)
112
113 // clang-format off
114 ::py::enum_<osgGA::GUIEventAdapter::EventType>(ea, "EventType")
115 DARTPY_DEFINE_ENUM_EVENT_TYPE(NONE)
116 DARTPY_DEFINE_ENUM_EVENT_TYPE(PUSH)
117 DARTPY_DEFINE_ENUM_EVENT_TYPE(RELEASE)
118 DARTPY_DEFINE_ENUM_EVENT_TYPE(DOUBLECLICK)
119 DARTPY_DEFINE_ENUM_EVENT_TYPE(DRAG)
120 DARTPY_DEFINE_ENUM_EVENT_TYPE(MOVE)
121 DARTPY_DEFINE_ENUM_EVENT_TYPE(KEYDOWN)
122 DARTPY_DEFINE_ENUM_EVENT_TYPE(KEYUP)
123 DARTPY_DEFINE_ENUM_EVENT_TYPE(FRAME)
124 DARTPY_DEFINE_ENUM_EVENT_TYPE(RESIZE)
125 DARTPY_DEFINE_ENUM_EVENT_TYPE(SCROLL)
126 DARTPY_DEFINE_ENUM_EVENT_TYPE(PEN_PRESSURE)
127 DARTPY_DEFINE_ENUM_EVENT_TYPE(PEN_ORIENTATION)
128 DARTPY_DEFINE_ENUM_EVENT_TYPE(PEN_PROXIMITY_ENTER)
129 DARTPY_DEFINE_ENUM_EVENT_TYPE(PEN_PROXIMITY_LEAVE)
130 DARTPY_DEFINE_ENUM_EVENT_TYPE(CLOSE_WINDOW)
131 DARTPY_DEFINE_ENUM_EVENT_TYPE(QUIT_APPLICATION)
132 DARTPY_DEFINE_ENUM_EVENT_TYPE(USER)
133 .export_values();
134 // clang-format on
135
136 #define DARTPY_DEFINE_ENUM_KEY_SYMBOL(val) \
137 .value(#val, osgGA::GUIEventAdapter::KeySymbol::val)
138
139 // clang-format off
140 ::py::enum_<osgGA::GUIEventAdapter::KeySymbol>(ea, "KeySymbol")
141 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Space)
142
143 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_0)
144 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_1)
145 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_2)
146 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_3)
147 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_4)
148 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_5)
149 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_6)
150 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_7)
151 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_8)
152 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_9)
153 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_A)
154 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_B)
155 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_C)
156 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_D)
157 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_E)
158 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F)
159 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_G)
160 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_H)
161 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_I)
162 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_J)
163 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_K)
164 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_L)
165 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_M)
166 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_N)
167 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_O)
168 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_P)
169 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Q)
170 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_R)
171 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_S)
172 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_T)
173 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_U)
174 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_V)
175 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_W)
176 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_X)
177 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Y)
178 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Z)
179
180 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Exclaim )
181 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Quotedbl )
182 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Hash )
183 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Dollar )
184 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Ampersand )
185 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Quote )
186 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Leftparen )
187 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Rightparen )
188 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Asterisk )
189 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Plus )
190 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Comma )
191 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Minus )
192 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Period )
193 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Slash )
194 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Colon )
195 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Semicolon )
196 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Less )
197 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Equals )
198 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Greater )
199 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Question )
200 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_At )
201 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Leftbracket )
202 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Backslash )
203 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Rightbracket)
204 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Caret )
205 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Underscore )
206 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Backquote )
207
208 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_BackSpace )
209 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Tab )
210 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Linefeed )
211 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Clear )
212 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Return )
213 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Pause )
214 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Scroll_Lock )
215 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Sys_Req )
216 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Escape )
217 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Delete )
218
219 /* Cursor control & motion */
220 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Home )
221 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Left )
222 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Up )
223 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Right )
224 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Down )
225 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Prior )
226 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Page_Up )
227 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Next )
228 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Page_Down)
229 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_End )
230 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Begin )
231
232 /* Misc Functions */
233 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Select )
234 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Print )
235 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Execute )
236 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Insert )
237 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Undo )
238 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Redo )
239 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Menu )
240 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Find )
241 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Cancel )
242 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Help )
243 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Break )
244 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Mode_switch )
245 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Script_switch)
246 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Num_Lock )
247
248 /* Keypad Functions, keypad numbers cleverly chosen to map to ascii */
249 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_Space )
250 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_Tab )
251 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_Enter )
252 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_F1 )
253 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_F2 )
254 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_F3 )
255 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_F4 )
256 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_Home )
257 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_Left )
258 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_Up )
259 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_Right )
260 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_Down )
261 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_Prior )
262 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_Page_Up )
263 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_Next )
264 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_Page_Down)
265 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_End )
266 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_Begin )
267 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_Insert )
268 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_Delete )
269 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_Equal )
270 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_Multiply )
271 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_Add )
272 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_Separator)
273 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_Subtract )
274 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_Decimal )
275 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_Divide )
276
277 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_0)
278 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_1)
279 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_2)
280 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_3)
281 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_4)
282 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_5)
283 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_6)
284 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_7)
285 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_8)
286 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_KP_9)
287
288 /*
289 * Auxiliary Functions; note the duplicate definitions for left and right
290 * function keys; Sun keyboards and a few other manufactures have such
291 * function key groups on the left and/or right sides of the keyboard.
292 * We've not found a keyboard with more than 35 function keys total.
293 */
294 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F1 )
295 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F2 )
296 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F3 )
297 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F4 )
298 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F5 )
299 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F6 )
300 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F7 )
301 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F8 )
302 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F9 )
303 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F10)
304 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F11)
305 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F12)
306 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F13)
307 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F14)
308 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F15)
309 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F16)
310 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F17)
311 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F18)
312 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F19)
313 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F20)
314 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F21)
315 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F22)
316 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F23)
317 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F24)
318 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F25)
319 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F26)
320 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F27)
321 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F28)
322 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F29)
323 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F30)
324 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F31)
325 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F32)
326 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F33)
327 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F34)
328 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_F35)
329
330 /* Modifiers */
331 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Shift_L)
332 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Shift_R)
333 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Control_L)
334 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Control_R)
335 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Caps_Lock)
336 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Shift_Lock)
337
338 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Meta_L)
339 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Meta_R)
340 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Alt_L)
341 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Alt_R)
342 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Super_L)
343 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Super_R)
344 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Hyper_L)
345 DARTPY_DEFINE_ENUM_KEY_SYMBOL(KEY_Hyper_R)
346 .export_values();
347 // clang-format on
348
349 #define DARTPY_DEFINE_ENUM_MOD_KEY_MASK(val) \
350 .value(#val, osgGA::GUIEventAdapter::ModKeyMask::val)
351
352 // clang-format off
353 ::py::enum_<osgGA::GUIEventAdapter::ModKeyMask>(ea, "ModKeyMask")
354 DARTPY_DEFINE_ENUM_MOD_KEY_MASK(MODKEY_LEFT_SHIFT)
355 DARTPY_DEFINE_ENUM_MOD_KEY_MASK(MODKEY_RIGHT_SHIFT)
356 DARTPY_DEFINE_ENUM_MOD_KEY_MASK(MODKEY_LEFT_CTRL )
357 DARTPY_DEFINE_ENUM_MOD_KEY_MASK(MODKEY_RIGHT_CTRL )
358 DARTPY_DEFINE_ENUM_MOD_KEY_MASK(MODKEY_LEFT_ALT )
359 DARTPY_DEFINE_ENUM_MOD_KEY_MASK(MODKEY_RIGHT_ALT )
360 DARTPY_DEFINE_ENUM_MOD_KEY_MASK(MODKEY_LEFT_META )
361 DARTPY_DEFINE_ENUM_MOD_KEY_MASK(MODKEY_RIGHT_META )
362 DARTPY_DEFINE_ENUM_MOD_KEY_MASK(MODKEY_LEFT_SUPER )
363 DARTPY_DEFINE_ENUM_MOD_KEY_MASK(MODKEY_RIGHT_SUPER)
364 DARTPY_DEFINE_ENUM_MOD_KEY_MASK(MODKEY_LEFT_HYPER )
365 DARTPY_DEFINE_ENUM_MOD_KEY_MASK(MODKEY_RIGHT_HYPER)
366 DARTPY_DEFINE_ENUM_MOD_KEY_MASK(MODKEY_NUM_LOCK )
367 DARTPY_DEFINE_ENUM_MOD_KEY_MASK(MODKEY_CAPS_LOCK )
368 DARTPY_DEFINE_ENUM_MOD_KEY_MASK(MODKEY_CTRL )
369 DARTPY_DEFINE_ENUM_MOD_KEY_MASK(MODKEY_SHIFT )
370 DARTPY_DEFINE_ENUM_MOD_KEY_MASK(MODKEY_ALT )
371 DARTPY_DEFINE_ENUM_MOD_KEY_MASK(MODKEY_META )
372 DARTPY_DEFINE_ENUM_MOD_KEY_MASK(MODKEY_SUPER )
373 DARTPY_DEFINE_ENUM_MOD_KEY_MASK(MODKEY_HYPER )
374 .export_values();
375 // clang-format on
376
377 #define DARTPY_DEFINE_ENUM_MOUSE_Y_ORIENTATION(val) \
378 .value(#val, osgGA::GUIEventAdapter::MouseYOrientation::val)
379
380 // clang-format off
381 ::py::enum_<osgGA::GUIEventAdapter::MouseYOrientation>(
382 ea, "MouseYOrientation")
383 DARTPY_DEFINE_ENUM_MOUSE_Y_ORIENTATION(Y_INCREASING_UPWARDS)
384 DARTPY_DEFINE_ENUM_MOUSE_Y_ORIENTATION(Y_INCREASING_DOWNWARDS)
385 .export_values();
386 // clang-format on
387
388 #define DARTPY_DEFINE_ENUM_SCROLLING_MOTION(val) \
389 .value(#val, osgGA::GUIEventAdapter::ScrollingMotion::val)
390
391 // clang-format off
392 ::py::enum_<osgGA::GUIEventAdapter::ScrollingMotion>(ea, "ScrollingMotion")
393 DARTPY_DEFINE_ENUM_SCROLLING_MOTION(SCROLL_NONE)
394 DARTPY_DEFINE_ENUM_SCROLLING_MOTION(SCROLL_LEFT)
395 DARTPY_DEFINE_ENUM_SCROLLING_MOTION(SCROLL_RIGHT)
396 DARTPY_DEFINE_ENUM_SCROLLING_MOTION(SCROLL_UP)
397 DARTPY_DEFINE_ENUM_SCROLLING_MOTION(SCROLL_DOWN)
398 DARTPY_DEFINE_ENUM_SCROLLING_MOTION(SCROLL_2D)
399 .export_values();
400 // clang-format on
401
402 #define DARTPY_DEFINE_ENUM_TABLET_POINTER_TYPE(val) \
403 .value(#val, osgGA::GUIEventAdapter::TabletPointerType::val)
404
405 // clang-format off
406 ::py::enum_<osgGA::GUIEventAdapter::TabletPointerType>(
407 ea, "TabletPointerType") DARTPY_DEFINE_ENUM_TABLET_POINTER_TYPE(UNKNOWN)
408 DARTPY_DEFINE_ENUM_TABLET_POINTER_TYPE(PEN)
409 DARTPY_DEFINE_ENUM_TABLET_POINTER_TYPE(PUCK)
410 DARTPY_DEFINE_ENUM_TABLET_POINTER_TYPE(ERASER)
411 .export_values();
412 // clang-format on
413
414 #define DARTPY_DEFINE_ENUM_TOUCH_PHASE(val) \
415 .value(#val, osgGA::GUIEventAdapter::TouchPhase::val)
416
417 // clang-format off
418 ::py::enum_<osgGA::GUIEventAdapter::TouchPhase>(ea, "TouchPhase")
419 DARTPY_DEFINE_ENUM_TOUCH_PHASE(TOUCH_UNKNOWN)
420 DARTPY_DEFINE_ENUM_TOUCH_PHASE(TOUCH_BEGAN)
421 DARTPY_DEFINE_ENUM_TOUCH_PHASE(TOUCH_MOVED)
422 DARTPY_DEFINE_ENUM_TOUCH_PHASE(TOUCH_STATIONERY)
423 DARTPY_DEFINE_ENUM_TOUCH_PHASE(TOUCH_ENDED)
424 .export_values();
425 // clang-format on
426
427 ::py::class_<osgGA::GUIActionAdapter>(m, "GUIActionAdapter");
428
429 ::py::class_<osgGA::GUIEventHandler, ::osg::ref_ptr<osgGA::GUIEventHandler>>(
430 m, "__GUIEventHandler__")
431 .def(py::init<>());
432
433 ::py::class_<
434 GUIEventHandlerNoRef,
435 osgGA::GUIEventHandler,
436 PyGUIEventHandler,
437 ::osg::ref_ptr<GUIEventHandlerNoRef>>(m, "GUIEventHandler")
438 .def(py::init<>());
439 }
440
441 } // namespace python
442 } // namespace dart
443