blob: 36d1d1a5ba569544153e3a580b754e9d3151d9ce (
plain)
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
|
#include "Menu.hpp"
namespace cgeditor {
Menu::Menu(Status *s) : Component(s), WasOpen(false) {
entries.push_back("Delete from here");
entries.push_back("Promote");
entries.push_back("Set as main line");
}
void Menu::Refresh() {
if (WasOpen && (status->LeftClick || status->RightClick)) {
char i = 0;
for (Element &e : elements) {
if (e.IsOver(status->MouseX, status->MouseY)) {
if (i == 0) {
status->Events.push_back({Event::Type::Delete,status->SelectedMove});
} else if (i == 1) {
status->Events.push_back({Event::Type::Promote,status->SelectedMove});
} else if (i == 2) {
status->Events.push_back({Event::Type::SetAsMainline,status->SelectedMove});
}
}
i++;
}
status->IsMenuOpen = false;
WasOpen = false;
elements.clear();
return;
}
elements.clear();
// Draw menu backward to avoid getting out of the canvas
bool backwardY =
(status->MouseY + status->MenuItemHeight * entries.size()) >=
status->CanvasHeight;
bool backwardX =
(status->MouseX + status->MenuItemWidth) >= status->CanvasWidth;
if (status->IsMenuOpen) {
char i = 0;
for (std::string &en : entries) {
Element e;
e.prop=Property::Text|Property::Menuitem;
e.text = en;
if (backwardX) {
e.x = (status->MouseX - status->MenuItemWidth);
} else {
e.x = status->MouseX;
}
if (backwardY) {
e.y = (status->MouseY - status->MenuItemHeight) -
i * status->MenuItemHeight;
} else {
e.y = status->MouseY + i * status->MenuItemHeight;
}
e.width = status->MenuItemWidth;
e.height = status->MenuItemHeight;
elements.push_back(e);
i++;
}
WasOpen = true;
}
}
} // namespace cgeditor
|