This commit is contained in:
IlyaShurupov 2024-06-21 10:26:57 +03:00
parent 8f62c8f387
commit 378ff3f568
3 changed files with 100 additions and 6 deletions

View file

@ -81,7 +81,10 @@ namespace tp {
mSplitView.setArea(this->mArea); mSplitView.setArea(this->mArea);
mViewport.setArea(mSplitView.getFirst()); mViewport.setArea(mSplitView.getFirst());
mViewport.mEnable = mSplitView.getFirstEnabled();
mSettingsWidget.setArea(mSplitView.getSecond()); mSettingsWidget.setArea(mSplitView.getSecond());
mSettingsWidget.mEnable = mSplitView.getSecondEnabled();
// render settings // render settings
{ {

View file

@ -23,7 +23,7 @@ void RasterRender::render(const Scene& geometry, const Vec2<ualni>& size) {
} }
} }
mRenderBuffer.mClearCol = { 0.0f, 0.0f, 0.0f, 1.f }; mRenderBuffer.mClearCol = { 0.0f, 0.0f, 0.0f, 0.f };
mRenderBuffer.beginDraw(); mRenderBuffer.beginDraw();
mRenderBuffer.clear(); mRenderBuffer.clear();

View file

@ -1,14 +1,22 @@
#pragma once #pragma once
#include "WidgetBase.hpp" #include "LabelWidget.hpp"
namespace tp { namespace tp {
//TODO : clean up this mess
// takes the whole parent area
template <typename Events, typename Canvas> template <typename Events, typename Canvas>
class SplitView : public Widget<Events, Canvas> { class SplitView : public Widget<Events, Canvas> {
public: public:
SplitView() = default; SplitView() {
mLeftLabel.mLabel = "Left";
mRightLabel.mLabel = "Right";
this->mChildWidgets.pushBack(&mLeftLabel);
this->mChildWidgets.pushBack(&mRightLabel);
}
// takes whole area
void eventProcess(const Events& events) override { void eventProcess(const Events& events) override {
mIsHover = getHandle().isInside(events.getPointer()); mIsHover = getHandle().isInside(events.getPointer());
@ -29,6 +37,22 @@ namespace tp {
if (mMinSize * 2.f > this->mArea.z) { if (mMinSize * 2.f > this->mArea.z) {
mFactor = 0.5f; mFactor = 0.5f;
} }
mLeftLabel.mEnable = mHeaders && mCollapsedSide != LEFT;
mRightLabel.mEnable = mHeaders && mCollapsedSide != RIGHT;
if (mHeaders) {
mLeftLabel.setArea(getFirstHeader());
mRightLabel.setArea(getSecondHeader());
}
if (mLeftLabel.isReleased()) {
mCollapsedSide = (mCollapsedSide == NONE) ? RIGHT : NONE;
}
if (mRightLabel.isReleased()) {
mCollapsedSide = (mCollapsedSide == NONE) ? LEFT : NONE;
}
} }
void eventDraw(Canvas& canvas) override { void eventDraw(Canvas& canvas) override {
@ -37,18 +61,76 @@ namespace tp {
else canvas.rect(getHandle(), mHandleColor); else canvas.rect(getHandle(), mHandleColor);
} }
[[nodiscard]] bool getFirstEnabled() const {
return mCollapsedSide != CollapsedSize::LEFT;
}
[[nodiscard]] bool getSecondEnabled() const {
return mCollapsedSide != CollapsedSize::RIGHT;
}
RectF getFirst() const { RectF getFirst() const {
return { this->mArea.x, this->mArea.y, mFactor * this->mArea.z - mHandleSize / 2.f, this->mArea.w }; Rect out = { this->mArea.x, this->mArea.y, mFactor * this->mArea.z - mHandleSize / 2.f, this->mArea.w };
if (mCollapsedSide == RIGHT) {
out.pos.x = this->mArea.pos.x;
out.size.x = this->mArea.size.x;
}
if (mHeaders) {
out.pos.y += mHeaderSize;
out.size.y -= mHeaderSize;
}
return out;
}
RectF getFirstHeader() const {
Rect out = { this->mArea.x, this->mArea.y, mFactor * this->mArea.z - mHandleSize / 2.f, mHeaderSize };
if (mCollapsedSide == RIGHT) {
out.pos.x = this->mArea.pos.x;
out.size.x = this->mArea.size.x;
}
return out;
}
RectF getSecondHeader() const {
RectF out = { this->mArea.x + mFactor * this->mArea.z + mHandleSize / 2.f,
this->mArea.y,
(1.f - mFactor) * this->mArea.z - mHandleSize / 2.f,
mHeaderSize };
if (mCollapsedSide == LEFT) {
out.pos.x = this->mArea.pos.x;
out.size.x = this->mArea.size.x;
}
return out;
} }
RectF getSecond() const { RectF getSecond() const {
return { this->mArea.x + mFactor * this->mArea.z + mHandleSize / 2.f, RectF out = { this->mArea.x + mFactor * this->mArea.z + mHandleSize / 2.f,
this->mArea.y, this->mArea.y,
(1.f - mFactor) * this->mArea.z - mHandleSize / 2.f, (1.f - mFactor) * this->mArea.z - mHandleSize / 2.f,
this->mArea.w }; this->mArea.w };
if (mCollapsedSide == LEFT) {
out.pos.x = this->mArea.pos.x;
out.size.x = this->mArea.size.x;
}
if (mHeaders) {
out.pos.y += mHeaderSize;
out.size.y -= mHeaderSize;
}
return out;
} }
RectF getHandle() const { RectF getHandle() const {
if (mCollapsedSide != NONE) return {};
return { this->mArea.x + mFactor * this->mArea.z - mHandleSize / 2.f, this->mArea.y, mHandleSize, this->mArea.w }; return { this->mArea.x + mFactor * this->mArea.z - mHandleSize / 2.f, this->mArea.y, mHandleSize, this->mArea.w };
} }
@ -61,6 +143,7 @@ namespace tp {
mResizingColor = wm.getColor("Resizing", "Action"); mResizingColor = wm.getColor("Resizing", "Action");
mMinSize = wm.getNumber("Min", 200.f); mMinSize = wm.getNumber("Min", 200.f);
mHandleSize = wm.getNumber("HandleSize", 7.f); mHandleSize = wm.getNumber("HandleSize", 7.f);
mHeaderSize = wm.getNumber("HeaderSize", 30.f);
} }
public: public:
@ -73,5 +156,13 @@ namespace tp {
RGBA mResizingColor; RGBA mResizingColor;
halnf mMinSize = 0; halnf mMinSize = 0;
halnf mHandleSize = 0; halnf mHandleSize = 0;
// Headers
halnf mHeaderSize = 0;
bool mHeaders = true;
enum CollapsedSize { NONE, LEFT, RIGHT } mCollapsedSide = NONE;
LabelWidget<Events, Canvas> mLeftLabel;
LabelWidget<Events, Canvas> mRightLabel;
}; };
} }