From 0566dd779c719d6c3c49310752d487e893e0dff5 Mon Sep 17 00:00:00 2001 From: KrLite <68179735+KrLite@users.noreply.github.com> Date: Sat, 28 Jan 2023 20:16:07 +0800 Subject: Fix Render Misbehaves Under Certain Conditions [1.19] (#1343) * fix entrylist background render * fix others * Consolidate calls to entrySize() --------- Co-authored-by: shedaniel --- .../rei/impl/client/gui/screen/CompositeDisplayViewingScreen.java | 6 +++--- .../rei/impl/client/gui/widget/BatchedEntryRendererManager.java | 2 +- .../rei/impl/client/gui/widget/entrylist/EntryListStackEntry.java | 6 ++++-- .../impl/client/gui/widget/entrylist/ScrolledEntryListWidget.java | 7 ++++--- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/CompositeDisplayViewingScreen.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/CompositeDisplayViewingScreen.java index cc4a6119c..a95d52069 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/CompositeDisplayViewingScreen.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/CompositeDisplayViewingScreen.java @@ -110,9 +110,6 @@ public class CompositeDisplayViewingScreen extends AbstractDisplayViewingScreen int guiHeight = Mth.clamp(category.getDisplayHeight() + 40, 166, largestHeight); this.bounds = new Rectangle(width / 2 - guiWidth / 2, height / 2 - guiHeight / 2, guiWidth, guiHeight); - this.initTabs(this.bounds.width); - this.widgets.addAll(this.tabs.widgets()); - List workstations = CategoryRegistry.getInstance().get(category.getCategoryIdentifier()).getWorkstations(); if (!workstations.isEmpty()) { int ww = Mth.floor((bounds.width - 16) / 18f); @@ -161,6 +158,9 @@ public class CompositeDisplayViewingScreen extends AbstractDisplayViewingScreen Optional supplier = CategoryRegistry.getInstance().get(category.getCategoryIdentifier()).getPlusButtonArea(); if (supplier.isPresent() && supplier.get().get(recipeBounds) != null) this.widgets.add(Widgets.withTranslate(InternalWidgets.createAutoCraftingButtonWidget(recipeBounds, supplier.get().get(recipeBounds), Component.literal(supplier.get().getButtonText()), display::provideInternalDisplay, display::provideInternalDisplayIds, setupDisplay, category), 0, 0, 100)); + + this.initTabs(this.bounds.width); + this.widgets.addAll(this.tabs.widgets()); int index = 0; for (DisplaySpec recipeDisplay : categoryMap.get(category)) { diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/BatchedEntryRendererManager.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/BatchedEntryRendererManager.java index 96e902ada..11fff3ddf 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/BatchedEntryRendererManager.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/BatchedEntryRendererManager.java @@ -186,7 +186,7 @@ public class BatchedEntryRendererManager { try { @SuppressWarnings("rawtypes") EntryStack currentEntry = entry.getCurrentEntry(); - currentEntry.setZ(100); + currentEntry.setZ(entry.getBounds().contains(mouseX, mouseY) ? 150 : 100); firstRenderer.renderBase(currentEntry, extraData[i++], matrices, immediate, entry.getInnerBounds(), mouseX, mouseY, delta); if (debugTime && !currentEntry.isEmpty()) size.increment(); } catch (Throwable throwable) { diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/EntryListStackEntry.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/EntryListStackEntry.java index d91227889..8f8662bc7 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/EntryListStackEntry.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/EntryListStackEntry.java @@ -109,7 +109,9 @@ public class EntryListStackEntry extends DisplayedEntryWidget { Rectangle bounds = getBounds(); if (collapsedStack != null) { - fillGradient(matrices, bounds.x, bounds.y, bounds.getMaxX(), bounds.getMaxY(), 0x34FFFFFF, 0x34FFFFFF); + int entrySize = entrySize(); + fillGradient(matrices, bounds.getCenterX() - entrySize / 2, bounds.getCenterY() - entrySize / 2, + bounds.getCenterX() + entrySize / 2 + 1, bounds.getCenterY() + entrySize / 2 + 1, 0x34FFFFFF, 0x34FFFFFF); } super.drawBackground(matrices, mouseX, mouseY, delta); @@ -209,4 +211,4 @@ public class EntryListStackEntry extends DisplayedEntryWidget { protected long getCyclingInterval() { return 100; } -} \ No newline at end of file +} diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/ScrolledEntryListWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/ScrolledEntryListWidget.java index 444f8ddc8..ac057a33c 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/ScrolledEntryListWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/ScrolledEntryListWidget.java @@ -64,8 +64,9 @@ public class ScrolledEntryListWidget extends CollapsingEntryListWidget { protected void renderEntries(boolean fastEntryRendering, PoseStack matrices, int mouseX, int mouseY, float delta) { ScissorsHandler.INSTANCE.scissor(bounds); - int skip = Math.max(0, Mth.floor(scrolling.scrollAmount() / (float) entrySize())); - int nextIndex = skip * innerBounds.width / entrySize(); + int entrySize = entrySize(); + int skip = Math.max(0, Mth.floor(scrolling.scrollAmount() / (float) entrySize)); + int nextIndex = skip * innerBounds.width / entrySize; this.blockedCount = 0; BatchedEntryRendererManager helper = new BatchedEntryRendererManager(); Int2ObjectMap indexedCollapsedStack = getCollapsedStackIndexed(); @@ -75,7 +76,7 @@ public class ScrolledEntryListWidget extends CollapsingEntryListWidget { EntryListStackEntry entry = entries.get(cont); Rectangle entryBounds = entry.getBounds(); - entryBounds.y = entry.backupY - scrolling.scrollAmountInt(); + entryBounds.y = entry.backupY - scrolling.scrollAmountInt() - entryBounds.height / 2 + entrySize / 2; if (entryBounds.y > this.bounds.getMaxY()) break; if (stacks.size() <= i) break; if (notSteppingOnExclusionZones(entryBounds.x, entryBounds.y, entryBounds.width, entryBounds.height)) { -- cgit