diff options
Diffstat (limited to 'platform/uwp/app.cpp')
-rw-r--r-- | platform/uwp/app.cpp | 111 |
1 files changed, 51 insertions, 60 deletions
diff --git a/platform/uwp/app.cpp b/platform/uwp/app.cpp index 2946aa1eae..c773c0b746 100644 --- a/platform/uwp/app.cpp +++ b/platform/uwp/app.cpp @@ -259,45 +259,48 @@ void App::pointer_event(Windows::UI::Core::CoreWindow ^ sender, Windows::UI::Cor int but = _get_button(point); if (_is_touch(point)) { - InputEvent event; - event.type = InputEvent::SCREEN_TOUCH; - event.device = 0; - event.screen_touch.pressed = p_pressed; - event.screen_touch.x = pos.X; - event.screen_touch.y = pos.Y; - event.screen_touch.index = _get_finger(point->PointerId); - - last_touch_x[event.screen_touch.index] = pos.X; - last_touch_y[event.screen_touch.index] = pos.Y; - - os->input_event(event); + Ref<InputEventScreenTouch> screen_touch; + screen_touch.instance(); + screen_touch->set_device(0); + screen_touch->set_pressed(p_pressed); + screen_touch->set_position(Vector2(pos.X, pos.Y)); + screen_touch->set_index(_get_finger(point->PointerId)); + + last_touch_x[screen_touch->get_index()] = pos.X; + last_touch_y[screen_touch->get_index()] = pos.Y; + + os->input_event(screen_touch); if (number_of_contacts > 1) return; }; // fallthrought of sorts - InputEvent event; - event.type = InputEvent::MOUSE_BUTTON; - event.device = 0; - event.mouse_button.pressed = p_pressed; - event.mouse_button.button_index = but; - event.mouse_button.x = pos.X; - event.mouse_button.y = pos.Y; - event.mouse_button.global_x = pos.X; - event.mouse_button.global_y = pos.Y; + Ref<InputEventMouseButton> mouse_button; + mouse_button.instance(); + mouse_button->set_device(0); + mouse_button->set_pressed(p_pressed); + mouse_button->set_button_index(but); + mouse_button->set_position(Vector2(pos.X, pos.Y)); + mouse_button->set_global_position(Vector2(pos.X, pos.Y)); if (p_is_wheel) { if (point->Properties->MouseWheelDelta > 0) { - event.mouse_button.button_index = point->Properties->IsHorizontalMouseWheel ? BUTTON_WHEEL_RIGHT : BUTTON_WHEEL_UP; + mouse_button->set_button_index(point->Properties->IsHorizontalMouseWheel ? BUTTON_WHEEL_RIGHT : BUTTON_WHEEL_UP); } else if (point->Properties->MouseWheelDelta < 0) { - event.mouse_button.button_index = point->Properties->IsHorizontalMouseWheel ? BUTTON_WHEEL_LEFT : BUTTON_WHEEL_DOWN; + mouse_button->set_button_index(point->Properties->IsHorizontalMouseWheel ? BUTTON_WHEEL_LEFT : BUTTON_WHEEL_DOWN); } } last_touch_x[31] = pos.X; last_touch_y[31] = pos.Y; - os->input_event(event); + os->input_event(mouse_button); + + if (p_is_wheel) { + // Send release for mouse wheel + mouse_button->set_pressed(false); + os->input_event(mouse_button); + } }; void App::OnPointerPressed(Windows::UI::Core::CoreWindow ^ sender, Windows::UI::Core::PointerEventArgs ^ args) { @@ -349,16 +352,14 @@ void App::OnPointerMoved(Windows::UI::Core::CoreWindow ^ sender, Windows::UI::Co if (point->IsInContact && _is_touch(point)) { - InputEvent event; - event.type = InputEvent::SCREEN_DRAG; - event.device = 0; - event.screen_drag.x = pos.X; - event.screen_drag.y = pos.Y; - event.screen_drag.index = _get_finger(point->PointerId); - event.screen_drag.relative_x = event.screen_drag.x - last_touch_x[event.screen_drag.index]; - event.screen_drag.relative_y = event.screen_drag.y - last_touch_y[event.screen_drag.index]; + Ref<InputEventScreenDrag> screen_drag; + screen_drag.instance(); + screen_drag->set_device(0); + screen_drag->set_position(Vector2(pos.X, pos.Y)); + screen_drag->set_index(_get_finger(point->PointerId)); + screen_drag->set_relative(Vector2(screen_drag->get_position().x - last_touch_x[screen_drag->get_index()], screen_drag->get_position().y - last_touch_y[screen_drag->get_index()])); - os->input_event(event); + os->input_event(screen_drag); if (number_of_contacts > 1) return; @@ -368,19 +369,16 @@ void App::OnPointerMoved(Windows::UI::Core::CoreWindow ^ sender, Windows::UI::Co if (os->get_mouse_mode() == OS::MouseMode::MOUSE_MODE_CAPTURED) return; - InputEvent event; - event.type = InputEvent::MOUSE_MOTION; - event.device = 0; - event.mouse_motion.x = pos.X; - event.mouse_motion.y = pos.Y; - event.mouse_motion.global_x = pos.X; - event.mouse_motion.global_y = pos.Y; - event.mouse_motion.relative_x = pos.X - last_touch_x[31]; - event.mouse_motion.relative_y = pos.Y - last_touch_y[31]; + Ref<InputEventMouseMotion> mouse_motion; + mouse_motion.instance(); + mouse_motion->set_device(0); + mouse_motion->set_position(Vector2(pos.X, pos.Y)); + mouse_motion->set_global_position(Vector2(pos.X, pos.Y)); + mouse_motion->set_relative(Vector2(pos.X - last_touch_x[31], pos.Y - last_touch_y[31])); last_mouse_pos = pos; - os->input_event(event); + os->input_event(mouse_motion); } void App::OnMouseMoved(MouseDevice ^ mouse_device, MouseEventArgs ^ args) { @@ -393,32 +391,25 @@ void App::OnMouseMoved(MouseDevice ^ mouse_device, MouseEventArgs ^ args) { pos.X = last_mouse_pos.X + args->MouseDelta.X; pos.Y = last_mouse_pos.Y + args->MouseDelta.Y; - InputEvent event; - event.type = InputEvent::MOUSE_MOTION; - event.device = 0; - event.mouse_motion.x = pos.X; - event.mouse_motion.y = pos.Y; - event.mouse_motion.global_x = pos.X; - event.mouse_motion.global_y = pos.Y; - event.mouse_motion.relative_x = args->MouseDelta.X; - event.mouse_motion.relative_y = args->MouseDelta.Y; + Ref<InputEventMouseMotion> mouse_motion; + mouse_motion.instance(); + mouse_motion->set_device(0); + mouse_motion->set_position(Vector2(pos.X, pos.Y)); + mouse_motion->set_global_position(Vector2(pos.X, pos.Y)); + mouse_motion->set_relative(Vector2(args->MouseDelta.X, args->MouseDelta.Y)); last_mouse_pos = pos; - os->input_event(event); + os->input_event(mouse_motion); } void App::key_event(Windows::UI::Core::CoreWindow ^ sender, bool p_pressed, Windows::UI::Core::KeyEventArgs ^ key_args, Windows::UI::Core::CharacterReceivedEventArgs ^ char_args) { OSUWP::KeyEvent ke; - InputModifierState mod; - mod.meta = false; - mod.command = false; - mod.control = sender->GetAsyncKeyState(VirtualKey::Control) == CoreVirtualKeyStates::Down; - mod.alt = sender->GetAsyncKeyState(VirtualKey::Menu) == CoreVirtualKeyStates::Down; - mod.shift = sender->GetAsyncKeyState(VirtualKey::Shift) == CoreVirtualKeyStates::Down; - ke.mod_state = mod; + ke.control = sender->GetAsyncKeyState(VirtualKey::Control) == CoreVirtualKeyStates::Down; + ke.alt = sender->GetAsyncKeyState(VirtualKey::Menu) == CoreVirtualKeyStates::Down; + ke.shift = sender->GetAsyncKeyState(VirtualKey::Shift) == CoreVirtualKeyStates::Down; ke.pressed = p_pressed; |