aboutsummaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/guiConfirmRegistration.cpp17
-rw-r--r--src/gui/guiConfirmRegistration.h3
-rw-r--r--src/gui/guiFormSpecMenu.cpp59
-rw-r--r--src/gui/guiFormSpecMenu.h4
-rw-r--r--src/gui/guiKeyChangeMenu.cpp20
-rw-r--r--src/gui/guiKeyChangeMenu.h1
-rw-r--r--src/gui/guiPasswordChange.cpp19
-rw-r--r--src/gui/guiPasswordChange.h2
-rw-r--r--src/gui/guiPathSelectMenu.cpp3
-rw-r--r--src/gui/guiScrollContainer.cpp9
-rw-r--r--src/gui/guiVolumeChange.cpp22
-rw-r--r--src/gui/guiVolumeChange.h3
-rw-r--r--src/gui/mainmenumanager.h4
-rw-r--r--src/gui/modalMenu.cpp13
-rw-r--r--src/gui/modalMenu.h1
15 files changed, 34 insertions, 146 deletions
diff --git a/src/gui/guiConfirmRegistration.cpp b/src/gui/guiConfirmRegistration.cpp
index b8887a4af..c5aa9c85e 100644
--- a/src/gui/guiConfirmRegistration.cpp
+++ b/src/gui/guiConfirmRegistration.cpp
@@ -54,25 +54,10 @@ GUIConfirmRegistration::GUIConfirmRegistration(gui::IGUIEnvironment *env,
#endif
}
-GUIConfirmRegistration::~GUIConfirmRegistration()
-{
- removeChildren();
-}
-
-void GUIConfirmRegistration::removeChildren()
-{
- const core::list<gui::IGUIElement *> &children = getChildren();
- core::list<gui::IGUIElement *> children_copy;
- for (gui::IGUIElement *i : children)
- children_copy.push_back(i);
- for (gui::IGUIElement *i : children_copy)
- i->remove();
-}
-
void GUIConfirmRegistration::regenerateGui(v2u32 screensize)
{
acceptInput();
- removeChildren();
+ removeAllChildren();
/*
Calculate new sizes and positions
diff --git a/src/gui/guiConfirmRegistration.h b/src/gui/guiConfirmRegistration.h
index d8387201d..fb2157756 100644
--- a/src/gui/guiConfirmRegistration.h
+++ b/src/gui/guiConfirmRegistration.h
@@ -34,9 +34,6 @@ public:
s32 id, IMenuManager *menumgr, Client *client,
const std::string &playername, const std::string &password,
bool *aborted, ISimpleTextureSource *tsrc);
- ~GUIConfirmRegistration();
-
- void removeChildren();
/*
Remove and re-add (or reposition) stuff
*/
diff --git a/src/gui/guiFormSpecMenu.cpp b/src/gui/guiFormSpecMenu.cpp
index f3570ccaf..422d6da16 100644
--- a/src/gui/guiFormSpecMenu.cpp
+++ b/src/gui/guiFormSpecMenu.cpp
@@ -127,7 +127,8 @@ GUIFormSpecMenu::GUIFormSpecMenu(JoystickController *joystick,
GUIFormSpecMenu::~GUIFormSpecMenu()
{
- removeChildren();
+ removeAllChildren();
+ removeTooltip();
for (auto &table_it : m_tables)
table_it.second->drop();
@@ -174,14 +175,8 @@ void GUIFormSpecMenu::create(GUIFormSpecMenu *&cur_formspec, Client *client,
}
}
-void GUIFormSpecMenu::removeChildren()
+void GUIFormSpecMenu::removeTooltip()
{
- const core::list<gui::IGUIElement*> &children = getChildren();
-
- while (!children.empty()) {
- (*children.getLast())->remove();
- }
-
if (m_tooltip_element) {
m_tooltip_element->remove();
m_tooltip_element->drop();
@@ -199,16 +194,7 @@ void GUIFormSpecMenu::setInitialFocus()
// 5. first focusable (not statictext, not tabheader)
// 6. first child element
- core::list<gui::IGUIElement*> children = getChildren();
-
- // in case "children" contains any NULL elements, remove them
- for (core::list<gui::IGUIElement*>::Iterator it = children.begin();
- it != children.end();) {
- if (*it)
- ++it;
- else
- it = children.erase(it);
- }
+ const auto& children = getChildren();
// 1. first empty editbox
for (gui::IGUIElement *it : children) {
@@ -236,8 +222,7 @@ void GUIFormSpecMenu::setInitialFocus()
}
// 4. last button
- for (core::list<gui::IGUIElement*>::Iterator it = children.getLast();
- it != children.end(); --it) {
+ for (auto it = children.rbegin(); it != children.rend(); ++it) {
if ((*it)->getType() == gui::EGUIET_BUTTON) {
Environment->setFocus(*it);
return;
@@ -257,7 +242,7 @@ void GUIFormSpecMenu::setInitialFocus()
if (children.empty())
Environment->setFocus(this);
else
- Environment->setFocus(*(children.begin()));
+ Environment->setFocus(children.front());
}
GUITable* GUIFormSpecMenu::getTable(const std::string &tablename)
@@ -3045,7 +3030,8 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
}
// Remove children
- removeChildren();
+ removeAllChildren();
+ removeTooltip();
for (auto &table_it : m_tables)
table_it.second->drop();
@@ -3341,7 +3327,7 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
pos_offset = v2f32();
// used for formspec versions < 3
- core::list<IGUIElement *>::Iterator legacy_sort_start = Children.getLast();
+ std::list<IGUIElement *>::iterator legacy_sort_start = std::prev(Children.end()); // last element
if (enable_prepends) {
// Backup the coordinates so that prepends can use the coordinates of choice.
@@ -3356,7 +3342,7 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
// legacy sorting for formspec versions < 3
if (m_formspec_version >= 3)
// prepends do not need to be reordered
- legacy_sort_start = Children.getLast();
+ legacy_sort_start = std::prev(Children.end()); // last element
else if (version_backup >= 3)
// only prepends elements have to be reordered
legacySortElements(legacy_sort_start);
@@ -3437,7 +3423,7 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
}
}
-void GUIFormSpecMenu::legacySortElements(core::list<IGUIElement *>::Iterator from)
+void GUIFormSpecMenu::legacySortElements(std::list<IGUIElement *>::iterator from)
{
/*
Draw order for formspec_version <= 2:
@@ -3454,17 +3440,16 @@ void GUIFormSpecMenu::legacySortElements(core::list<IGUIElement *>::Iterator fro
if (from == Children.end())
from = Children.begin();
else
- from++;
+ ++from;
- core::list<IGUIElement *>::Iterator to = Children.end();
+ std::list<IGUIElement *>::iterator to = Children.end();
// 1: Copy into a sortable container
- std::vector<IGUIElement *> elements;
- for (auto it = from; it != to; ++it)
- elements.emplace_back(*it);
+ std::vector<IGUIElement *> elements(from, to);
// 2: Sort the container
std::stable_sort(elements.begin(), elements.end(),
[this] (const IGUIElement *a, const IGUIElement *b) -> bool {
+ // TODO: getSpecByID is a linear search. It should made O(1), or cached here.
const FieldSpec *spec_a = getSpecByID(a->getID());
const FieldSpec *spec_b = getSpecByID(b->getID());
return spec_a && spec_b &&
@@ -3472,10 +3457,7 @@ void GUIFormSpecMenu::legacySortElements(core::list<IGUIElement *>::Iterator fro
});
// 3: Re-assign the pointers
- for (auto e : elements) {
- *from = e;
- from++;
- }
+ reorderChildren(from, to, elements);
}
#ifdef __ANDROID__
@@ -3600,12 +3582,11 @@ void GUIFormSpecMenu::drawMenu()
/*
This is where all the drawing happens.
*/
- core::list<IGUIElement*>::Iterator it = Children.begin();
- for (; it != Children.end(); ++it)
- if ((*it)->isNotClipped() ||
+ for (auto child : Children)
+ if (child->isNotClipped() ||
AbsoluteClippingRect.isRectCollided(
- (*it)->getAbsolutePosition()))
- (*it)->draw();
+ child->getAbsolutePosition()))
+ child->draw();
for (gui::IGUIElement *e : m_clickthrough_elements)
e->setVisible(false);
diff --git a/src/gui/guiFormSpecMenu.h b/src/gui/guiFormSpecMenu.h
index 3fedb3b78..a584456db 100644
--- a/src/gui/guiFormSpecMenu.h
+++ b/src/gui/guiFormSpecMenu.h
@@ -212,7 +212,7 @@ public:
m_lockscreensize = basescreensize;
}
- void removeChildren();
+ void removeTooltip();
void setInitialFocus();
void setFocus(const std::string &elementname)
@@ -467,7 +467,7 @@ private:
* types were drawn before others.
* This function sorts the elements in the old order for backwards compatibility.
*/
- void legacySortElements(core::list<IGUIElement *>::Iterator from);
+ void legacySortElements(std::list<IGUIElement *>::iterator from);
int m_btn_height;
gui::IGUIFont *m_font = nullptr;
diff --git a/src/gui/guiKeyChangeMenu.cpp b/src/gui/guiKeyChangeMenu.cpp
index ada6280f6..021f5f0a9 100644
--- a/src/gui/guiKeyChangeMenu.cpp
+++ b/src/gui/guiKeyChangeMenu.cpp
@@ -93,7 +93,8 @@ GUIKeyChangeMenu::GUIKeyChangeMenu(gui::IGUIEnvironment* env,
GUIKeyChangeMenu::~GUIKeyChangeMenu()
{
- removeChildren();
+ removeAllChildren();
+ key_used_text = nullptr;
for (key_setting *ks : key_settings) {
delete[] ks->button_name;
@@ -102,23 +103,10 @@ GUIKeyChangeMenu::~GUIKeyChangeMenu()
key_settings.clear();
}
-void GUIKeyChangeMenu::removeChildren()
-{
- const core::list<gui::IGUIElement*> &children = getChildren();
- core::list<gui::IGUIElement*> children_copy;
- for (gui::IGUIElement*i : children) {
- children_copy.push_back(i);
- }
-
- for (gui::IGUIElement *i : children_copy) {
- i->remove();
- }
- key_used_text = nullptr;
-}
-
void GUIKeyChangeMenu::regenerateGui(v2u32 screensize)
{
- removeChildren();
+ removeAllChildren();
+ key_used_text = nullptr;
const float s = m_gui_scale;
DesiredRect = core::rect<s32>(
diff --git a/src/gui/guiKeyChangeMenu.h b/src/gui/guiKeyChangeMenu.h
index 1c0f40247..84a898774 100644
--- a/src/gui/guiKeyChangeMenu.h
+++ b/src/gui/guiKeyChangeMenu.h
@@ -46,7 +46,6 @@ public:
IMenuManager *menumgr, ISimpleTextureSource *tsrc);
~GUIKeyChangeMenu();
- void removeChildren();
/*
Remove and re-add (or reposition) stuff
*/
diff --git a/src/gui/guiPasswordChange.cpp b/src/gui/guiPasswordChange.cpp
index c983260f6..c39df176b 100644
--- a/src/gui/guiPasswordChange.cpp
+++ b/src/gui/guiPasswordChange.cpp
@@ -51,23 +51,6 @@ GUIPasswordChange::GUIPasswordChange(gui::IGUIEnvironment* env,
{
}
-GUIPasswordChange::~GUIPasswordChange()
-{
- removeChildren();
-}
-
-void GUIPasswordChange::removeChildren()
-{
- const core::list<gui::IGUIElement *> &children = getChildren();
- core::list<gui::IGUIElement *> children_copy;
- for (gui::IGUIElement *i : children) {
- children_copy.push_back(i);
- }
-
- for (gui::IGUIElement *i : children_copy) {
- i->remove();
- }
-}
void GUIPasswordChange::regenerateGui(v2u32 screensize)
{
/*
@@ -78,7 +61,7 @@ void GUIPasswordChange::regenerateGui(v2u32 screensize)
/*
Remove stuff
*/
- removeChildren();
+ removeAllChildren();
/*
Calculate new sizes and positions
diff --git a/src/gui/guiPasswordChange.h b/src/gui/guiPasswordChange.h
index 7141100c0..452702add 100644
--- a/src/gui/guiPasswordChange.h
+++ b/src/gui/guiPasswordChange.h
@@ -31,9 +31,7 @@ public:
GUIPasswordChange(gui::IGUIEnvironment *env, gui::IGUIElement *parent, s32 id,
IMenuManager *menumgr, Client *client,
ISimpleTextureSource *tsrc);
- ~GUIPasswordChange();
- void removeChildren();
/*
Remove and re-add (or reposition) stuff
*/
diff --git a/src/gui/guiPathSelectMenu.cpp b/src/gui/guiPathSelectMenu.cpp
index 489927a11..9c63e06b5 100644
--- a/src/gui/guiPathSelectMenu.cpp
+++ b/src/gui/guiPathSelectMenu.cpp
@@ -32,13 +32,12 @@ GUIFileSelectMenu::GUIFileSelectMenu(gui::IGUIEnvironment* env,
GUIFileSelectMenu::~GUIFileSelectMenu()
{
- removeChildren();
setlocale(LC_NUMERIC, "C");
}
void GUIFileSelectMenu::regenerateGui(v2u32 screensize)
{
- removeChildren();
+ removeAllChildren();
m_fileOpenDialog = 0;
core::dimension2du size(600 * m_gui_scale, 400 * m_gui_scale);
diff --git a/src/gui/guiScrollContainer.cpp b/src/gui/guiScrollContainer.cpp
index 0fe4c41bd..2d71f3453 100644
--- a/src/gui/guiScrollContainer.cpp
+++ b/src/gui/guiScrollContainer.cpp
@@ -59,12 +59,11 @@ bool GUIScrollContainer::OnEvent(const SEvent &event)
void GUIScrollContainer::draw()
{
if (isVisible()) {
- core::list<IGUIElement *>::Iterator it = Children.begin();
- for (; it != Children.end(); ++it)
- if ((*it)->isNotClipped() ||
+ for (auto child : Children)
+ if (child->isNotClipped() ||
AbsoluteClippingRect.isRectCollided(
- (*it)->getAbsolutePosition()))
- (*it)->draw();
+ child->getAbsolutePosition()))
+ child->draw();
}
}
diff --git a/src/gui/guiVolumeChange.cpp b/src/gui/guiVolumeChange.cpp
index 61ab758a1..0f6f43fe9 100644
--- a/src/gui/guiVolumeChange.cpp
+++ b/src/gui/guiVolumeChange.cpp
@@ -45,32 +45,12 @@ GUIVolumeChange::GUIVolumeChange(gui::IGUIEnvironment* env,
{
}
-GUIVolumeChange::~GUIVolumeChange()
-{
- removeChildren();
-}
-
-void GUIVolumeChange::removeChildren()
-{
- if (gui::IGUIElement *e = getElementFromId(ID_soundText))
- e->remove();
-
- if (gui::IGUIElement *e = getElementFromId(ID_soundExitButton))
- e->remove();
-
- if (gui::IGUIElement *e = getElementFromId(ID_soundSlider))
- e->remove();
-
- if (gui::IGUIElement *e = getElementFromId(ID_soundMuteButton))
- e->remove();
-}
-
void GUIVolumeChange::regenerateGui(v2u32 screensize)
{
/*
Remove stuff
*/
- removeChildren();
+ removeAllChildren();
/*
Calculate new sizes and positions
*/
diff --git a/src/gui/guiVolumeChange.h b/src/gui/guiVolumeChange.h
index 466e17f9d..ccdaca00b 100644
--- a/src/gui/guiVolumeChange.h
+++ b/src/gui/guiVolumeChange.h
@@ -31,9 +31,6 @@ public:
GUIVolumeChange(gui::IGUIEnvironment* env,
gui::IGUIElement* parent, s32 id,
IMenuManager *menumgr, ISimpleTextureSource *tsrc);
- ~GUIVolumeChange();
-
- void removeChildren();
/*
Remove and re-add (or reposition) stuff
*/
diff --git a/src/gui/mainmenumanager.h b/src/gui/mainmenumanager.h
index 102492255..76d357340 100644
--- a/src/gui/mainmenumanager.h
+++ b/src/gui/mainmenumanager.h
@@ -64,10 +64,6 @@ public:
// Remove all entries if there are duplicates
m_stack.remove(menu);
- /*core::list<GUIModalMenu*>::Iterator i = m_stack.getLast();
- assert(*i == menu);
- m_stack.erase(i);*/
-
if(!m_stack.empty())
m_stack.back()->setVisible(true);
}
diff --git a/src/gui/modalMenu.cpp b/src/gui/modalMenu.cpp
index 56a5d2cb9..d27f63d94 100644
--- a/src/gui/modalMenu.cpp
+++ b/src/gui/modalMenu.cpp
@@ -108,19 +108,6 @@ void GUIModalMenu::quitMenu()
#endif
}
-void GUIModalMenu::removeChildren()
-{
- const core::list<gui::IGUIElement *> &children = getChildren();
- core::list<gui::IGUIElement *> children_copy;
- for (gui::IGUIElement *i : children) {
- children_copy.push_back(i);
- }
-
- for (gui::IGUIElement *i : children_copy) {
- i->remove();
- }
-}
-
// clang-format off
bool GUIModalMenu::DoubleClickDetection(const SEvent &event)
{
diff --git a/src/gui/modalMenu.h b/src/gui/modalMenu.h
index 06e78f06b..e37c41533 100644
--- a/src/gui/modalMenu.h
+++ b/src/gui/modalMenu.h
@@ -47,7 +47,6 @@ public:
bool canTakeFocus(gui::IGUIElement *e);
void draw();
void quitMenu();
- void removeChildren();
virtual void regenerateGui(v2u32 screensize) = 0;
virtual void drawMenu() = 0;