New DockspaceWidget Stable

This commit is contained in:
IlyaShurupov 2024-06-25 23:27:21 +03:00 committed by Ilya Shurupov
parent 9cc4819524
commit 242cd93589
8 changed files with 339 additions and 7 deletions

View file

@ -2,6 +2,8 @@
#include "LabelWidget.hpp"
#include <functional>
namespace tp {
class ButtonWidget : public Widget {
@ -23,5 +25,7 @@ namespace tp {
RGBA hoveredColor;
RGBA accentColor;
halnf rounding = 0;
std::function<void()> mCallback = [](){};
};
}

View file

@ -3,9 +3,67 @@
namespace tp {
class DockSpaceWidget : public Widget {
public:
DockSpaceWidget() = default;
enum Side { LEFT, TOP, RIGHT, BOTTOM };
public:
DockSpaceWidget();
void eventProcess(const Events& events) override;
void eventDraw(Canvas& canvas) override;
void addSideWidget(Widget* widget, Side side);
void removeSideWidget(Side side);
void toggleHiddenState(DockSpaceWidget::Side side);
void setCenterWidget(Widget* widget);
private:
void updateActiveWindow(const tp::Events& events);
void calculateSideAreas();
void calculateResizeHandles();
void handleResizeEvents(const Events& events);
void updateChildSideWidgets();
void calculateHeaderAreas();
bool isSideVisible(Side side);
bool isSideExists(Side side);
ualni getVisibleSidesSize();
private:
// todo : make better grouping into structs
Widget* mSideWidgets[4] { nullptr, nullptr, nullptr, nullptr };
Widget* mCenterWidget = nullptr;
alni mSideSplitOrder[4] = { -1, -1, -1, -1 };
halnf mSideAbsoluteSize[4] { 200, 100, 200, 100 };
bool mSideHidden[4] { true, false, false, false };
halnf mSideSizePadding = 50.f;
// Geometry cache
struct ResizeHandle {
RectF area{ 0, 0, 0, 0 };
Side side{ TOP };
halnf start{ 0 };
halnf end{ 0 };
bool active = false;
bool hover = false;
};
Buffer<ResizeHandle> mResizeHandles;
RectF mSideAreas[4];
RectF mSideHeaderAreas[4];
RectF mCenterArea {};
// View Parameters
halnf mPadding = 4;
halnf mHeaderSize = 27;
RGBA mResizeHandleColorHovered = RGBA(0.3, 0.3, 0.3, 1);
RGBA mResizeHandleColorActive = RGBA(0.6, 0.6, 0.6, 1);
RGBA mBackgroundColor = RGBA(0, 0, 0, 1);
};
}

View file

@ -63,5 +63,9 @@ namespace tp {
bool mHolding = false;
bool mPressed = false;
bool mReleased = false;
// docking
bool mIsDocked = false;
};
}