Path: blob/master/platform/android/android_input_handler.h
20888 views
/**************************************************************************/1/* android_input_handler.h */2/**************************************************************************/3/* This file is part of: */4/* GODOT ENGINE */5/* https://godotengine.org */6/**************************************************************************/7/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */8/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */9/* */10/* Permission is hereby granted, free of charge, to any person obtaining */11/* a copy of this software and associated documentation files (the */12/* "Software"), to deal in the Software without restriction, including */13/* without limitation the rights to use, copy, modify, merge, publish, */14/* distribute, sublicense, and/or sell copies of the Software, and to */15/* permit persons to whom the Software is furnished to do so, subject to */16/* the following conditions: */17/* */18/* The above copyright notice and this permission notice shall be */19/* included in all copies or substantial portions of the Software. */20/* */21/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */22/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */23/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */24/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */25/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */26/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */27/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */28/**************************************************************************/2930#pragma once3132#include "core/input/input_event.h"33#include "core/templates/rb_map.h"3435// This class encapsulates all the handling of input events that come from the Android UI thread.36// Remarks:37// - It's not thread-safe by itself, so its functions must only be called on a single thread, which is the Android UI thread.38// - Its functions must only call thread-safe methods.39class AndroidInputHandler {40public:41struct TouchPos {42int id = 0;43Point2 pos;44float pressure = 0;45Vector2 tilt;46};4748struct MouseEventInfo {49bool valid = false;50Point2 pos;51};5253enum {54JOY_EVENT_BUTTON = 0,55JOY_EVENT_AXIS = 1,56JOY_EVENT_HAT = 257};5859struct JoypadEvent {60int device = 0;61int type = 0;62int index = 0; // Can be either JoyAxis or JoyButton.63bool pressed = false;64float value = 0;65BitField<HatMask> hat = HatMask::CENTER;66};6768private:69bool alt_mem = false;70bool shift_mem = false;71bool control_mem = false;72bool meta_mem = false;7374BitField<MouseButtonMask> buttons_state = MouseButtonMask::NONE;7576Vector<TouchPos> touch;77MouseEventInfo mouse_event_info;78Point2 hover_prev_pos; // needed to calculate the relative position on hover events7980void _set_key_modifier_state(Ref<InputEventWithModifiers> ev, Key p_keycode);8182static MouseButton _button_index_from_mask(BitField<MouseButtonMask> button_mask);83static BitField<MouseButtonMask> _android_button_mask_to_godot_button_mask(int android_button_mask);8485void _wheel_button_click(BitField<MouseButtonMask> event_buttons_mask, const Ref<InputEventMouseButton> &ev, MouseButton wheel_button, float factor);8687void _parse_mouse_event_info(BitField<MouseButtonMask> event_buttons_mask, bool p_pressed, bool p_canceled, bool p_double_click, bool p_source_mouse_relative);8889void _release_mouse_event_info(bool p_source_mouse_relative = false);9091void _cancel_mouse_event_info(bool p_source_mouse_relative = false);9293void _parse_all_touch(bool p_pressed, bool p_canceled = false, bool p_double_tap = false);9495void _release_all_touch();9697void _cancel_all_touch();9899public:100void process_mouse_event(int p_event_action, int p_event_android_buttons_mask, Point2 p_event_pos, Vector2 p_delta, bool p_double_click, bool p_source_mouse_relative, float p_pressure, Vector2 p_tilt);101void process_touch_event(int p_event, int p_pointer, const Vector<TouchPos> &p_points, bool p_double_tap);102void process_magnify(Point2 p_pos, float p_factor);103void process_pan(Point2 p_pos, Vector2 p_delta);104void process_joy_event(JoypadEvent p_event);105void process_key_event(int p_physical_keycode, int p_unicode, int p_key_label, bool p_pressed, bool p_echo);106};107108109