-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathBearUIObject.cpp
More file actions
83 lines (74 loc) · 1.71 KB
/
BearUIObject.cpp
File metadata and controls
83 lines (74 loc) · 1.71 KB
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
#include "BearUI.hpp"
BearUIObject::BearUIObject()
{
bOpen = true;
}
BearUIObject::~BearUIObject()
{
for (BearUIObject*obj:m_Objects)
{
BEAR_CHECK(obj->StateFlags.test((uint32)EStateFlags::Use));
obj->StateFlags.set((uint32)EStateFlags::Use, false);
if (!obj->StateFlags.test((uint32)EStateFlags::NoDelete))
{
bear_delete(obj);
}
}
}
void BearUIObject::Unload()
{
for (BearUIObject* obj : m_Objects)
{
obj->Unload();
}
}
void BearUIObject::Load()
{
for (BearUIObject* obj : m_Objects)
{
obj->Load();
}
}
void BearUIObject::Draw()
{
for (BearUIObject* obj : m_Objects)
{
obj->Draw();
}
}
void BearUIObject::Ñleanup()
{
for (size_t i = m_Objects.size(); i > 0; i--)
{
if (m_Objects[i - 1]->IsClosed()&& m_Objects[i - 1]->StateFlags.test((uint32)EStateFlags::WhenClosingDeleteIt))
{
if (!m_Objects[i - 1]->StateFlags.test((uint32)EStateFlags::NoDelete))
{
bear_delete(m_Objects[i - 1]);
}
m_Objects.erase(m_Objects.begin() + (i - 1));
i = m_Objects.size();
if (i == 0)return;
}
}
for (BearUIObject* obj : m_Objects)
{
obj->Ñleanup();
}
}
void BearUIObject::Push(BearUIObject* obj, bool auto_delete)
{
BEAR_CHECK(obj != this);
BEAR_CHECK(!obj->StateFlags.test((uint32)EStateFlags::Use));
obj->StateFlags.set( true, (uint32)EStateFlags::Use);
obj->StateFlags.set( !auto_delete, (uint32)EStateFlags::NoDelete);
m_Objects.push_back(obj);
}
void BearUIObject::Pop(BearUIObject* obj)
{
auto Item = bear_find_if(m_Objects.begin(), m_Objects.end(), [obj](BearUIObject* right) {return right == obj; });
if (Item == m_Objects.end())return;
BEAR_CHECK(!obj->StateFlags.test((uint32)EStateFlags::Use));
obj->StateFlags.set(false, (uint32)EStateFlags::Use);
m_Objects.erase(Item);
}