Browse Source

python: adapt to Magnum key and pointer event changes.

No backwards compatibility now either, sorry.
next
Vladimír Vondruš 2 years ago
parent
commit
92d06e9e6b
  1. 8
      doc/python/pages/changelog.rst
  2. 100
      src/python/magnum/platform/application.h
  3. 56
      src/python/magnum/platform/glfw.cpp
  4. 58
      src/python/magnum/platform/sdl2.cpp

8
doc/python/pages/changelog.rst

@ -115,10 +115,10 @@ Changelog
:ref:`Range2D.center_y()`, :ref:`Range3D.z()`, :ref:`Range3D.center_x()` / :ref:`Range2D.center_y()`, :ref:`Range3D.z()`, :ref:`Range3D.center_x()` /
:ref:`Range3D.center_y()` / :ref:`Range3D.center_z()` :ref:`Range3D.center_y()` / :ref:`Range3D.center_z()`
- Fixed a copypaste error in - Fixed a copypaste error in
:ref:`platform.sdl2.Application.MouseMoveEvent.relative_position` and :ref:`platform.sdl2.Application.PointerMoveEvent.relative_position` and
:ref:`platform.glfw.Application.MouseMoveEvent.relative_position` :ref:`platform.glfw.Application.PointerMoveEvent.relative_position`
- Fixed :ref:`platform.sdl2.Application.InputEvent.Modifier` and - Fixed :ref:`platform.sdl2.Application.Modifier` and
:ref:`platform.glfw.Application.InputEvent.Modifier` to behave properly :ref:`platform.glfw.Application.Modifier` to behave properly
as flags and not just as an enum as flags and not just as an enum
- Exposed :ref:`meshtools.compress_indices()`, :ref:`meshtools.concatenate()`, - Exposed :ref:`meshtools.compress_indices()`, :ref:`meshtools.concatenate()`,
:ref:`meshtools.copy()`, :ref:`meshtools.duplicate()`, :ref:`meshtools.copy()`, :ref:`meshtools.duplicate()`,

100
src/python/magnum/platform/application.h

@ -29,6 +29,8 @@
#include <pybind11/pybind11.h> #include <pybind11/pybind11.h>
#include <Corrade/Containers/StringStl.h> /** @todo drop once we have our string casters */ #include <Corrade/Containers/StringStl.h> /** @todo drop once we have our string casters */
#include "Corrade/Containers/OptionalPythonBindings.h" /* for pointers() */
#include "corrade/EnumOperators.h" #include "corrade/EnumOperators.h"
#include "magnum/bootstrap.h" #include "magnum/bootstrap.h"
@ -98,28 +100,14 @@ template<class T, class Trampoline, class Holder> void application(py::class_<T,
.def("draw_event", &T::drawEvent, "Draw event") .def("draw_event", &T::drawEvent, "Draw event")
.def("key_press_event", &T::keyPressEvent, "Key press event") .def("key_press_event", &T::keyPressEvent, "Key press event")
.def("key_release_event", &T::keyReleaseEvent, "Key release event") .def("key_release_event", &T::keyReleaseEvent, "Key release event")
.def("mouse_press_event", &T::mousePressEvent, "Mouse press event") .def("pointer_press_event", &T::pointerPressEvent, "Pointer press event")
.def("mouse_release_event", &T::mouseReleaseEvent, "Mouse release event") .def("pointer_release_event", &T::pointerReleaseEvent, "Pointer release event")
.def("mouse_move_event", &T::mouseMoveEvent, "Mouse move event") .def("pointer_move_event", &T::pointerMoveEvent, "Pointer move event")
.def("mouse_scroll_event", &T::mouseScrollEvent, "Mouse scroll event") .def("scroll_event", &T::scrollEvent, "Scroll event")
/** @todo mouse gesture, text input/editing event */ /** @todo text input/editing event */
; ;
}
template<class T, class ...Args> void exitEvent(py::class_<T, Args...>& c) {
c
.def_property("accepted", &T::isAccepted, &T::setAccepted, "Accepted status of the event");
}
template<class T, class ...Args> void viewportEvent(py::class_<T, Args...>& c) {
c
.def_property_readonly("window_size", &T::windowSize, "Window size")
.def_property_readonly("framebuffer_size", &T::framebufferSize, "Framebuffer size")
.def_property_readonly("dpi_scaling", &T::dpiScaling, "DPI scaling");
}
template<class T, class ...Args> void inputEvent(py::class_<T, Args...>& c) { py::enum_<typename T::Modifier> modifiers{c, "Modifier", "Keyboard modifier"};
py::enum_<typename T::Modifier> modifiers{c, "Modifier", "Modifier"};
modifiers modifiers
.value("SHIFT", T::Modifier::Shift) .value("SHIFT", T::Modifier::Shift)
.value("CTRL", T::Modifier::Ctrl) .value("CTRL", T::Modifier::Ctrl)
@ -127,10 +115,6 @@ template<class T, class ...Args> void inputEvent(py::class_<T, Args...>& c) {
.value("SUPER", T::Modifier::Super); .value("SUPER", T::Modifier::Super);
corrade::enumOperators(modifiers); corrade::enumOperators(modifiers);
c.def_property("accepted", &T::isAccepted, &T::setAccepted, "Accepted status of the event");
}
template<class T, class ...Args> void keyEvent(py::class_<T, Args...>& c) {
py::enum_<typename T::Key>{c, "Key", "Key"} py::enum_<typename T::Key>{c, "Key", "Key"}
.value("UNKNOWN", T::Key::Unknown) .value("UNKNOWN", T::Key::Unknown)
.value("LEFT_SHIFT", T::Key::LeftShift) .value("LEFT_SHIFT", T::Key::LeftShift)
@ -244,55 +228,71 @@ template<class T, class ...Args> void keyEvent(py::class_<T, Args...>& c) {
.value("NUM_ENTER", T::Key::NumEnter) .value("NUM_ENTER", T::Key::NumEnter)
.value("NUM_EQUAL", T::Key::NumEqual); .value("NUM_EQUAL", T::Key::NumEqual);
/* The PointerEventSource and Pointer enums are defined for each
application separately, as each has a different set of values */
}
template<class T, class ...Args> void exitEvent(py::class_<T, Args...>& c) {
c
.def_property("accepted", &T::isAccepted, &T::setAccepted, "Accepted status of the event");
}
template<class T, class ...Args> void viewportEvent(py::class_<T, Args...>& c) {
c
.def_property_readonly("window_size", &T::windowSize, "Window size")
.def_property_readonly("framebuffer_size", &T::framebufferSize, "Framebuffer size")
.def_property_readonly("dpi_scaling", &T::dpiScaling, "DPI scaling");
}
template<class T, class ...Args> void inputEvent(py::class_<T, Args...>& c) {
c.def_property("accepted", &T::isAccepted, &T::setAccepted, "Accepted status of the event");
}
template<class T, class ...Args> void keyEvent(py::class_<T, Args...>& c) {
c c
.def_property_readonly("key", &T::key, "Key") .def_property_readonly("key", &T::key, "Key")
/** @todo key name? useful? useles?? */ /** @todo key name? useful? useles?? */
.def_property_readonly("modifiers", [](T& self) { .def_property_readonly("modifiers", [](T& self) {
return typename T::Modifier(typename std::underlying_type<typename T::Modifier>::type(self.modifiers())); return typename decltype(self.modifiers())::Type(enumCastUnderlyingType(self.modifiers()));
}, "Modifiers") }, "Modifiers")
.def_property_readonly("is_repeated", &T::isRepeated, "Whether the key press is repeated"); .def_property_readonly("is_repeated", &T::isRepeated, "Whether the key press is repeated");
} }
template<class T, class ...Args> void mouseEvent(py::class_<T, Args...>& c) { template<class T, class ...Args> void pointerEvent(py::class_<T, Args...>& c) {
py::enum_<typename T::Button>{c, "Button", "Mouse button"}
.value("LEFT", T::Button::Left)
.value("MIDDLE", T::Button::Middle)
.value("RIGHT", T::Button::Right);
c c
.def_property_readonly("button", &T::button, "Button") .def_property_readonly("source", &T::source, "Pointer event source")
.def_property_readonly("pointer", &T::pointer, "Pointer type that was pressed or released")
.def_property_readonly("is_primary", &T::isPrimary, "Whether the pointer is primary")
.def_property_readonly("id", &T::id, "Pointer ID")
.def_property_readonly("position", &T::position, "Position") .def_property_readonly("position", &T::position, "Position")
.def_property_readonly("modifiers", [](T& self) { .def_property_readonly("modifiers", [](T& self) {
return typename T::Modifier(typename std::underlying_type<typename T::Modifier>::type(self.modifiers())); return typename decltype(self.modifiers())::Type(enumCastUnderlyingType(self.modifiers()));
}, "Modifiers"); }, "Keyboard modifiers");
} }
template<class T, class ...Args> void mouseMoveEvent(py::class_<T, Args...>& c) { template<class T, class ...Args> void pointerMoveEvent(py::class_<T, Args...>& c) {
py::enum_<typename T::Button> buttons{c, "Buttons", "Set of mouse buttons"};
buttons
.value("LEFT", T::Button::Left)
.value("MIDDLE", T::Button::Middle)
.value("RIGHT", T::Button::Right);
corrade::enumOperators(buttons);
c c
.def_property_readonly("source", &T::source, "Pointer event source")
.def_property_readonly("pointer", &T::pointer, "Pointer type that was added or removed from the set of pressed pointers")
.def_property_readonly("pointers", [](T& self) {
return typename decltype(self.pointers())::Type(enumCastUnderlyingType(self.pointers()));
}, "Pointer types pressed in this event")
.def_property_readonly("is_primary", &T::isPrimary, "Whether the pointer is primary")
.def_property_readonly("id", &T::id, "Pointer ID")
.def_property_readonly("position", &T::position, "Position") .def_property_readonly("position", &T::position, "Position")
.def_property_readonly("relative_position", &T::relativePosition, "Relative position") .def_property_readonly("relative_position", &T::relativePosition, "Relative position")
.def_property_readonly("buttons", [](T& self) {
return typename T::Button(typename std::underlying_type<typename T::Button>::type(self.buttons()));
}, "Mouse buttons")
.def_property_readonly("modifiers", [](T& self) { .def_property_readonly("modifiers", [](T& self) {
return typename T::Modifier(typename std::underlying_type<typename T::Modifier>::type(self.modifiers())); return typename decltype(self.modifiers())::Type(enumCastUnderlyingType(self.modifiers()));
}, "Modifiers"); }, "Keyboard modifiers");
} }
template<class T, class ...Args> void mouseScrollEvent(py::class_<T, Args...>& c) { template<class T, class ...Args> void scrollEvent(py::class_<T, Args...>& c) {
c c
.def_property_readonly("offset", &T::offset, "Offset") .def_property_readonly("offset", &T::offset, "Offset")
.def_property_readonly("position", &T::position, "Position") .def_property_readonly("position", &T::position, "Position")
.def_property_readonly("modifiers", [](T& self) { .def_property_readonly("modifiers", [](T& self) {
return typename T::Modifier(typename std::underlying_type<typename T::Modifier>::type(self.modifiers())); return typename decltype(self.modifiers())::Type(enumCastUnderlyingType(self.modifiers()));
}, "Modifiers"); }, "Keyboard modifiers");
} }
}} }}

56
src/python/magnum/platform/glfw.cpp

@ -58,10 +58,10 @@ void glfw(py::module_& m) {
void viewportEvent(ViewportEvent&) override {} void viewportEvent(ViewportEvent&) override {}
void keyPressEvent(KeyEvent&) override {} void keyPressEvent(KeyEvent&) override {}
void keyReleaseEvent(KeyEvent&) override {} void keyReleaseEvent(KeyEvent&) override {}
void mousePressEvent(MouseEvent&) override {} void pointerPressEvent(PointerEvent&) override {}
void mouseReleaseEvent(MouseEvent&) override {} void pointerReleaseEvent(PointerEvent&) override {}
void mouseMoveEvent(MouseMoveEvent&) override {} void pointerMoveEvent(PointerMoveEvent&) override {}
void mouseScrollEvent(MouseScrollEvent&) override {} void scrollEvent(ScrollEvent&) override {}
/* The base doesn't have a virtual destructor because in C++ it's never /* The base doesn't have a virtual destructor because in C++ it's never
deleted through a pointer to the base. Here we need it, though. */ deleted through a pointer to the base. Here we need it, though. */
@ -142,45 +142,45 @@ void glfw(py::module_& m) {
); );
} }
void mousePressEvent(MouseEvent& event) override { void pointerPressEvent(PointerEvent& event) override {
PYBIND11_OVERLOAD_NAME( PYBIND11_OVERLOAD_NAME(
void, void,
PublicizedApplication, PublicizedApplication,
"mouse_press_event", "pointer_press_event",
mousePressEvent, pointerPressEvent,
/* Have to use std::ref() otherwise pybind tries to copy /* Have to use std::ref() otherwise pybind tries to copy
it and fails */ it and fails */
std::ref(event) std::ref(event)
); );
} }
void mouseReleaseEvent(MouseEvent& event) override { void pointerReleaseEvent(PointerEvent& event) override {
PYBIND11_OVERLOAD_NAME( PYBIND11_OVERLOAD_NAME(
void, void,
PublicizedApplication, PublicizedApplication,
"mouse_release_event", "pointer_release_event",
mouseReleaseEvent, pointerReleaseEvent,
/* Have to use std::ref() otherwise pybind tries to copy /* Have to use std::ref() otherwise pybind tries to copy
it and fails */ it and fails */
std::ref(event) std::ref(event)
); );
} }
void mouseMoveEvent(MouseMoveEvent& event) override { void pointerMoveEvent(PointerMoveEvent& event) override {
PYBIND11_OVERLOAD_NAME( PYBIND11_OVERLOAD_NAME(
void, void,
PublicizedApplication, PublicizedApplication,
"mouse_move_event", "pointer_move_event",
mouseMoveEvent, pointerMoveEvent,
/* Have to use std::ref() otherwise pybind tries to copy /* Have to use std::ref() otherwise pybind tries to copy
it and fails */ it and fails */
std::ref(event) std::ref(event)
); );
} }
void mouseScrollEvent(MouseScrollEvent& event) override { void scrollEvent(ScrollEvent& event) override {
PYBIND11_OVERLOAD_NAME( PYBIND11_OVERLOAD_NAME(
void, void,
PublicizedApplication, PublicizedApplication,
"mouse_scroll_event", "scroll_event",
mouseScrollEvent, scrollEvent,
/* Have to use std::ref() otherwise pybind tries to copy /* Have to use std::ref() otherwise pybind tries to copy
it and fails */ it and fails */
std::ref(event) std::ref(event)
@ -200,9 +200,21 @@ void glfw(py::module_& m) {
PyNonDestructibleClass<PublicizedApplication::ViewportEvent> viewportEvent_{glfwApplication, "ViewportEvent", "Viewport event"}; PyNonDestructibleClass<PublicizedApplication::ViewportEvent> viewportEvent_{glfwApplication, "ViewportEvent", "Viewport event"};
PyNonDestructibleClass<PublicizedApplication::InputEvent> inputEvent_{glfwApplication, "InputEvent", "Base for input events"}; PyNonDestructibleClass<PublicizedApplication::InputEvent> inputEvent_{glfwApplication, "InputEvent", "Base for input events"};
py::class_<PublicizedApplication::KeyEvent, PublicizedApplication::InputEvent> keyEvent_{glfwApplication, "KeyEvent", "Key event"}; py::class_<PublicizedApplication::KeyEvent, PublicizedApplication::InputEvent> keyEvent_{glfwApplication, "KeyEvent", "Key event"};
py::class_<PublicizedApplication::MouseEvent, PublicizedApplication::InputEvent> mouseEvent_{glfwApplication, "MouseEvent", "Mouse event"}; py::class_<PublicizedApplication::PointerEvent, PublicizedApplication::InputEvent> pointerEvent_{glfwApplication, "PointerEvent", "Pointer event"};
py::class_<PublicizedApplication::MouseMoveEvent, PublicizedApplication::InputEvent> mouseMoveEvent_{glfwApplication, "MouseMoveEvent", "Mouse move event"}; py::class_<PublicizedApplication::PointerMoveEvent, PublicizedApplication::InputEvent> pointerMoveEvent_{glfwApplication, "PointerMoveEvent", "Pointer move event"};
py::class_<PublicizedApplication::MouseScrollEvent, PublicizedApplication::InputEvent> mouseScrollEvent_{glfwApplication, "MouseScrollEvent", "Mouse scroll event"}; py::class_<PublicizedApplication::ScrollEvent, PublicizedApplication::InputEvent> scrollEvent_{glfwApplication, "ScrollEvent", "Scroll event"};
py::enum_<Platform::Application::PointerEventSource>{glfwApplication, "PointerEventSource", "Pointer event source"}
.value("MOUSE", Platform::Application::PointerEventSource::Mouse);
py::enum_<Platform::Application::Pointer> pointer{glfwApplication, "Pointer", "Pointer"};
pointer
.value("MOUSE_LEFT", Platform::Application::Pointer::MouseLeft)
.value("MOUSE_MIDDLE", Platform::Application::Pointer::MouseMiddle)
.value("MOUSE_RIGHT", Platform::Application::Pointer::MouseRight)
.value("MOUSE_BUTTON4", Platform::Application::Pointer::MouseButton4)
.value("MOUSE_BUTTON5", Platform::Application::Pointer::MouseButton5);
corrade::enumOperators(pointer);
py::enum_<Platform::Application::Cursor>{glfwApplication, "Cursor", "Cursor type"} py::enum_<Platform::Application::Cursor>{glfwApplication, "Cursor", "Cursor type"}
.value("ARROW", Platform::Application::Cursor::Arrow) .value("ARROW", Platform::Application::Cursor::Arrow)
@ -227,9 +239,9 @@ void glfw(py::module_& m) {
viewportEvent(viewportEvent_); viewportEvent(viewportEvent_);
inputEvent(inputEvent_); inputEvent(inputEvent_);
keyEvent(keyEvent_); keyEvent(keyEvent_);
mouseEvent(mouseEvent_); pointerEvent(pointerEvent_);
mouseMoveEvent(mouseMoveEvent_); pointerMoveEvent(pointerMoveEvent_);
mouseScrollEvent(mouseScrollEvent_); scrollEvent(scrollEvent_);
} }
}} }}

58
src/python/magnum/platform/sdl2.cpp

@ -58,10 +58,10 @@ void sdl2(py::module_& m) {
void viewportEvent(ViewportEvent&) override {} void viewportEvent(ViewportEvent&) override {}
void keyPressEvent(KeyEvent&) override {} void keyPressEvent(KeyEvent&) override {}
void keyReleaseEvent(KeyEvent&) override {} void keyReleaseEvent(KeyEvent&) override {}
void mousePressEvent(MouseEvent&) override {} void pointerPressEvent(PointerEvent&) override {}
void mouseReleaseEvent(MouseEvent&) override {} void pointerReleaseEvent(PointerEvent&) override {}
void mouseMoveEvent(MouseMoveEvent&) override {} void pointerMoveEvent(PointerMoveEvent&) override {}
void mouseScrollEvent(MouseScrollEvent&) override {} void scrollEvent(ScrollEvent&) override {}
/* The base doesn't have a virtual destructor because in C++ it's never /* The base doesn't have a virtual destructor because in C++ it's never
deleted through a pointer to the base. Here we need it, though. */ deleted through a pointer to the base. Here we need it, though. */
@ -142,45 +142,45 @@ void sdl2(py::module_& m) {
); );
} }
void mousePressEvent(MouseEvent& event) override { void pointerPressEvent(PointerEvent& event) override {
PYBIND11_OVERLOAD_NAME( PYBIND11_OVERLOAD_NAME(
void, void,
PublicizedApplication, PublicizedApplication,
"mouse_press_event", "pointer_press_event",
mousePressEvent, pointerPressEvent,
/* Have to use std::ref() otherwise pybind tries to copy /* Have to use std::ref() otherwise pybind tries to copy
it and fails */ it and fails */
std::ref(event) std::ref(event)
); );
} }
void mouseReleaseEvent(MouseEvent& event) override { void pointerReleaseEvent(PointerEvent& event) override {
PYBIND11_OVERLOAD_NAME( PYBIND11_OVERLOAD_NAME(
void, void,
PublicizedApplication, PublicizedApplication,
"mouse_release_event", "pointer_release_event",
mouseReleaseEvent, pointerReleaseEvent,
/* Have to use std::ref() otherwise pybind tries to copy /* Have to use std::ref() otherwise pybind tries to copy
it and fails */ it and fails */
std::ref(event) std::ref(event)
); );
} }
void mouseMoveEvent(MouseMoveEvent& event) override { void pointerMoveEvent(PointerMoveEvent& event) override {
PYBIND11_OVERLOAD_NAME( PYBIND11_OVERLOAD_NAME(
void, void,
PublicizedApplication, PublicizedApplication,
"mouse_move_event", "pointer_move_event",
mouseMoveEvent, pointerMoveEvent,
/* Have to use std::ref() otherwise pybind tries to copy /* Have to use std::ref() otherwise pybind tries to copy
it and fails */ it and fails */
std::ref(event) std::ref(event)
); );
} }
void mouseScrollEvent(MouseScrollEvent& event) override { void scrollEvent(ScrollEvent& event) override {
PYBIND11_OVERLOAD_NAME( PYBIND11_OVERLOAD_NAME(
void, void,
PublicizedApplication, PublicizedApplication,
"mouse_scroll_event", "scroll_event",
mouseScrollEvent, scrollEvent,
/* Have to use std::ref() otherwise pybind tries to copy /* Have to use std::ref() otherwise pybind tries to copy
it and fails */ it and fails */
std::ref(event) std::ref(event)
@ -200,9 +200,23 @@ void sdl2(py::module_& m) {
PyNonDestructibleClass<PublicizedApplication::ViewportEvent> viewportEvent_{sdl2application, "ViewportEvent", "Viewport event"}; PyNonDestructibleClass<PublicizedApplication::ViewportEvent> viewportEvent_{sdl2application, "ViewportEvent", "Viewport event"};
PyNonDestructibleClass<PublicizedApplication::InputEvent> inputEvent_{sdl2application, "InputEvent", "Base for input events"}; PyNonDestructibleClass<PublicizedApplication::InputEvent> inputEvent_{sdl2application, "InputEvent", "Base for input events"};
py::class_<PublicizedApplication::KeyEvent, PublicizedApplication::InputEvent> keyEvent_{sdl2application, "KeyEvent", "Key event"}; py::class_<PublicizedApplication::KeyEvent, PublicizedApplication::InputEvent> keyEvent_{sdl2application, "KeyEvent", "Key event"};
py::class_<PublicizedApplication::MouseEvent, PublicizedApplication::InputEvent> mouseEvent_{sdl2application, "MouseEvent", "Mouse event"}; py::class_<PublicizedApplication::PointerEvent, PublicizedApplication::InputEvent> pointerEvent_{sdl2application, "PointerEvent", "Pointer event"};
py::class_<PublicizedApplication::MouseMoveEvent, PublicizedApplication::InputEvent> mouseMoveEvent_{sdl2application, "MouseMoveEvent", "Mouse move event"}; py::class_<PublicizedApplication::PointerMoveEvent, PublicizedApplication::InputEvent> pointerMoveEvent_{sdl2application, "PointerMoveEvent", "Pointer move event"};
py::class_<PublicizedApplication::MouseScrollEvent, PublicizedApplication::InputEvent> mouseScrollEvent_{sdl2application, "MouseScrollEvent", "Mouse scroll event"}; py::class_<PublicizedApplication::ScrollEvent, PublicizedApplication::InputEvent> scrollEvent_{sdl2application, "ScrollEvent", "Scroll event"};
py::enum_<Platform::Application::PointerEventSource>{sdl2application, "PointerEventSource", "Pointer event source"}
.value("MOUSE", Platform::Application::PointerEventSource::Mouse)
.value("TOUCH", Platform::Application::PointerEventSource::Touch);
py::enum_<Platform::Application::Pointer> pointer{sdl2application, "Pointer", "Pointer"};
pointer
.value("MOUSE_LEFT", Platform::Application::Pointer::MouseLeft)
.value("MOUSE_MIDDLE", Platform::Application::Pointer::MouseMiddle)
.value("MOUSE_RIGHT", Platform::Application::Pointer::MouseRight)
.value("MOUSE_BUTTON4", Platform::Application::Pointer::MouseButton4)
.value("MOUSE_BUTTON5", Platform::Application::Pointer::MouseButton5)
.value("FINGER", Platform::Application::Pointer::Finger);
corrade::enumOperators(pointer);
py::enum_<Platform::Application::Cursor>{sdl2application, "Cursor", "Cursor type"} py::enum_<Platform::Application::Cursor>{sdl2application, "Cursor", "Cursor type"}
.value("ARROW", Platform::Application::Cursor::Arrow) .value("ARROW", Platform::Application::Cursor::Arrow)
@ -224,9 +238,9 @@ void sdl2(py::module_& m) {
viewportEvent(viewportEvent_); viewportEvent(viewportEvent_);
inputEvent(inputEvent_); inputEvent(inputEvent_);
keyEvent(keyEvent_); keyEvent(keyEvent_);
mouseEvent(mouseEvent_); pointerEvent(pointerEvent_);
mouseMoveEvent(mouseMoveEvent_); pointerMoveEvent(pointerMoveEvent_);
mouseScrollEvent(mouseScrollEvent_); scrollEvent(scrollEvent_);
} }
}} }}

Loading…
Cancel
Save