Widget Fixes

This commit is contained in:
IlyaShurupov 2024-10-18 00:21:57 +03:00 committed by Ilya Shurupov
parent 8c4ba37e59
commit b1ba1c2975
7 changed files with 75 additions and 42 deletions

31
TODO
View file

@ -1,17 +1,26 @@
Widgets-New: Widgets:
Make visual parameters static Optimize:
Make visual parameters configurable Make visual parameters static
Make get-areas fetch cache and not animation objects Make get-areas fetch cache and not animation objects
Scrolling in basic layout New Widgets:
Collapsing menu Collapsing menu
Sliders
Check Boxes
Drop-Downs
Toaster notifications
Confirmations Popups
Hover menus
Tool-tips
Add Widgets: Implement:
popups, drop-downs, tool-tips Make visual parameters configurable
list menu Add UI scaling
Add Theming
Add UI scaling Refactor:
Add Theming Refactor Update Manager
change Widget::clampMinMax function to include child enclosure
Sketch3D: Sketch3D:

View file

@ -4,26 +4,36 @@
#include "RootWidget.hpp" #include "RootWidget.hpp"
#include "FloatingWidget.hpp" #include "FloatingWidget.hpp"
#include "DockWidget.hpp" #include "DockWidget.hpp"
#include "ScrollableWidget.hpp"
#include "ScrollableLayout.hpp" #include "ScrollableLayout.hpp"
using namespace tp; 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 { class WidgetApplication : public Application {
public: public:
WidgetApplication() { 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(&centralWidget);
for (auto& menu : menus) {
dock.addChild(&menu);
}
for (auto& menu : nestedMenus) {
menus[0].addToMenu(&menu);
}
mRootWidget.setRootWidget(&dock);
} }
void exampleScrolling() { void exampleScrolling() {

View file

@ -16,7 +16,7 @@ void ScrollableLayout::updateLayout(bool vertical) {
if (!scroller || !content) return; if (!scroller || !content) return;
updateWidgetRects(getArea(), content, scroller); updateWidgetRects(getArea().relative(), content, scroller);
} }
void ScrollableLayout::updateWidgetRects(const RectF& area, Widget* content, ScrollableBarWidget* scroller) const { void ScrollableLayout::updateWidgetRects(const RectF& area, Widget* content, ScrollableBarWidget* scroller) const {

View file

@ -1,4 +1,5 @@
#include "FloatingWidget.hpp" #include "FloatingWidget.hpp"
#include "ScrollableLayout.hpp"
using namespace tp; using namespace tp;
@ -47,3 +48,25 @@ const FloatingLayout* FloatingWidget::layout() const {
return dynamic_cast<const FloatingLayout*>(Widget::getLayout()); return dynamic_cast<const FloatingLayout*>(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);
}

View file

@ -59,7 +59,7 @@ namespace tp {
Widget* mWidget = nullptr; Widget* mWidget = nullptr;
protected: protected:
Vec2<SizePolicy> mSizePolicy = { SizePolicy::Fixed, SizePolicy::Minimal }; Vec2<SizePolicy> mSizePolicy = { SizePolicy::Fixed, SizePolicy::Fixed };
Vec2F mMinSize = { 50, 50 }; Vec2F mMinSize = { 50, 50 };
Vec2F mMaxSize = { FLT_MAX / 2, FLT_MAX / 2 }; Vec2F mMaxSize = { FLT_MAX / 2, FLT_MAX / 2 };
}; };

View file

@ -8,7 +8,9 @@ namespace tp {
class ScrollableLayout : public WidgetLayout { class ScrollableLayout : public WidgetLayout {
public: public:
explicit ScrollableLayout(Widget* widget) : explicit ScrollableLayout(Widget* widget) :
WidgetLayout(widget) {} WidgetLayout(widget) {
setSizePolicy(SizePolicy::Expanding, SizePolicy::Expanding);
}
void updateLayout(bool vertical) override; void updateLayout(bool vertical) override;
[[nodiscard]] RectF getAvailableChildArea() const override; [[nodiscard]] RectF getAvailableChildArea() const override;

View file

@ -2,6 +2,7 @@
#include "SimpleWidgets.hpp" #include "SimpleWidgets.hpp"
#include "FloatingLayout.hpp" #include "FloatingLayout.hpp"
#include "ScrollableWidget.hpp"
namespace tp { namespace tp {
class FloatingWidget : public Widget { class FloatingWidget : public Widget {
@ -30,32 +31,20 @@ namespace tp {
class FloatingMenu : public FloatingWidget { class FloatingMenu : public FloatingWidget {
public: public:
FloatingMenu() : FloatingWidget() { FloatingMenu();
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);
}
public: public:
void addToMenu(Widget* widget) { void addToMenu(Widget* widget) {
widget->setSizePolicy(SizePolicy::Expanding, SizePolicy::Minimal); widget->setSizePolicy(SizePolicy::Expanding, SizePolicy::Minimal);
mBodyLayout.addChild(widget); mContentWidget.addChild(widget);
} }
private: private:
// VerticalLayout mMenuLayout; // VerticalLayout mMenuLayout;
Widget mBodyLayout; Widget mBodyLayout;
Widget mContentWidget;
ScrollableBarWidget mScrollBar;
LabelWidget mHeader; LabelWidget mHeader;
// ButtonWidget mTestButton; // ButtonWidget mTestButton;