Widget::ComputeElementPadding

This commit is contained in:
2025-02-19 16:54:12 -06:00
parent 116c2e2e2f
commit c7d214c851
2 changed files with 35 additions and 11 deletions

View File

@@ -50,9 +50,9 @@ namespace JUI {
/// An event that triggers when the widget loses focus.
Event<> Unfocused;
/// This event triggers when a new widget is added to this widget, or any descendant of this widget.
Event<Widget *> DescendantAdded;
Event<Widget *> DescendantAdded; // TODO: Debug
/// This event triggers when a widget is removed from this widget's children, or any of it's childrens' children, and so forth.
Event<Widget *> DescendantRemoved;
Event<Widget *> DescendantRemoved; // TODO: Debug
/// This event triggers when the hierarchy this widget is contained within changes.
Event<Widget *, Widget*> AncestryChanged;
/// This event triggers when a widget is added to this widget's list of children.
@@ -284,6 +284,12 @@ namespace JUI {
void SetViewportSize(const Vector2& vps);
float ComputeElementPadding(float size, const UDim& padding) {
return padding.Pixels + (padding.Scale * size);
}
Vector2 ComputeElementPadding(const Vector2& size, const UDim2& padding) const;
public:
// TODO: Consider calling J2D::Begin here.

View File

@@ -179,14 +179,16 @@ std::vector<Widget*> Widget::GetAncestors() {
Vector2 Widget::GetAbsolutePaddingTopLeft() const {
auto parent_abs_size = this->GetParent()->GetAbsoluteSize();
UDim2 pad_topleft = {parent->PaddingLeft(), parent->PaddingTop()};
return ComputeElementPadding(parent_abs_size, pad_topleft);
UDim padding_h = parent->PaddingLeft();
UDim padding_v = parent->PaddingTop();
//UDim padding_h = parent->PaddingLeft();
//UDim padding_v = parent->PaddingTop();
float padding_x = padding_h.Pixels + (padding_h.Scale * parent_abs_size.x);
float padding_y = padding_v.Pixels + (padding_v.Scale * parent_abs_size.y);
//float padding_x = padding_h.Pixels + (padding_h.Scale * parent_abs_size.x);
//float padding_y = padding_v.Pixels + (padding_v.Scale * parent_abs_size.y);
return {padding_x, padding_y};
//return {padding_x, padding_y};
}
Vector2 Widget::GetAbsoluteMarginTopLeft() {
@@ -195,15 +197,24 @@ Vector2 Widget::GetAbsoluteMarginTopLeft() {
}
Vector2 Widget::GetAbsolutePaddingBottomRight() const {
// Returns the amount by which the widget size should be shrunk.
// This combines the Left + Right for horizontal,
// and Top + Bottom for vertical padding.
UDim padding_h = parent->PaddingLeft() + parent->PaddingRight();
float final_pad_x = padding_h.Pixels + (padding_h.Scale * parent->GetAbsoluteSize().x);
//float final_pad_x = padding_h.Pixels + (padding_h.Scale * parent->GetAbsoluteSize().x);
UDim padding_v = parent->PaddingTop() + parent->PaddingBottom();
float final_pad_y = padding_v.Pixels + (padding_v.Scale * parent->GetAbsoluteSize().y);
//float final_pad_y = padding_v.Pixels + (padding_v.Scale * parent->GetAbsoluteSize().y);
Vector2 padding = {final_pad_x, final_pad_y};
UDim2 pad_bottom_left = {padding_h, padding_v};
return padding;
return ComputeElementPadding(parent->GetAbsoluteSize(), pad_bottom_left);
//Vector2 padding = {final_pad_x, final_pad_y};
//return padding;
}
Vector2 Widget::GetAbsoluteMarginBottomRight() {
@@ -393,6 +404,13 @@ void Widget::SetViewportSize(const Vector2 &vps) {
child->SetViewportSize(viewport_size);
}
Vector2 Widget::ComputeElementPadding(const Vector2 &size, const UDim2 &padding) const {
float pad_x = padding.X.Pixels + (padding.X.Scale * size.x);
float pad_y = padding.Y.Pixels + (padding.Y.Scale * size.y);
return {pad_x, pad_y};
}
AABB2D Widget::AbsoluteBounds() const {
return {GetAbsolutePosition(), GetAbsoluteSize()};
}