Path: blob/master/platform/android/android_input_handler.h
10277 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.h"3334// This class encapsulates all the handling of input events that come from the Android UI thread.35// Remarks:36// - It's not thread-safe by itself, so its functions must only be called on a single thread, which is the Android UI thread.37// - Its functions must only call thread-safe methods.38class AndroidInputHandler {39public:40struct TouchPos {41int id = 0;42Point2 pos;43float pressure = 0;44Vector2 tilt;45};4647struct MouseEventInfo {48bool valid = false;49Point2 pos;50};5152enum {53JOY_EVENT_BUTTON = 0,54JOY_EVENT_AXIS = 1,55JOY_EVENT_HAT = 256};5758struct JoypadEvent {59int device = 0;60int type = 0;61int index = 0; // Can be either JoyAxis or JoyButton.62bool pressed = false;63float value = 0;64BitField<HatMask> hat = HatMask::CENTER;65};6667private:68bool alt_mem = false;69bool shift_mem = false;70bool control_mem = false;71bool meta_mem = false;7273BitField<MouseButtonMask> buttons_state = MouseButtonMask::NONE;7475Vector<TouchPos> touch;76MouseEventInfo mouse_event_info;77Point2 hover_prev_pos; // needed to calculate the relative position on hover events7879void _set_key_modifier_state(Ref<InputEventWithModifiers> ev, Key p_keycode);8081static MouseButton _button_index_from_mask(BitField<MouseButtonMask> button_mask);82static BitField<MouseButtonMask> _android_button_mask_to_godot_button_mask(int android_button_mask);8384void _wheel_button_click(BitField<MouseButtonMask> event_buttons_mask, const Ref<InputEventMouseButton> &ev, MouseButton wheel_button, float factor);8586void _parse_mouse_event_info(BitField<MouseButtonMask> event_buttons_mask, bool p_pressed, bool p_canceled, bool p_double_click, bool p_source_mouse_relative);8788void _release_mouse_event_info(bool p_source_mouse_relative = false);8990void _cancel_mouse_event_info(bool p_source_mouse_relative = false);9192void _parse_all_touch(bool p_pressed, bool p_canceled = false, bool p_double_tap = false);9394void _release_all_touch();9596void _cancel_all_touch();9798public:99void 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);100void process_touch_event(int p_event, int p_pointer, const Vector<TouchPos> &p_points, bool p_double_tap);101void process_magnify(Point2 p_pos, float p_factor);102void process_pan(Point2 p_pos, Vector2 p_delta);103void process_joy_event(JoypadEvent p_event);104void process_key_event(int p_physical_keycode, int p_unicode, int p_key_label, bool p_pressed, bool p_echo);105};106107108