0.6.1: pre-size sub-panels in addWidgets to fix blank panel content
Build / build (push) Has been cancelled
Build / build (push) Has been cancelled
FTB Library's Panel.refreshWidgets runs in this order: 1. clearWidgets 2. addWidgets (parent creates sub-panels, default size 0x0) 3. for each Panel child: refreshWidgets() ← recurses HERE 4. alignWidgets (parent sizes children, but it's too late) Step 3 means sub-panels' own addWidgets/alignWidgets run with width=height=0. Children sized via setSize(width, 12) end up 0 wide, visible content disappears. Fix is mechanical: every screen now sizes its sub-panels in addWidgets() BEFORE the add() call. By the time the recursive refreshWidgets hits the sub-panel, its dimensions are correct. Caught when HubScreen rendered blank (status panel was set up to fill the body but its Row children were 0px wide). Same latent issue in TierUpgrade, CountingHouse, Bounty, Plot, Quest Log — all fixed. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
+1
-1
@@ -19,5 +19,5 @@ loader_version_range=[1,)
|
|||||||
mod_id=bnstoolkit
|
mod_id=bnstoolkit
|
||||||
mod_name=Brass and Sigil Toolkit
|
mod_name=Brass and Sigil Toolkit
|
||||||
mod_license=All Rights Reserved
|
mod_license=All Rights Reserved
|
||||||
mod_version=0.6.0
|
mod_version=0.6.1
|
||||||
mod_group_id=uk.sijbers.bnstoolkit
|
mod_group_id=uk.sijbers.bnstoolkit
|
||||||
|
|||||||
@@ -34,8 +34,16 @@ public final class BountyBoardScreen extends BaseBnsScreen {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addWidgets() {
|
public void addWidgets() {
|
||||||
add(new BountyList(this));
|
BountyList list = new BountyList(this);
|
||||||
add(new BountyDetail(this));
|
list.setPos(8, contentTop());
|
||||||
|
list.setSize(170, getHeight() - 30);
|
||||||
|
add(list);
|
||||||
|
|
||||||
|
BountyDetail detail = new BountyDetail(this);
|
||||||
|
detail.setPos(186, contentTop());
|
||||||
|
detail.setSize(getWidth() - 194, getHeight() - 30);
|
||||||
|
add(detail);
|
||||||
|
|
||||||
add(SimpleTextButton.create(this,
|
add(SimpleTextButton.create(this,
|
||||||
Component.literal("Refresh"),
|
Component.literal("Refresh"),
|
||||||
Icons.REFRESH,
|
Icons.REFRESH,
|
||||||
@@ -44,10 +52,6 @@ public final class BountyBoardScreen extends BaseBnsScreen {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void alignWidgets() {
|
public void alignWidgets() {
|
||||||
getWidgets().get(0).setPos(8, contentTop());
|
|
||||||
getWidgets().get(0).setSize(170, getHeight() - 30);
|
|
||||||
getWidgets().get(1).setPos(186, contentTop());
|
|
||||||
getWidgets().get(1).setSize(getWidth() - 194, getHeight() - 30);
|
|
||||||
Widget rf = getWidgets().get(2);
|
Widget rf = getWidgets().get(2);
|
||||||
rf.setSize(60, 16);
|
rf.setSize(60, 16);
|
||||||
rf.setPos(getWidth() - 68, getHeight() - 22);
|
rf.setPos(getWidth() - 68, getHeight() - 22);
|
||||||
|
|||||||
@@ -47,8 +47,16 @@ public final class CountingHouseScreen extends BaseBnsScreen {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addWidgets() {
|
public void addWidgets() {
|
||||||
add(new ItemGrid(this));
|
ItemGrid grid = new ItemGrid(this);
|
||||||
add(new SellDetail(this));
|
grid.setPos(8, contentTop());
|
||||||
|
grid.setSize(170, getHeight() - 30);
|
||||||
|
add(grid);
|
||||||
|
|
||||||
|
SellDetail detail = new SellDetail(this);
|
||||||
|
detail.setPos(186, contentTop());
|
||||||
|
detail.setSize(getWidth() - 194, getHeight() - 30);
|
||||||
|
add(detail);
|
||||||
|
|
||||||
add(SimpleTextButton.create(this,
|
add(SimpleTextButton.create(this,
|
||||||
Component.literal("Refresh"),
|
Component.literal("Refresh"),
|
||||||
Icons.REFRESH,
|
Icons.REFRESH,
|
||||||
@@ -57,10 +65,6 @@ public final class CountingHouseScreen extends BaseBnsScreen {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void alignWidgets() {
|
public void alignWidgets() {
|
||||||
getWidgets().get(0).setPos(8, contentTop());
|
|
||||||
getWidgets().get(0).setSize(170, getHeight() - 30);
|
|
||||||
getWidgets().get(1).setPos(186, contentTop());
|
|
||||||
getWidgets().get(1).setSize(getWidth() - 194, getHeight() - 30);
|
|
||||||
Widget rf = getWidgets().get(2);
|
Widget rf = getWidgets().get(2);
|
||||||
rf.setSize(60, 16);
|
rf.setSize(60, 16);
|
||||||
rf.setPos(getWidth() - 68, getHeight() - 22);
|
rf.setPos(getWidth() - 68, getHeight() - 22);
|
||||||
|
|||||||
@@ -33,7 +33,16 @@ public final class HubScreen extends BaseBnsScreen {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addWidgets() {
|
public void addWidgets() {
|
||||||
add(new StatusPanel(this));
|
// CRITICAL: size the sub-panel BEFORE adding. FTB Library's
|
||||||
|
// Panel.refreshWidgets() recurses into sub-panels BEFORE the
|
||||||
|
// parent's alignWidgets runs, so a sub-panel sized in
|
||||||
|
// alignWidgets shows up with width=height=0 to its own children
|
||||||
|
// (every Row gets setSize(0,12) → invisible).
|
||||||
|
StatusPanel sp = new StatusPanel(this);
|
||||||
|
sp.setPos(8, contentTop());
|
||||||
|
sp.setSize(getWidth() - 16, getHeight() - 50);
|
||||||
|
add(sp);
|
||||||
|
|
||||||
add(SimpleTextButton.create(this, Component.literal("Quest Log"), Icons.INFO,
|
add(SimpleTextButton.create(this, Component.literal("Quest Log"), Icons.INFO,
|
||||||
btn -> { NetSend.requestSnapshot("ALL"); new QuestLogScreen().openGui(); }));
|
btn -> { NetSend.requestSnapshot("ALL"); new QuestLogScreen().openGui(); }));
|
||||||
add(SimpleTextButton.create(this, Component.literal("Refresh"), Icons.REFRESH,
|
add(SimpleTextButton.create(this, Component.literal("Refresh"), Icons.REFRESH,
|
||||||
@@ -44,11 +53,8 @@ public final class HubScreen extends BaseBnsScreen {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void alignWidgets() {
|
public void alignWidgets() {
|
||||||
// Status panel fills most of the body
|
// Sub-panel already sized + positioned in addWidgets; only the
|
||||||
getWidgets().get(0).setPos(8, contentTop());
|
// action-row buttons need placement here.
|
||||||
getWidgets().get(0).setSize(getWidth() - 16, getHeight() - 50);
|
|
||||||
|
|
||||||
// Bottom action row
|
|
||||||
int btnY = getHeight() - 22;
|
int btnY = getHeight() - 22;
|
||||||
int btnH = 16;
|
int btnH = 16;
|
||||||
Widget quest = getWidgets().get(1);
|
Widget quest = getWidgets().get(1);
|
||||||
|
|||||||
@@ -33,8 +33,16 @@ public final class PlotPurchaseScreen extends BaseBnsScreen {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addWidgets() {
|
public void addWidgets() {
|
||||||
add(new PlotList(this));
|
PlotList list = new PlotList(this);
|
||||||
add(new PlotDetail(this));
|
list.setPos(8, contentTop());
|
||||||
|
list.setSize(170, getHeight() - 30);
|
||||||
|
add(list);
|
||||||
|
|
||||||
|
PlotDetail detail = new PlotDetail(this);
|
||||||
|
detail.setPos(186, contentTop());
|
||||||
|
detail.setSize(getWidth() - 194, getHeight() - 30);
|
||||||
|
add(detail);
|
||||||
|
|
||||||
add(SimpleTextButton.create(this,
|
add(SimpleTextButton.create(this,
|
||||||
Component.literal("Refresh"),
|
Component.literal("Refresh"),
|
||||||
Icons.REFRESH,
|
Icons.REFRESH,
|
||||||
@@ -43,10 +51,6 @@ public final class PlotPurchaseScreen extends BaseBnsScreen {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void alignWidgets() {
|
public void alignWidgets() {
|
||||||
getWidgets().get(0).setPos(8, contentTop());
|
|
||||||
getWidgets().get(0).setSize(170, getHeight() - 30);
|
|
||||||
getWidgets().get(1).setPos(186, contentTop());
|
|
||||||
getWidgets().get(1).setSize(getWidth() - 194, getHeight() - 30);
|
|
||||||
Widget rf = getWidgets().get(2);
|
Widget rf = getWidgets().get(2);
|
||||||
rf.setSize(60, 16);
|
rf.setSize(60, 16);
|
||||||
rf.setPos(getWidth() - 68, getHeight() - 22);
|
rf.setPos(getWidth() - 68, getHeight() - 22);
|
||||||
|
|||||||
@@ -32,15 +32,17 @@ public final class QuestLogScreen extends BaseBnsScreen {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addWidgets() {
|
public void addWidgets() {
|
||||||
add(new SummaryPanel(this));
|
SummaryPanel summary = new SummaryPanel(this);
|
||||||
|
summary.setPos(8, contentTop());
|
||||||
|
summary.setSize(getWidth() - 16, getHeight() - 30);
|
||||||
|
add(summary);
|
||||||
|
|
||||||
add(SimpleTextButton.create(this, Component.literal("Refresh"), Icons.REFRESH,
|
add(SimpleTextButton.create(this, Component.literal("Refresh"), Icons.REFRESH,
|
||||||
btn -> NetSend.requestSnapshot("ALL")));
|
btn -> NetSend.requestSnapshot("ALL")));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void alignWidgets() {
|
public void alignWidgets() {
|
||||||
getWidgets().get(0).setPos(8, contentTop());
|
|
||||||
getWidgets().get(0).setSize(getWidth() - 16, getHeight() - 30);
|
|
||||||
Widget rf = getWidgets().get(1);
|
Widget rf = getWidgets().get(1);
|
||||||
rf.setSize(60, 16);
|
rf.setSize(60, 16);
|
||||||
rf.setPos(getWidth() - 68, getHeight() - 22);
|
rf.setPos(getWidth() - 68, getHeight() - 22);
|
||||||
|
|||||||
@@ -37,8 +37,19 @@ public final class TierUpgradeScreen extends BaseBnsScreen {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addWidgets() {
|
public void addWidgets() {
|
||||||
add(new LadderPanel(this));
|
// Pre-size sub-panels so their addWidgets/alignWidgets (called
|
||||||
add(new DetailPanel(this));
|
// via the recursive Panel.refreshWidgets BEFORE our own
|
||||||
|
// alignWidgets) see the correct dimensions.
|
||||||
|
LadderPanel ladder = new LadderPanel(this);
|
||||||
|
ladder.setPos(8, contentTop());
|
||||||
|
ladder.setSize(180, getHeight() - 28);
|
||||||
|
add(ladder);
|
||||||
|
|
||||||
|
DetailPanel detail = new DetailPanel(this);
|
||||||
|
detail.setPos(196, contentTop());
|
||||||
|
detail.setSize(getWidth() - 204, getHeight() - 50);
|
||||||
|
add(detail);
|
||||||
|
|
||||||
add(SimpleTextButton.create(this,
|
add(SimpleTextButton.create(this,
|
||||||
Component.literal("Refresh"),
|
Component.literal("Refresh"),
|
||||||
Icons.REFRESH,
|
Icons.REFRESH,
|
||||||
@@ -47,11 +58,7 @@ public final class TierUpgradeScreen extends BaseBnsScreen {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void alignWidgets() {
|
public void alignWidgets() {
|
||||||
// FTB Library setPos uses parent-relative coords.
|
// Sub-panels are sized in addWidgets; only position the refresh button here.
|
||||||
getWidgets().get(0).setPos(8, contentTop());
|
|
||||||
getWidgets().get(0).setSize(180, getHeight() - 28);
|
|
||||||
getWidgets().get(1).setPos(196, contentTop());
|
|
||||||
getWidgets().get(1).setSize(getWidth() - 204, getHeight() - 50);
|
|
||||||
Widget rf = getWidgets().get(2);
|
Widget rf = getWidgets().get(2);
|
||||||
rf.setSize(60, 16);
|
rf.setSize(60, 16);
|
||||||
rf.setPos(getWidth() - 68, getHeight() - 22);
|
rf.setPos(getWidth() - 68, getHeight() - 22);
|
||||||
|
|||||||
Reference in New Issue
Block a user