-
-
Notifications
You must be signed in to change notification settings - Fork 136
/
Copy pathfuncs.h
79 lines (61 loc) · 1.76 KB
/
funcs.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#pragma once
#include <karm-app/inputs.h>
#include "node.h"
namespace Karm::Ui {
// MARK: Utilities -------------------------------------------------------------
template <typename E, typename... Args>
inline void event(Node& n, Args&&... args) {
auto e = App::makeEvent<E>(std::forward<Args>(args)...);
n.event(*e);
}
template <typename E, typename... Args>
inline void bubble(Node& n, Args&&... args) {
auto e = App::makeEvent<E>(std::forward<Args>(args)...);
n.bubble(*e);
}
template <typename E, typename... Args>
inline auto bindEvent(Args&&... args) {
return [args...](Node& n) {
event<E>(n, args...);
};
}
template <typename E, typename... Args>
inline auto bindBubble(Args&&... args) {
return [args...](Node& n) {
bubble<E>(n, args...);
};
}
template <typename E, typename... Args>
inline Opt<Func<void(Node&)>> bindEventIf(bool cond, Args&&... args) {
if (not cond)
return NONE;
return bindEvent<E>(args...);
}
template <typename E, typename... Args>
inline Opt<Func<void(Node&)>> bindBubbleIf(bool cond, Args&&... args) {
if (not cond)
return NONE;
return bindBubble<E>(args...);
}
// MARK: Helpers ---------------------------------------------------------------
inline void shouldRepaint(Node& n) {
bubble<Node::PaintEvent>(n, n.bound());
}
inline void shouldRepaint(Node& n, Math::Recti bound) {
bubble<Node::PaintEvent>(n, bound);
}
inline void shouldLayout(Node& n) {
bubble<Node::LayoutEvent>(n);
}
inline void shouldAnimate(Node& n) {
bubble<Node::AnimateEvent>(n, .0);
}
inline void mouseLeave(Node& n) {
event<App::MouseLeaveEvent>(n);
}
inline void mouseLeave(Children& children) {
for (auto& c : children) {
mouseLeave(*c);
}
}
} // namespace Karm::Ui