-
Notifications
You must be signed in to change notification settings - Fork 29
/
Copy pathGuiArea.cpp
88 lines (67 loc) · 2.64 KB
/
GuiArea.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
////////////////////////////////////////////////////////////////////////////////////////////////////
// This file is part of CosmoScout VR //
////////////////////////////////////////////////////////////////////////////////////////////////////
// SPDX-FileCopyrightText: German Aerospace Center (DLR) <[email protected]>
// SPDX-License-Identifier: MIT
#include "GuiArea.hpp"
#include "GuiItem.hpp"
#include <algorithm>
#if defined(_WIN32) && defined(min)
#undef min
#endif
namespace cs::gui {
////////////////////////////////////////////////////////////////////////////////////////////////////
void GuiArea::addItem(GuiItem* item, unsigned int index) {
index = std::min(index, static_cast<unsigned int>(mItems.size()));
mItems.insert(mItems.begin() + index, item);
item->onAreaResize(getWidth(), getHeight());
}
////////////////////////////////////////////////////////////////////////////////////////////////////
void GuiArea::removeItem(GuiItem* item) {
for (auto it(mItems.begin()); it != mItems.end(); ++it) {
if (*it == item) {
mItems.erase(it);
return;
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
void GuiArea::removeItem(unsigned int index) {
removeItem(getItem(index));
}
////////////////////////////////////////////////////////////////////////////////////////////////////
GuiItem* GuiArea::getItem(unsigned int index) {
if (index >= mItems.size()) {
return nullptr;
}
return mItems.at(index);
}
////////////////////////////////////////////////////////////////////////////////////////////////////
GuiItem* GuiArea::getItemAt(
int areaX, int areaY, bool checkAlpha, bool excludeNoninteractive, bool excludeDisabled) {
for (auto const& item : mItems) {
if ((item->getIsInteractive() || !excludeNoninteractive) &&
(item->getIsEnabled() || !excludeDisabled)) {
int x{};
int y{};
if (item->calculateMousePosition(areaX, areaY, x, y)) {
if (!checkAlpha || item->getAlpha(x, y) > 0) {
return item;
}
}
}
}
return nullptr;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
std::vector<GuiItem*> const& GuiArea::getItems() const {
return mItems;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
void GuiArea::updateItems() {
for (auto&& item : mItems) {
item->onAreaResize(getWidth(), getHeight());
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
} // namespace cs::gui