HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
MouseEvent.hpp
1// Copyright 2020 Pokitec
2// All rights reserved.
3
4#pragma once
5
6#include "TTauri/Foundation/vec.hpp"
7#include "TTauri/Foundation/hires_utc_clock.hpp"
8#include "TTauri/GUI/MouseButtons.hpp"
9
10namespace tt {
11
12struct MouseEvent {
13 enum class Type { None, Entered, Exited, Move, Drag, ButtonDown, ButtonUp };
14
15 Type type;
16
18
21
24
27
30
33
34 MouseEvent() noexcept :
35 type(Type::None),
36 position(),
37 cause(),
38 down(),
39 clickCount(0)
40 {
41 }
42
43 static MouseEvent entered(vec position=vec::point(0.0f, 0.0f)) noexcept {
44 MouseEvent event;
45 event.position = position;
46 event.type = MouseEvent::Type::Entered;
47 return event;
48 }
49 static MouseEvent exited() noexcept {
50 // Position far away from the left/bottom corner, but where even
51 // after translations will not cause the position to be infinite.
52 constexpr float far_ = std::numeric_limits<float>::max() * -0.5f;
53
54 MouseEvent event;
55 event.position = vec{far_, far_};
56 event.type = MouseEvent::Type::Exited;
57 return event;
58 }
59
60 friend std::string to_string(MouseEvent const &rhs) noexcept {
61 char const *type_s;
62 switch (rhs.type) {
63 case MouseEvent::Type::None: type_s = "none"; break;
64 case MouseEvent::Type::Entered: type_s = "entered"; break;
65 case MouseEvent::Type::Exited: type_s = "exited"; break;
66 case MouseEvent::Type::Move: type_s = "move"; break;
67 case MouseEvent::Type::Drag: type_s = "drag"; break;
68 case MouseEvent::Type::ButtonDown: type_s = "down"; break;
69 case MouseEvent::Type::ButtonUp: type_s = "up"; break;
70 default: tt_no_default;
71 }
72
73 return fmt::format("<mouse {} {}>", type_s, rhs.position);
74 }
75
76 friend std::ostream &operator<<(std::ostream &lhs, MouseEvent const &rhs) {
77 return lhs << to_string(rhs);
78 }
79};
80
81
82
83}
A 4D vector.
Definition vec.hpp:37
static tt_force_inline vec point(float x=0.0f, float y=0.0f, float z=0.0f) noexcept
Create a point out of 2 to 4 values.
Definition vec.hpp:180
Definition MouseButtons.hpp:10
Definition MouseEvent.hpp:12
MouseButtons down
Buttons that are pressed/held down.
Definition MouseEvent.hpp:29
int clickCount
Number of clicks from the last button clicked.
Definition MouseEvent.hpp:32
vec downPosition
The position the last time a button was pressed.
Definition MouseEvent.hpp:23
vec position
The current position of the mouse pointer.
Definition MouseEvent.hpp:20
MouseButtons cause
Buttons which has caused this event.
Definition MouseEvent.hpp:26
T max(T... args)