-
Notifications
You must be signed in to change notification settings - Fork 0
/
keybind.cpp
102 lines (82 loc) · 5.17 KB
/
keybind.cpp
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include "includes.h"
const std::string keynames[] = {
"", XOR("mouse1"), XOR("mouse2"), XOR("cancel"), XOR("mouse3"), XOR("mouse4"), XOR("mouse5"), XOR("[7]"),
XOR("backspace"), XOR("tab"), XOR("[10]"), XOR("[11]"), XOR("num 5"), XOR("enter"), XOR("[14]"), XOR("[15]"), XOR("shift"),
XOR("ctrl"), XOR("alt"), XOR("[19]"), XOR("capslock"), XOR("[21]"), XOR("[22]"), XOR("[23]"), XOR("[24]"), XOR("[25]"),
XOR("[26]"), XOR("esc"), XOR("[28]"), XOR("[29]"), XOR("[30]"), XOR("[31]"), XOR("space"), XOR("pgup"), XOR("pgdown"), XOR("end"),
XOR("home"), XOR("left"), XOR("up"), XOR("right"), XOR("down"), XOR("[41]"), XOR("[42]"), XOR("[43]"), XOR("[44]"), XOR("insert"),
XOR("delete"), XOR("[47]"), XOR("0"), XOR("1"), XOR("2"), XOR("3"), XOR("4"), XOR("5"), XOR("6"), XOR("7"), XOR("8"), XOR("9"),
XOR("[58]"), XOR("[59]"), XOR("[60]"), XOR("[61]"), XOR("[62]"), XOR("[63]"), XOR("[64]"), XOR("a"), XOR("b"), XOR("c"), XOR("d"),
XOR("e"), XOR("f"), XOR("g"), XOR("h"), XOR("i"), XOR("j"), XOR("k"), XOR("l"), XOR("m"), XOR("n"), XOR("o"), XOR("p"), XOR("q"),
XOR("r"), XOR("s"), XOR("t"), XOR("u"), XOR("v"), XOR("w"), XOR("x"), XOR("y"), XOR("z"), XOR("left win"), XOR("right win"),
XOR("application"), XOR("[94]"), XOR("[95]"), XOR("num 0"), XOR("num 1"), XOR("num 2"), XOR("num 3"), XOR("num 4"), XOR("num 5"),
XOR("num 6"), XOR("num 7"), XOR("num 8"), XOR("num 9"), XOR("num mult"), XOR("num plus"), XOR("[108]"), XOR("num sub"), XOR("num decimal"),
XOR("num divide"), XOR("f1"), XOR("f2"), XOR("f3"), XOR("f4"), XOR("f5"), XOR("f6"), XOR("f7"), XOR("f8"), XOR("f9"), XOR("f10"),
XOR("f11"), XOR("f12"), XOR("f13"), XOR("f14"), XOR("f15"), XOR("f16"), XOR("f17"), XOR("f18"), XOR("f19"), XOR("f20"), XOR("f21"),
XOR("f22"), XOR("f23"), XOR("f24"), XOR("[136]"), XOR("[137]"), XOR("[138]"), XOR("[139]"), XOR("[140]"), XOR("[141]"), XOR("[142]"),
XOR("[143]"), XOR("num lock"), XOR("break"), XOR("[146]"), XOR("[147]"), XOR("[148]"), XOR("[149]"), XOR("[150]"), XOR("[151]"), XOR("[152]"),
XOR("[153]"), XOR("[154]"), XOR("[155]"), XOR("[156]"), XOR("[157]"), XOR("[158]"), XOR("[159]"), XOR("[160]"), XOR("[161]"), XOR("ctrl"),
XOR("ctrl"), XOR("alt"), XOR("alt"), XOR("[166]"), XOR("[167]"), XOR("[168]"), XOR("[169]"), XOR("[170]"), XOR("[171]"), XOR("m"), XOR("d"),
XOR("c"), XOR("b"), XOR("p"), XOR("q"), XOR("j"), XOR("g"), XOR("[180]"), XOR("[181]"), XOR("[182]"), XOR("f"), XOR("[184]"), XOR("[185]"),
XOR(";"), XOR("="), XOR(" ),"), XOR("-"), XOR("."), XOR("/"), XOR("grave"), XOR("[193]"), XOR("[194]"), XOR("[195]"), XOR("[196]"),
XOR("[197]"), XOR("[198]"), XOR("[199]"), XOR("[200]"), XOR("[201]"), XOR("[202]"), XOR("[203]"), XOR("[204]"), XOR("[205]"), XOR("[206]"),
XOR("[207]"), XOR("[208]"), XOR("[209]"), XOR("[210]"), XOR("[211]"), XOR("[212]"), XOR("[213]"), XOR("[214]"), XOR("[215]"), XOR("[216]"),
XOR("[217]"), XOR("[218]"), XOR("["), XOR("\\"), XOR("]"), XOR("[222]"), XOR("[223]"), XOR("[224]"), XOR("[225]"), XOR("\\"), XOR("[227]"),
XOR("[228]"), XOR("[229]"), XOR("[230]"), XOR("[231]"), XOR("[232]"), XOR("[233]"), XOR("right win"), XOR("[235]"), XOR("[236]"), XOR("[237]"),
XOR("[238]"), XOR("[239]"), XOR("[240]"), XOR("left win"), XOR("[242]"), XOR("[243]"), XOR("[244]"), XOR("[245]"), XOR("[246]"), XOR("[247]"),
XOR("[248]"), XOR("application"), XOR("[250]"), XOR("[251]"), XOR("[252]"), XOR("[253]")
};;
void Keybind::draw() {
Rect area{ m_parent->GetElementsRect() };
Point p{ area.x + m_pos.x, area.y + m_pos.y };
// get gui color.
Color color = g_gui.m_color;
color.a() = m_parent->m_alpha;
// draw label.
render::menu.string(p.x + KEYBIND_X_OFFSET, p.y - 2, { 255, 255, 255, 180 }, m_label);
// box outline.
render::rect(p.x + KEYBIND_X_OFFSET, p.y + 15, m_w - KEYBIND_X_OFFSET, KEYBIND_BOX_HEIGHT, { 0, 0, 0, m_parent->m_alpha });
// inner blob
// todo; gradient?
render::rect_filled(p.x + KEYBIND_X_OFFSET + 1, p.y + 15 + 1, m_w - KEYBIND_X_OFFSET - 2, KEYBIND_BOX_HEIGHT - 2, { 41, 41, 41, m_parent->m_alpha });
// todo; animate with '...'
if (m_set)
render::menu.string(p.x + KEYBIND_X_OFFSET + KEYBIND_ITEM_X_OFFSET, p.y + 15 + 4, color, XOR("enter keybind"));
// we have a key assigned.
else if (m_key >= 0 && m_key <= 0xFE)
render::menu.string(p.x + KEYBIND_X_OFFSET + KEYBIND_ITEM_X_OFFSET, p.y + 15 + 4, { 152, 152, 152, m_parent->m_alpha }, keynames[m_key]);
}
void Keybind::think() {
// we want to set a key.
if (m_set) {
// iterate all keystates.
for (int i{}; i <= 0xFE; ++i) {
// find pressed key.
if (g_input.GetKeyPress(i)) {
// escape is our wildcard.
if (i == VK_ESCAPE) {
m_key = -1;
m_set = false;
if (m_callback)
m_callback();
return;
}
m_key = i;
m_set = false;
m_old_set = true;
if (m_callback)
m_callback();
return;
}
}
}
else m_old_set = false;
}
void Keybind::click() {
Rect area{ m_parent->GetElementsRect() };
Point p{ area.x + m_pos.x, area.y + m_pos.y };
// area where user has to click.
Rect bind = { p.x + KEYBIND_X_OFFSET, p.y + 15, m_w - KEYBIND_X_OFFSET, KEYBIND_BOX_HEIGHT };
if (!m_set && !m_old_set && g_input.IsCursorInRect(bind))
m_set = true;
}