3#include "di/reflect/enumerator.h"
4#include "di/reflect/reflect.h"
5#include "di/util/bitwise_enum.h"
33 return di::make_enumerators<
"MouseButton">(
34 di::enumerator<
"None",
None>, di::enumerator<
"Left",
Left>, di::enumerator<
"Middle",
Middle>,
37 di::enumerator<
"9",
_9>, di::enumerator<
"10",
_10>, di::enumerator<
"11",
_11>);
45 constexpr auto x() const -> u32 {
return m_x; }
46 constexpr auto y() const -> u32 {
return m_y; }
51 constexpr friend auto tag_invoke(di::Tag<di::reflect>, di::InPlaceType<MouseCoordinate>) {
52 return di::make_fields<
"MouseCoordinate">(di::field<
"x", &MouseCoordinate::m_x>,
53 di::field<
"y", &MouseCoordinate::m_y>);
63 if (size.rows == 0 || size.cols == 0) {
74 : m_cells(cells), m_pixels(pixels) {}
80 if (m_pixels.has_value()) {
81 return m_pixels.value();
84 if (size.rows == 0 || size.cols == 0) {
89 auto x = (
in_cells().x() * size.xpixels + size.xpixels / 2) / size.cols;
90 auto y = (
in_cells().y() * size.ypixels + size.ypixels / 2) / size.rows;
96 in_cells().x() + offset_in_cells.x(),
97 in_cells().y() + offset_in_cells.y(),
101 pixels.
x() + size.xpixels / size.cols,
102 pixels.
y() + size.ypixels / size.rows,
112 constexpr friend auto tag_invoke(di::Tag<di::reflect>, di::InPlaceType<MousePosition>) {
113 return di::make_fields<
"MousePosition">(di::field<
"cells", &MousePosition::m_cells>,
114 di::field<
"pixels", &MousePosition::m_pixels>);
118 di::Optional<MouseCoordinate> m_pixels;
constexpr friend auto tag_invoke(di::Tag< di::reflect >, di::InPlaceType< MouseCoordinate >)
Definition mouse.h:51
MouseCoordinate()=default
auto operator==(MouseCoordinate const &) const -> bool=default
constexpr auto y() const -> u32
Definition mouse.h:46
constexpr MouseCoordinate(u32 x, u32 y)
Definition mouse.h:43
constexpr auto x() const -> u32
Definition mouse.h:45
constexpr friend auto tag_invoke(di::Tag< di::reflect >, di::InPlaceType< MousePosition >)
Definition mouse.h:112
constexpr auto in_pixels_with_fallback(Size const &size) const -> MouseCoordinate
Definition mouse.h:79
auto operator==(MousePosition const &) const -> bool=default
constexpr auto translate(MouseCoordinate offset_in_cells, Size const &size) const -> MousePosition
Definition mouse.h:94
constexpr auto in_pixels() const -> di::Optional< MouseCoordinate >
Definition mouse.h:77
constexpr MousePosition(MouseCoordinate cells, di::Optional< MouseCoordinate > pixels={})
Definition mouse.h:73
static constexpr auto from_pixels(MouseCoordinate pixels, Size const &size) -> MousePosition
Definition mouse.h:62
constexpr auto in_cells() const -> MouseCoordinate
Definition mouse.h:76
Definition clipboard.h:10
MouseButton
Definition mouse.h:11
@ ScrollLeft
Definition mouse.h:18
@ HorizontalScrollButtons
Definition mouse.h:24
@ VerticalScrollButtons
Definition mouse.h:25
@ _11
Definition mouse.h:23
@ ScrollUp
Definition mouse.h:16
@ ScrollDown
Definition mouse.h:17
@ Middle
Definition mouse.h:14
@ ScrollButtons
Definition mouse.h:26
@ ScrollRight
Definition mouse.h:19
@ _10
Definition mouse.h:22
@ None
Definition direction.h:8
constexpr auto tag_invoke(di::Tag< di::reflect >, di::InPlaceType< ClipboardMode >)
Definition clipboard.h:21
@ Right
Definition key.h:70
@ Left
Definition key.h:69