From b1ba1c2975eb0716fcdf6f280995cf0b8e18c9b1 Mon Sep 17 00:00:00 2001 From: IlyaShurupov Date: Fri, 18 Oct 2024 00:21:57 +0300 Subject: [PATCH] Widget Fixes --- TODO | 31 +++++++++++------- WidgetsNew/examples/Example.cpp | 32 ++++++++++++------- .../private/layouts/ScrollableLayout.cpp | 2 +- WidgetsNew/private/widgets/FloatingWidget.cpp | 23 +++++++++++++ WidgetsNew/public/Layout.hpp | 2 +- .../public/layouts/ScrollableLayout.hpp | 4 ++- WidgetsNew/public/widgets/FloatingWidget.hpp | 23 ++++--------- 7 files changed, 75 insertions(+), 42 deletions(-) diff --git a/TODO b/TODO index d453905..1de4009 100644 --- a/TODO +++ b/TODO @@ -1,17 +1,26 @@ -Widgets-New: - Make visual parameters static - Make visual parameters configurable - Make get-areas fetch cache and not animation objects +Widgets: + Optimize: + Make visual parameters static + Make get-areas fetch cache and not animation objects - Scrolling in basic layout - Collapsing menu + New Widgets: + Collapsing menu + Sliders + Check Boxes + Drop-Downs + Toaster notifications + Confirmations Popups + Hover menus + Tool-tips - Add Widgets: - popups, drop-downs, tool-tips - list menu + Implement: + Make visual parameters configurable + Add UI scaling + Add Theming - Add UI scaling - Add Theming + Refactor: + Refactor Update Manager + change Widget::clampMinMax function to include child enclosure Sketch3D: diff --git a/WidgetsNew/examples/Example.cpp b/WidgetsNew/examples/Example.cpp index dee5608..0871dfe 100644 --- a/WidgetsNew/examples/Example.cpp +++ b/WidgetsNew/examples/Example.cpp @@ -4,26 +4,36 @@ #include "RootWidget.hpp" #include "FloatingWidget.hpp" #include "DockWidget.hpp" -#include "ScrollableWidget.hpp" #include "ScrollableLayout.hpp" using namespace tp; -/* - * adjust child widgets in the layout view - * make scrollable area - * change Widget::clampMinMax function to include child enclosure - * refactor all sizing in Widget -> move to separate files - * refactor root widget -> reorganize code -*/ - - class WidgetApplication : public Application { public: WidgetApplication() { - exampleScrolling(); + exampleAll(); + } + + void exampleAll() { + static DockWidget dock; + static LabelWidget centralWidget; + static FloatingMenu menus[4]; + static FloatingMenu nestedMenus[4]; + static FloatingMenu buttons[10]; + + dock.setCenterWidget(¢ralWidget); + + for (auto& menu : menus) { + dock.addChild(&menu); + } + + for (auto& menu : nestedMenus) { + menus[0].addToMenu(&menu); + } + + mRootWidget.setRootWidget(&dock); } void exampleScrolling() { diff --git a/WidgetsNew/private/layouts/ScrollableLayout.cpp b/WidgetsNew/private/layouts/ScrollableLayout.cpp index b848952..43f9c39 100644 --- a/WidgetsNew/private/layouts/ScrollableLayout.cpp +++ b/WidgetsNew/private/layouts/ScrollableLayout.cpp @@ -16,7 +16,7 @@ void ScrollableLayout::updateLayout(bool vertical) { if (!scroller || !content) return; - updateWidgetRects(getArea(), content, scroller); + updateWidgetRects(getArea().relative(), content, scroller); } void ScrollableLayout::updateWidgetRects(const RectF& area, Widget* content, ScrollableBarWidget* scroller) const { diff --git a/WidgetsNew/private/widgets/FloatingWidget.cpp b/WidgetsNew/private/widgets/FloatingWidget.cpp index 4687ab7..184867a 100644 --- a/WidgetsNew/private/widgets/FloatingWidget.cpp +++ b/WidgetsNew/private/widgets/FloatingWidget.cpp @@ -1,4 +1,5 @@ #include "FloatingWidget.hpp" +#include "ScrollableLayout.hpp" using namespace tp; @@ -47,3 +48,25 @@ const FloatingLayout* FloatingWidget::layout() const { return dynamic_cast(Widget::getLayout()); } +FloatingMenu::FloatingMenu() : FloatingWidget() { + setDebug("float menu", { 0.0, 0.9, 0.1, 0.7 }); + + // addChild(&mMenuLayout); + + addChild(&mHeader); + addChild(&mBodyLayout); + + mHeader.setText("Menu"); + + mHeader.setSizePolicy(SizePolicy::Expanding, SizePolicy::Minimal); + mBodyLayout.setSizePolicy(SizePolicy::Expanding, SizePolicy::Expanding); + + mBodyLayout.setLayout(new ScrollableLayout(&mBodyLayout)); + mBodyLayout.addChild(&mScrollBar); + mBodyLayout.addChild(&mContentWidget); + + mContentWidget.setSizePolicy(SizePolicy::Minimal, SizePolicy::Minimal); + + // getLayout()->setLayoutPolicy(LayoutPolicy::Vertical); + // mBodyLayout.getLayout()->setLayoutPolicy(LayoutPolicy::Vertical); +} \ No newline at end of file diff --git a/WidgetsNew/public/Layout.hpp b/WidgetsNew/public/Layout.hpp index 3bb662a..a0c314d 100644 --- a/WidgetsNew/public/Layout.hpp +++ b/WidgetsNew/public/Layout.hpp @@ -59,7 +59,7 @@ namespace tp { Widget* mWidget = nullptr; protected: - Vec2 mSizePolicy = { SizePolicy::Fixed, SizePolicy::Minimal }; + Vec2 mSizePolicy = { SizePolicy::Fixed, SizePolicy::Fixed }; Vec2F mMinSize = { 50, 50 }; Vec2F mMaxSize = { FLT_MAX / 2, FLT_MAX / 2 }; }; diff --git a/WidgetsNew/public/layouts/ScrollableLayout.hpp b/WidgetsNew/public/layouts/ScrollableLayout.hpp index d15d3b7..329131e 100644 --- a/WidgetsNew/public/layouts/ScrollableLayout.hpp +++ b/WidgetsNew/public/layouts/ScrollableLayout.hpp @@ -8,7 +8,9 @@ namespace tp { class ScrollableLayout : public WidgetLayout { public: explicit ScrollableLayout(Widget* widget) : - WidgetLayout(widget) {} + WidgetLayout(widget) { + setSizePolicy(SizePolicy::Expanding, SizePolicy::Expanding); + } void updateLayout(bool vertical) override; [[nodiscard]] RectF getAvailableChildArea() const override; diff --git a/WidgetsNew/public/widgets/FloatingWidget.hpp b/WidgetsNew/public/widgets/FloatingWidget.hpp index c32dd2e..5b19f02 100644 --- a/WidgetsNew/public/widgets/FloatingWidget.hpp +++ b/WidgetsNew/public/widgets/FloatingWidget.hpp @@ -2,6 +2,7 @@ #include "SimpleWidgets.hpp" #include "FloatingLayout.hpp" +#include "ScrollableWidget.hpp" namespace tp { class FloatingWidget : public Widget { @@ -30,32 +31,20 @@ namespace tp { class FloatingMenu : public FloatingWidget { public: - FloatingMenu() : FloatingWidget() { - setDebug("float menu", { 0.0, 0.9, 0.1, 0.7 }); - - // addChild(&mMenuLayout); - - addChild(&mHeader); - addChild(&mBodyLayout); - - mHeader.setText("Menu"); - - mHeader.setSizePolicy(SizePolicy::Expanding, SizePolicy::Minimal); - mBodyLayout.setSizePolicy(SizePolicy::Expanding, SizePolicy::Expanding); - - // getLayout()->setLayoutPolicy(LayoutPolicy::Vertical); - // mBodyLayout.getLayout()->setLayoutPolicy(LayoutPolicy::Vertical); - } + FloatingMenu(); public: void addToMenu(Widget* widget) { widget->setSizePolicy(SizePolicy::Expanding, SizePolicy::Minimal); - mBodyLayout.addChild(widget); + mContentWidget.addChild(widget); } private: // VerticalLayout mMenuLayout; Widget mBodyLayout; + Widget mContentWidget; + ScrollableBarWidget mScrollBar; + LabelWidget mHeader; // ButtonWidget mTestButton;