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_name=Brass and Sigil Toolkit
|
||||
mod_license=All Rights Reserved
|
||||
mod_version=0.6.0
|
||||
mod_version=0.6.1
|
||||
mod_group_id=uk.sijbers.bnstoolkit
|
||||
|
||||
@@ -34,8 +34,16 @@ public final class BountyBoardScreen extends BaseBnsScreen {
|
||||
|
||||
@Override
|
||||
public void addWidgets() {
|
||||
add(new BountyList(this));
|
||||
add(new BountyDetail(this));
|
||||
BountyList list = new BountyList(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,
|
||||
Component.literal("Refresh"),
|
||||
Icons.REFRESH,
|
||||
@@ -44,10 +52,6 @@ public final class BountyBoardScreen extends BaseBnsScreen {
|
||||
|
||||
@Override
|
||||
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);
|
||||
rf.setSize(60, 16);
|
||||
rf.setPos(getWidth() - 68, getHeight() - 22);
|
||||
|
||||
@@ -47,8 +47,16 @@ public final class CountingHouseScreen extends BaseBnsScreen {
|
||||
|
||||
@Override
|
||||
public void addWidgets() {
|
||||
add(new ItemGrid(this));
|
||||
add(new SellDetail(this));
|
||||
ItemGrid grid = new ItemGrid(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,
|
||||
Component.literal("Refresh"),
|
||||
Icons.REFRESH,
|
||||
@@ -57,10 +65,6 @@ public final class CountingHouseScreen extends BaseBnsScreen {
|
||||
|
||||
@Override
|
||||
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);
|
||||
rf.setSize(60, 16);
|
||||
rf.setPos(getWidth() - 68, getHeight() - 22);
|
||||
|
||||
@@ -33,7 +33,16 @@ public final class HubScreen extends BaseBnsScreen {
|
||||
|
||||
@Override
|
||||
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,
|
||||
btn -> { NetSend.requestSnapshot("ALL"); new QuestLogScreen().openGui(); }));
|
||||
add(SimpleTextButton.create(this, Component.literal("Refresh"), Icons.REFRESH,
|
||||
@@ -44,11 +53,8 @@ public final class HubScreen extends BaseBnsScreen {
|
||||
|
||||
@Override
|
||||
public void alignWidgets() {
|
||||
// Status panel fills most of the body
|
||||
getWidgets().get(0).setPos(8, contentTop());
|
||||
getWidgets().get(0).setSize(getWidth() - 16, getHeight() - 50);
|
||||
|
||||
// Bottom action row
|
||||
// Sub-panel already sized + positioned in addWidgets; only the
|
||||
// action-row buttons need placement here.
|
||||
int btnY = getHeight() - 22;
|
||||
int btnH = 16;
|
||||
Widget quest = getWidgets().get(1);
|
||||
|
||||
@@ -33,8 +33,16 @@ public final class PlotPurchaseScreen extends BaseBnsScreen {
|
||||
|
||||
@Override
|
||||
public void addWidgets() {
|
||||
add(new PlotList(this));
|
||||
add(new PlotDetail(this));
|
||||
PlotList list = new PlotList(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,
|
||||
Component.literal("Refresh"),
|
||||
Icons.REFRESH,
|
||||
@@ -43,10 +51,6 @@ public final class PlotPurchaseScreen extends BaseBnsScreen {
|
||||
|
||||
@Override
|
||||
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);
|
||||
rf.setSize(60, 16);
|
||||
rf.setPos(getWidth() - 68, getHeight() - 22);
|
||||
|
||||
@@ -32,15 +32,17 @@ public final class QuestLogScreen extends BaseBnsScreen {
|
||||
|
||||
@Override
|
||||
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,
|
||||
btn -> NetSend.requestSnapshot("ALL")));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void alignWidgets() {
|
||||
getWidgets().get(0).setPos(8, contentTop());
|
||||
getWidgets().get(0).setSize(getWidth() - 16, getHeight() - 30);
|
||||
Widget rf = getWidgets().get(1);
|
||||
rf.setSize(60, 16);
|
||||
rf.setPos(getWidth() - 68, getHeight() - 22);
|
||||
|
||||
@@ -37,8 +37,19 @@ public final class TierUpgradeScreen extends BaseBnsScreen {
|
||||
|
||||
@Override
|
||||
public void addWidgets() {
|
||||
add(new LadderPanel(this));
|
||||
add(new DetailPanel(this));
|
||||
// Pre-size sub-panels so their addWidgets/alignWidgets (called
|
||||
// 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,
|
||||
Component.literal("Refresh"),
|
||||
Icons.REFRESH,
|
||||
@@ -47,11 +58,7 @@ public final class TierUpgradeScreen extends BaseBnsScreen {
|
||||
|
||||
@Override
|
||||
public void alignWidgets() {
|
||||
// FTB Library setPos uses parent-relative coords.
|
||||
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);
|
||||
// Sub-panels are sized in addWidgets; only position the refresh button here.
|
||||
Widget rf = getWidgets().get(2);
|
||||
rf.setSize(60, 16);
|
||||
rf.setPos(getWidth() - 68, getHeight() - 22);
|
||||
|
||||
Reference in New Issue
Block a user