diff --git a/example-src/example.cpp b/example-src/example.cpp index 07bf027..fece8df 100644 --- a/example-src/example.cpp +++ b/example-src/example.cpp @@ -57,7 +57,7 @@ static ui::Var text({ "nonya" }, "Editable Text", 1); class TestWindow : public CBaseWindow { public: TestWindow(IWidget* parent) - : CBaseWindow("root_test", parent) { + : CBaseWindow(parent, "root_test") { this->always_visible = false; this->hover = false; SetMaxSize(1270, 1000); diff --git a/include/libpdraw/gui/widgets/basewidget.hpp b/include/libpdraw/gui/widgets/basewidget.hpp index 835f201..242936f 100644 --- a/include/libpdraw/gui/widgets/basewidget.hpp +++ b/include/libpdraw/gui/widgets/basewidget.hpp @@ -58,11 +58,7 @@ public: inline virtual void Show() { this->visible = true; } inline virtual void Hide() { this->visible = false; } - inline virtual bool IsVisible() { - if (GetParent()) - return GetParent()->IsVisible() && this->visible; - return this->visible; - } + virtual bool IsVisible(); virtual bool IsHovered(); virtual bool IsFocused(); diff --git a/include/libpdraw/gui/widgets/basewindow.hpp b/include/libpdraw/gui/widgets/basewindow.hpp index e3667fa..437beeb 100644 --- a/include/libpdraw/gui/widgets/basewindow.hpp +++ b/include/libpdraw/gui/widgets/basewindow.hpp @@ -23,7 +23,7 @@ class CBaseWindow : public CBaseContainer { public: - inline CBaseWindow(std::string name = "unnamed", IWidget* parent = nullptr) + inline CBaseWindow(IWidget* parent, std::string name = "unnamed") : CBaseContainer(name, parent) { } inline virtual ~CBaseWindow() {}; diff --git a/src/gui/canvas.cpp b/src/gui/canvas.cpp index 67ad369..56de149 100644 --- a/src/gui/canvas.cpp +++ b/src/gui/canvas.cpp @@ -41,7 +41,7 @@ ui::Var gui_draw_bounds({ "Gui", "Debug" }, "Draw Bounds", false); ui::Var gui_visible({ "Gui" }, "Visible", true); Canvas::Canvas() - : CBaseWindow("root") { } + : CBaseWindow(nullptr, "root") { } // Crashes associated with no set root in globals void Canvas::Setup() { diff --git a/src/gui/tabbedmenu/menuwindow.cpp b/src/gui/tabbedmenu/menuwindow.cpp index 27f06ca..af08eec 100644 --- a/src/gui/tabbedmenu/menuwindow.cpp +++ b/src/gui/tabbedmenu/menuwindow.cpp @@ -15,7 +15,7 @@ #include "gui/widgets/titlebar.hpp" CMenuWindow::CMenuWindow(std::string name, IWidget* parent) - : CBaseWindow(name, parent) { + : CBaseWindow(parent, name) { m_pList = new CMenuList("list", this); AddChild(m_pList); m_pActiveTab = 0; diff --git a/src/gui/widgets/basewidget.cpp b/src/gui/widgets/basewidget.cpp index 4014956..f24c56f 100644 --- a/src/gui/widgets/basewidget.cpp +++ b/src/gui/widgets/basewidget.cpp @@ -78,13 +78,15 @@ std::pair CBaseWidget::AbsolutePosition() { return result; } +bool CBaseWidget::IsVisible() { + return this->visible && (!this->GetParent() || GetParent()->IsVisible()); +} + Canvas* CBaseWidget::GetCanvas() { - auto* parent = GetParent(); - if (parent) { - if (auto* canvas = parent->GetCanvas()) - return canvas; - } auto* ret = dynamic_cast(this); + if (ret) + return ret; + ret = this->GetParent()->GetCanvas(); assert(ret); return ret; } diff --git a/src/gui/widgets/basewindow.cpp b/src/gui/widgets/basewindow.cpp index d9bc6c9..2ca0e4e 100644 --- a/src/gui/widgets/basewindow.cpp +++ b/src/gui/widgets/basewindow.cpp @@ -41,9 +41,8 @@ void CBaseWindow::MoveChildren() { if (c->GetPositionMode() != FLOATING) my += (size.second + 2); } - if (GetParent()) { + if (GetParent()) SetSize(mx + 4, my + 2); - } } void CBaseWindow::OnFocusGain() { diff --git a/src/gui/widgets/dropdownlist.cpp b/src/gui/widgets/dropdownlist.cpp index 3db30d0..94824f3 100644 --- a/src/gui/widgets/dropdownlist.cpp +++ b/src/gui/widgets/dropdownlist.cpp @@ -26,7 +26,7 @@ #include "gui/canvas.hpp" CDropdownList::CDropdownList(std::string name, CDropdown* menu, int offset) - : CBaseContainer(name, nullptr) { + : CBaseContainer(name, menu) { m_pMenu = menu; Hide(); SetZIndex(5);