/* Copyright (c) 2019-2021, Arm Limited and Contributors * * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 the "License"; * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #include #include namespace vkb { class Platform; enum class EventSource { Keyboard, Mouse, Touchscreen }; class InputEvent { public: InputEvent(EventSource source); EventSource get_source() const; private: EventSource source; }; enum class KeyCode { Unknown, Space, Apostrophe, /* ' */ Comma, /* , */ Minus, /* - */ Period, /* . */ Slash, /* / */ _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, Semicolon, /* ; */ Equal, /* = */ A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, LeftBracket, /* [ */ Backslash, /* \ */ RightBracket, /* ] */ GraveAccent, /* ` */ Escape, Enter, Tab, Backspace, Insert, DelKey, Right, Left, Down, Up, PageUp, PageDown, Home, End, Back, CapsLock, ScrollLock, NumLock, PrintScreen, Pause, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, KP_0, KP_1, KP_2, KP_3, KP_4, KP_5, KP_6, KP_7, KP_8, KP_9, KP_Decimal, KP_Divide, KP_Multiply, KP_Subtract, KP_Add, KP_Enter, KP_Equal, LeftShift, LeftControl, LeftAlt, RightShift, RightControl, RightAlt }; enum class KeyAction { Down, Up, Repeat, Unknown }; class KeyInputEvent : public InputEvent { public: KeyInputEvent(KeyCode code, KeyAction action); KeyCode get_code() const; KeyAction get_action() const; private: KeyCode code; KeyAction action; }; enum class MouseButton { Left, Right, Middle, Back, Forward, Unknown }; enum class MouseAction { Down, Up, Move, Unknown }; class MouseButtonInputEvent : public InputEvent { public: MouseButtonInputEvent(MouseButton button, MouseAction action, float pos_x, float pos_y); MouseButton get_button() const; MouseAction get_action() const; float get_pos_x() const; float get_pos_y() const; private: MouseButton button; MouseAction action; float pos_x; float pos_y; }; enum class TouchAction { Down, Up, Move, Cancel, PointerDown, PointerUp, Unknown }; class TouchInputEvent : public InputEvent { public: TouchInputEvent(int32_t pointer_id, size_t pointer_count, TouchAction action, float pos_x, float pos_y); TouchAction get_action() const; int32_t get_pointer_id() const; size_t get_touch_points() const; float get_pos_x() const; float get_pos_y() const; private: TouchAction action; int32_t pointer_id; size_t touch_points; float pos_x; float pos_y; }; } // namespace vkb