From 27e4cd32aa94ff27f100e2e1425bd685b4a83da0 Mon Sep 17 00:00:00 2001 From: ranch Date: Sat, 10 Jan 2026 17:38:05 -0600 Subject: [PATCH] gui design is my passion --- .../com/hbm/inventory/gui/GUICalculator.java | 63 ++++++++++++++---- .../assets/hbm/textures/gui/calculator.png | Bin 566 -> 0 bytes 2 files changed, 49 insertions(+), 14 deletions(-) delete mode 100644 src/main/resources/assets/hbm/textures/gui/calculator.png diff --git a/src/main/java/com/hbm/inventory/gui/GUICalculator.java b/src/main/java/com/hbm/inventory/gui/GUICalculator.java index a8816e188..9ac4bbda0 100644 --- a/src/main/java/com/hbm/inventory/gui/GUICalculator.java +++ b/src/main/java/com/hbm/inventory/gui/GUICalculator.java @@ -1,23 +1,29 @@ package com.hbm.inventory.gui; -import com.hbm.lib.RefStrings; +import com.hbm.util.Tuple; + import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiTextField; -import net.minecraft.util.ResourceLocation; import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.GL11; import java.math.BigDecimal; import java.math.MathContext; +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.Deque; import java.util.Locale; import java.util.Stack; public class GUICalculator extends GuiScreen { - private static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID, "textures/gui/calculator.png"); private int xSize = 220; private int ySize = 50; + private int borderWidth = 2; private GuiTextField inputField; + private int selectedHist = -1; + private static final int maxHistory = 6; + private static Deque> history = new ArrayDeque<>(); private String latestResult = "?"; @Override @@ -46,15 +52,31 @@ public class GUICalculator extends GuiScreen { String input = inputField.getText().replaceAll("[^\\d+\\-*/^!.()\\sA-Za-z]+", ""); if (p_73869_1_ == 13 || p_73869_1_ == 10) { // when pressing enter (CR or LF) - try { - double result = evaluateExpression(input); - String plainStringRepresentation = (new BigDecimal(result, MathContext.DECIMAL64)).toPlainString(); - GuiScreen.setClipboardString(plainStringRepresentation); - inputField.setText(plainStringRepresentation); - inputField.setCursorPositionEnd(); - inputField.setSelectionPos(0); - } catch (Exception ignored) {} - return; + if (selectedHist != -1) { + input = new ArrayList<>(history).get(selectedHist).key; + inputField.setText(input); + selectedHist = -1; + } else { + try { + double result = evaluateExpression(input); + history.addFirst(new Tuple.Pair(input, result)); + if (history.size() > maxHistory) history.removeLast(); + String plainStringRepresentation = (new BigDecimal(result, MathContext.DECIMAL64)).toPlainString(); + GuiScreen.setClipboardString(plainStringRepresentation); + inputField.setText(plainStringRepresentation); + inputField.setCursorPositionEnd(); + inputField.setSelectionPos(0); + } catch (Exception ignored) {} + return; + } + } + + if (p_73869_2_ == 200) { // up arrow + selectedHist = Math.max(selectedHist - 1, -1); + } else if (p_73869_2_ == 208) { // down arrow + selectedHist = Math.min(selectedHist + 1, history.size() - 1); + } else { + selectedHist = -1; } if (input.isEmpty()) { @@ -72,14 +94,27 @@ public class GUICalculator extends GuiScreen { super.drawScreen(mouseX, mouseY, partialTicks); GL11.glColor4f(1F, 1F, 1F, 1F); - mc.getTextureManager().bindTexture(texture); int x = (width - xSize) / 2; int y = (height - ySize) / 2; + int histHeight = (fontRendererObj.FONT_HEIGHT + 2) * maxHistory; + int histStart = y + 30 + fontRendererObj.FONT_HEIGHT + 8; - drawTexturedModalRect(x, y, 0, 0, xSize, ySize); + drawRect(x, y, x+xSize, y+ySize+histHeight, 0xFF2d2d2d); + drawRect(x+borderWidth, y+borderWidth, x+xSize-borderWidth, y+ySize-borderWidth+histHeight, 0xFF3d3d3d); + drawRect(x, histStart - 5, x+xSize, histStart - 3, 0xFF2d2d2d); inputField.drawTextBox(); fontRendererObj.drawString("=" + latestResult, x + 5, y + 30, -1); + + int i = 0; + for (Tuple.Pair prevInput : history) { + int hy = y + 50 + (fontRendererObj.FONT_HEIGHT+1)*i; + if (i == selectedHist) { + drawRect(x + 4, hy - 1, x + 4 + xSize - 9, hy + fontRendererObj.FONT_HEIGHT, 0xFF111111); + } + fontRendererObj.drawString(prevInput.key + " = " + prevInput.value, x + 5, hy, -1); + i++; + } } /** diff --git a/src/main/resources/assets/hbm/textures/gui/calculator.png b/src/main/resources/assets/hbm/textures/gui/calculator.png deleted file mode 100644 index fa6fd968fb3744fe4dd9c844e0c3add6e5342814..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 566 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G!U;i$lZxy-8q?;Kn_c~qpu?a z!^VE@KZ&eBK4*bPWHAE+-(e7DJf6QI1*qY)r;B4qMcmtK2YH(uL|g+mFiFk)$34^S z1%t3t%