Add HBox and VBox with automatic widget placement
parent
f9417010be
commit
d559b129fe
|
@ -114,3 +114,23 @@ void Container::Pack(Widget *widget)
|
||||||
{
|
{
|
||||||
this->children.push_back(widget);
|
this->children.push_back(widget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void HBox::Pack(Widget *widget)
|
||||||
|
{
|
||||||
|
Widget *last = this->children.empty() ? NULL : this->children.back();
|
||||||
|
widget->x = (last == NULL) ? this->x : (last->x + last->w + this->padding);
|
||||||
|
widget->y = this->y;
|
||||||
|
widget->h = this->h;
|
||||||
|
if (widget->w < 0) widget->w = this->w - (widget->x - this->x);
|
||||||
|
Container::Pack(widget);
|
||||||
|
}
|
||||||
|
|
||||||
|
void VBox::Pack(Widget *widget)
|
||||||
|
{
|
||||||
|
Widget *last = this->children.empty() ? NULL : this->children.back();
|
||||||
|
widget->x = this->x;
|
||||||
|
widget->y = (last == NULL) ? this->y : (last->y + last->h + this->padding);
|
||||||
|
widget->w = this->w;
|
||||||
|
if (widget->h < 0) widget->h = this->h - (widget->y - this->y);
|
||||||
|
Container::Pack(widget);
|
||||||
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@ public:
|
||||||
Colour colour;
|
Colour colour;
|
||||||
Colour frame;
|
Colour frame;
|
||||||
bool back;
|
bool back;
|
||||||
|
int padding;
|
||||||
|
|
||||||
~Container();
|
~Container();
|
||||||
|
|
||||||
|
@ -20,6 +21,14 @@ public:
|
||||||
|
|
||||||
/* virtual */ void OnPaint(const PUi *pui) const;
|
/* virtual */ void OnPaint(const PUi *pui) const;
|
||||||
|
|
||||||
|
virtual void Pack(Widget *widget);
|
||||||
|
};
|
||||||
|
|
||||||
|
struct VBox : Container {
|
||||||
|
/* virtual */ void Pack(Widget *widget);
|
||||||
|
};
|
||||||
|
|
||||||
|
struct HBox : Container {
|
||||||
/* virtual */ void Pack(Widget *widget);
|
/* virtual */ void Pack(Widget *widget);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue