67 lines
No EOL
1.3 KiB
C++
67 lines
No EOL
1.3 KiB
C++
#pragma once
|
|
|
|
#include "Rect.hpp"
|
|
|
|
namespace tp {
|
|
class Widget;
|
|
|
|
enum class SizePolicy {
|
|
Fixed,
|
|
Expanding,
|
|
Minimal,
|
|
};
|
|
|
|
enum class LayoutPolicy {
|
|
Passive,
|
|
Vertical,
|
|
Horizontal,
|
|
};
|
|
|
|
class WidgetLayout {
|
|
public:
|
|
explicit WidgetLayout(Widget* widget) { mWidget = widget; }
|
|
|
|
virtual void adjustWidget() = 0;
|
|
|
|
virtual void pickRect();
|
|
virtual void clampRect();
|
|
virtual void adjustChildrenRect();
|
|
void adjustLayout(bool vertical);
|
|
halnf changeChildSize(Widget*, halnf diff, bool vertical);
|
|
|
|
RangeF pickRange(const RangeF& current, const RangeF& children, const RangeF& parent, bool vertical);
|
|
RangeF clampRange(const RangeF& current, const RangeF& children, const RangeF& parent, bool vertical);
|
|
|
|
void clampMinMaxSize();
|
|
|
|
RectF getChildrenEnclosure();
|
|
RectF getParentEnclosure();
|
|
|
|
protected:
|
|
const RectF& getArea();
|
|
void setArea(const RectF& area);
|
|
|
|
private:
|
|
Widget* mWidget = nullptr;
|
|
};
|
|
|
|
class BasicLayout : public WidgetLayout {
|
|
public:
|
|
BasicLayout() = default;
|
|
|
|
void adjustWidget() override;
|
|
|
|
private:
|
|
|
|
|
|
private:
|
|
LayoutPolicy mLayoutPolicy = LayoutPolicy::Vertical;
|
|
Vec2<SizePolicy> mSizePolicy = { SizePolicy::Fixed, SizePolicy::Fixed };
|
|
|
|
Vec2F mMinSize = { 50, 50 };
|
|
Vec2F mMaxSize = { FLT_MAX / 2, FLT_MAX / 2 };
|
|
|
|
halnf mLayoutGap = 5;
|
|
halnf mLayoutMargin = 10;
|
|
};
|
|
} |