Files
Renderive/Core2/event/Event.h
T
2026-08-10 19:55:29 +08:00

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