Dock children in one pass, to match gmod api (and fix docking issues)
This commit is contained in:
parent
002b335f47
commit
5d4842701e
@ -634,54 +634,31 @@ public class EditablePanel implements GuiEventListener {
|
||||
var dock_top = dock_padding.top;
|
||||
var dock_bottom = dock_padding.bottom;
|
||||
|
||||
// determine sizes
|
||||
for (var child : children) {
|
||||
if (child.getVisible()) {
|
||||
switch (child.dock) {
|
||||
case TOP -> dock_top += child.height + child.dock_margin.top;
|
||||
case BOTTOM -> dock_bottom += child.height + child.dock_margin.bottom;
|
||||
case LEFT -> dock_left += child.width + child.dock_margin.left;
|
||||
case RIGHT -> dock_right += child.width + child.dock_margin.right;
|
||||
}
|
||||
|
||||
bound_x = Math.min(bound_x, child.x);
|
||||
bound_y = Math.min(bound_y, child.y);
|
||||
|
||||
bound_width = Math.max(bound_width, child.x + child.width);
|
||||
bound_height = Math.max(bound_height, child.y + child.height);
|
||||
}
|
||||
}
|
||||
|
||||
var dock_left2 = dock_padding.left;
|
||||
var dock_right2 = dock_padding.right;
|
||||
var dock_top2 = dock_padding.top;
|
||||
var dock_bottom2 = dock_padding.bottom;
|
||||
|
||||
// apply values
|
||||
for (var child : children) {
|
||||
if (child.getVisible()) {
|
||||
switch (child.dock) {
|
||||
case TOP -> {
|
||||
child.setPos(dock_left + child.dock_margin.left, dock_top2 + child.dock_margin.top);
|
||||
dock_top2 += child.height + child.dock_margin.top + child.dock_margin.bottom;
|
||||
child.setPos(dock_left + child.dock_margin.left, dock_top + child.dock_margin.top);
|
||||
dock_top += child.height + child.dock_margin.top + child.dock_margin.bottom;
|
||||
child.setWidth(Math.max(1, width - dock_left - dock_right - child.dock_margin.left - child.dock_margin.right));
|
||||
}
|
||||
|
||||
case BOTTOM -> {
|
||||
child.setPos(dock_left + child.dock_margin.left, height - dock_bottom2 - child.height - child.dock_margin.bottom);
|
||||
dock_bottom2 += child.height + child.dock_margin.top + child.dock_margin.bottom;
|
||||
child.setPos(dock_left + child.dock_margin.left, height - dock_bottom - child.height - child.dock_margin.bottom);
|
||||
dock_bottom += child.height + child.dock_margin.top + child.dock_margin.bottom;
|
||||
child.setWidth(Math.max(1, width - dock_left - dock_right - child.dock_margin.left - child.dock_margin.right));
|
||||
}
|
||||
|
||||
case LEFT -> {
|
||||
child.setPos(dock_left2 + child.dock_margin.left, dock_top + child.dock_margin.top);
|
||||
dock_left2 += child.width + child.dock_margin.left + child.dock_margin.right;
|
||||
child.setPos(dock_left + child.dock_margin.left, dock_top + child.dock_margin.top);
|
||||
dock_left += child.width + child.dock_margin.left + child.dock_margin.right;
|
||||
child.setHeight(Math.max(1, height - dock_top - dock_bottom - child.dock_margin.top - child.dock_margin.bottom));
|
||||
}
|
||||
|
||||
case RIGHT -> {
|
||||
child.setPos(width - dock_right2 - child.width - child.dock_margin.right, dock_top + child.dock_margin.top);
|
||||
dock_right2 += child.width + child.dock_margin.left + child.dock_margin.right;
|
||||
child.setPos(width - dock_right - child.width - child.dock_margin.right, dock_top + child.dock_margin.top);
|
||||
dock_right += child.width + child.dock_margin.left + child.dock_margin.right;
|
||||
child.setHeight(Math.max(1, height - dock_top - dock_bottom - child.dock_margin.top - child.dock_margin.bottom));
|
||||
}
|
||||
}
|
||||
@ -692,10 +669,10 @@ public class EditablePanel implements GuiEventListener {
|
||||
if (child.getVisible()) {
|
||||
if (child.dock == Dock.FILL) {
|
||||
child.setDimensions(
|
||||
dock_left2 + child.dock_margin.left,
|
||||
dock_top2 + child.dock_margin.top,
|
||||
width - child.dock_margin.left - child.dock_margin.right - dock_right2 - dock_left2,
|
||||
height - child.dock_margin.bottom - child.dock_margin.top - dock_bottom2 - dock_top2);
|
||||
dock_left + child.dock_margin.left,
|
||||
dock_top + child.dock_margin.top,
|
||||
width - child.dock_margin.left - child.dock_margin.right - dock_right - dock_left,
|
||||
height - child.dock_margin.bottom - child.dock_margin.top - dock_bottom - dock_top);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user