diff --git a/src/main/java/codechicken/nei/BookmarkPanel.java b/src/main/java/codechicken/nei/BookmarkPanel.java index ae48545d..b0a27bc0 100644 --- a/src/main/java/codechicken/nei/BookmarkPanel.java +++ b/src/main/java/codechicken/nei/BookmarkPanel.java @@ -509,31 +509,30 @@ public class BookmarkPanel extends PanelWidget { } } + @Override public Rectangle4i calculateBounds() { final GuiContainer gui = NEIClientUtils.getGuiContainer(); - final int width = (gui.width - gui.xSize) / 2 - PADDING * 2; - final Rectangle4i bounds = new Rectangle4i( - PADDING, - PADDING, - (gui.width - 176) / 2 - PADDING * 2, - gui.height - PADDING * 2); + final int maxWidth = (gui.width - 176) / 2 - PADDING * 2; + final int maxHeight = gui.height - PADDING * 2; + final int freeSpace = (gui.width - gui.xSize) / 2 - PADDING * 2; - int paddingLeft = (int) Math - .ceil(bounds.w * NEIClientConfig.getSetting("world.panels.bookmarks.left").getIntValue() / 100000.0); - int paddingTop = (int) Math - .ceil(bounds.h * NEIClientConfig.getSetting("world.panels.bookmarks.top").getIntValue() / 100000.0); - int paddingRight = (int) Math - .ceil(bounds.w * NEIClientConfig.getSetting("world.panels.bookmarks.right").getIntValue() / 100000.0); - int paddingBottom = (int) Math - .ceil(bounds.h * NEIClientConfig.getSetting("world.panels.bookmarks.bottom").getIntValue() / 100000.0); + final int paddingLeft = (int) Math + .ceil(maxWidth * NEIClientConfig.getSetting("world.panels.bookmarks.left").getIntValue() / 100000.0); + final int paddingTop = (int) Math + .ceil(maxHeight * NEIClientConfig.getSetting("world.panels.bookmarks.top").getIntValue() / 100000.0); + final int paddingRight = (int) Math + .ceil(maxWidth * NEIClientConfig.getSetting("world.panels.bookmarks.right").getIntValue() / 100000.0); + final int paddingBottom = (int) Math + .ceil(maxHeight * NEIClientConfig.getSetting("world.panels.bookmarks.bottom").getIntValue() / 100000.0); - bounds.h = Math.max(ItemsGrid.SLOT_SIZE, bounds.h - paddingTop - paddingBottom); - bounds.y = bounds.y + Math.min(paddingTop, bounds.h - ItemsGrid.SLOT_SIZE); + final int width = Math.max( + ItemsGrid.SLOT_SIZE, + snapDownToMultiple( + Math.min(freeSpace - paddingLeft, maxWidth - paddingLeft - paddingRight), + ItemsGrid.SLOT_SIZE)); + final int height = Math.max(ItemsGrid.SLOT_SIZE, maxHeight - paddingTop - paddingBottom); - bounds.w = Math.max(ItemsGrid.SLOT_SIZE, Math.min(bounds.w - paddingLeft - paddingRight, width - paddingLeft)); - bounds.x = bounds.x + Math.min(paddingLeft, bounds.w - ItemsGrid.SLOT_SIZE); - - return bounds; + return new Rectangle4i(paddingLeft + PADDING, paddingTop + PADDING, width, height); } protected ItemStack getDraggedStackWithQuantity(ItemStack itemStack) { diff --git a/src/main/java/codechicken/nei/ItemPanel.java b/src/main/java/codechicken/nei/ItemPanel.java index 951217db..0d742c07 100644 --- a/src/main/java/codechicken/nei/ItemPanel.java +++ b/src/main/java/codechicken/nei/ItemPanel.java @@ -115,31 +115,30 @@ public class ItemPanel extends PanelWidget { return String.format("%d/%d", getPage(), Math.max(1, getNumPages())); } + @Override public Rectangle4i calculateBounds() { final GuiContainer gui = NEIClientUtils.getGuiContainer(); - final int width = (gui.width - gui.xSize) / 2 - PADDING * 2; - final Rectangle4i bounds = new Rectangle4i( - (gui.width + gui.xSize) / 2 + PADDING, - PADDING, - (gui.width - 176) / 2 - PADDING * 2, - gui.height - PADDING * 2); + final int maxWidth = (gui.width - 176) / 2 - PADDING * 2; + final int maxHeight = gui.height - PADDING * 2; + final int freeSpace = (gui.width - gui.xSize) / 2 - PADDING * 2; - int paddingLeft = (int) Math - .ceil(bounds.w * NEIClientConfig.getSetting("world.panels.items.left").getIntValue() / 100000.0); - int paddingTop = (int) Math - .ceil(bounds.h * NEIClientConfig.getSetting("world.panels.items.top").getIntValue() / 100000.0); - int paddingRight = (int) Math - .ceil(bounds.w * NEIClientConfig.getSetting("world.panels.items.right").getIntValue() / 100000.0); - int paddingBottom = (int) Math - .ceil(bounds.h * NEIClientConfig.getSetting("world.panels.items.bottom").getIntValue() / 100000.0); + final int paddingLeft = (int) Math + .ceil(maxWidth * NEIClientConfig.getSetting("world.panels.items.left").getIntValue() / 100000.0); + final int paddingTop = (int) Math + .ceil(maxHeight * NEIClientConfig.getSetting("world.panels.items.top").getIntValue() / 100000.0); + final int paddingRight = (int) Math + .ceil(maxWidth * NEIClientConfig.getSetting("world.panels.items.right").getIntValue() / 100000.0); + final int paddingBottom = (int) Math + .ceil(maxHeight * NEIClientConfig.getSetting("world.panels.items.bottom").getIntValue() / 100000.0); - bounds.h = Math.max(ItemsGrid.SLOT_SIZE, bounds.h - paddingTop - paddingBottom); - bounds.y = bounds.y + Math.min(paddingTop, bounds.h - ItemsGrid.SLOT_SIZE); + final int width = Math.max( + ItemsGrid.SLOT_SIZE, + snapDownToMultiple( + Math.min(freeSpace - paddingRight, maxWidth - paddingLeft - paddingRight), + ItemsGrid.SLOT_SIZE)); + final int height = Math.max(ItemsGrid.SLOT_SIZE, maxHeight - paddingTop - paddingBottom); - bounds.w = Math.max(ItemsGrid.SLOT_SIZE, Math.min(bounds.w - paddingLeft - paddingRight, width - paddingRight)); - bounds.x = bounds.x + Math.max(0, width - bounds.w - paddingRight); - - return bounds; + return new Rectangle4i(gui.width - width - PADDING - paddingRight, paddingTop + PADDING, width, height); } @Override diff --git a/src/main/java/codechicken/nei/PanelWidget.java b/src/main/java/codechicken/nei/PanelWidget.java index 60093fc4..d0c6e72e 100644 --- a/src/main/java/codechicken/nei/PanelWidget.java +++ b/src/main/java/codechicken/nei/PanelWidget.java @@ -84,6 +84,10 @@ public abstract class PanelWidget