93 lines
2.0 KiB
C++
93 lines
2.0 KiB
C++
#pragma once
|
|
|
|
#include "../base/Types.h"
|
|
|
|
namespace renderive {
|
|
|
|
enum class Event_Type : std::uint8_t {
|
|
Resize,
|
|
Show,
|
|
Hide,
|
|
Leave,
|
|
Pointer_Move,
|
|
Pointer_Press,
|
|
Pointer_Release,
|
|
Wheel,
|
|
Key_Press,
|
|
Key_Release
|
|
};
|
|
|
|
struct Event {
|
|
explicit Event(Event_Type value) : type(value) {}
|
|
virtual ~Event() = default;
|
|
void accept() const noexcept { accepted = true; }
|
|
[[nodiscard]] bool is_accepted() const noexcept { return accepted; }
|
|
|
|
Event_Type type;
|
|
private:
|
|
mutable bool accepted{};
|
|
};
|
|
|
|
enum class Mouse_Button : std::uint8_t { None, Left, Right, Middle };
|
|
using Mouse_Button_Mask = std::uint8_t;
|
|
|
|
enum class Keyboard_Modifier : std::uint8_t {
|
|
None = 0,
|
|
Ctrl = 1 << 0,
|
|
Shift = 1 << 1,
|
|
Alt = 1 << 2,
|
|
Meta = 1 << 3
|
|
};
|
|
|
|
constexpr Keyboard_Modifier operator|(Keyboard_Modifier left, Keyboard_Modifier right) noexcept {
|
|
return static_cast<Keyboard_Modifier>(static_cast<std::uint8_t>(left) |
|
|
static_cast<std::uint8_t>(right));
|
|
}
|
|
|
|
struct Pointer_Event : Event {
|
|
explicit Pointer_Event(Event_Type value = Event_Type::Pointer_Move) : Event(value) {}
|
|
PointF position;
|
|
PointF global_position;
|
|
Mouse_Button button = Mouse_Button::None;
|
|
Mouse_Button_Mask buttons{};
|
|
Keyboard_Modifier modifiers = Keyboard_Modifier::None;
|
|
};
|
|
|
|
struct Wheel_Event : Pointer_Event {
|
|
Wheel_Event() : Pointer_Event(Event_Type::Wheel) {}
|
|
double angle_delta_x{};
|
|
double angle_delta_y{};
|
|
double pixel_delta_x{};
|
|
double pixel_delta_y{};
|
|
};
|
|
|
|
struct Resize_Event : Event {
|
|
Resize_Event() : Event(Event_Type::Resize) {}
|
|
Size old_size;
|
|
Size new_size;
|
|
};
|
|
|
|
enum class Key : std::uint16_t {
|
|
Unknown,
|
|
Escape,
|
|
Enter,
|
|
Space,
|
|
Delete,
|
|
Backspace,
|
|
Left,
|
|
Right,
|
|
Up,
|
|
Down
|
|
};
|
|
|
|
struct Key_Event : Event {
|
|
explicit Key_Event(Event_Type value) : Event(value) {}
|
|
Key key = Key::Unknown;
|
|
std::uint32_t native_key{};
|
|
Keyboard_Modifier modifiers = Keyboard_Modifier::None;
|
|
bool auto_repeat{};
|
|
};
|
|
|
|
} // namespace renderive
|
|
|