From 37a765af1948c67297e322a4db5cefe044ad1c67 Mon Sep 17 00:00:00 2001 From: Kam Date: Sun, 30 Jul 2023 15:47:03 -0400 Subject: [PATCH] Implement Ctrl + Backspace --- .../java/noppes/npcs/client/ClientProxy.java | 4 +- .../client/gui/util/GuiScriptTextArea.java | 51 ++++++++++++++++++- 2 files changed, 52 insertions(+), 3 deletions(-) diff --git a/src/main/java/noppes/npcs/client/ClientProxy.java b/src/main/java/noppes/npcs/client/ClientProxy.java index ac020ac2e..8ca096278 100644 --- a/src/main/java/noppes/npcs/client/ClientProxy.java +++ b/src/main/java/noppes/npcs/client/ClientProxy.java @@ -544,7 +544,7 @@ public class ClientProxy extends CommonProxy { public FontContainer(String fontType, int fontSize) { textFont = new StringCache(); - textFont.setDefaultFont("Arial", fontSize, true); + textFont.setDefaultFont("Arial Unicode MS", fontSize, true); useCustomFont = !fontType.equalsIgnoreCase("minecraft"); try { if(!useCustomFont || fontType.isEmpty() || fontType.equalsIgnoreCase("default")) @@ -552,7 +552,7 @@ public class ClientProxy extends CommonProxy { else textFont.setDefaultFont(fontType, fontSize, true); } catch (Exception e) { - LogWriter.info("Failed loading font so using Arial"); + LogWriter.info("Failed loading font so using Arial Unicode MS"); } } diff --git a/src/main/java/noppes/npcs/client/gui/util/GuiScriptTextArea.java b/src/main/java/noppes/npcs/client/gui/util/GuiScriptTextArea.java index 45ef13a27..4c1c08644 100644 --- a/src/main/java/noppes/npcs/client/gui/util/GuiScriptTextArea.java +++ b/src/main/java/noppes/npcs/client/gui/util/GuiScriptTextArea.java @@ -11,9 +11,12 @@ import net.minecraft.util.ChatAllowedCharacters; import noppes.npcs.NoppesStringUtils; import noppes.npcs.client.ClientProxy; import noppes.npcs.client.gui.util.TextContainer.LineData; +import noppes.npcs.config.ConfigClient; import org.lwjgl.input.Keyboard; import org.lwjgl.input.Mouse; +import sun.font.TrueTypeFont; +import java.awt.*; import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -42,11 +45,11 @@ public class GuiScriptTextArea extends GuiNpcTextField { private int cursorPosition; private int scrolledLine = 0; private boolean enableCodeHighlighting = false; - private static final char colorChar = '\uffff'; public List undoList = new ArrayList(); public List redoList = new ArrayList(); public boolean undoing = false; private long lastClicked = 0L; + // private static TrueTypeFont font = new TrueTypeFont(new Font("Arial Unicode MS", Font.PLAIN, ConfigClient.FontSize), 1); public GuiScriptTextArea(GuiScreen guiScreen, int id, int x, int y, int width, int height, String text) { super(id, guiScreen, x, y, width, height, null); @@ -309,6 +312,47 @@ public class GuiScriptTextArea extends GuiNpcTextField { endSelection = cursorPosition = startSelection; return true; } + if(isKeyComboCtrlBackspace(i)){ + String s = getSelectionBeforeText(); + if(startSelection > 0 && startSelection == endSelection){ + int nearestCondition = cursorPosition; + int g; + boolean cursorInWhitespace = Character.isWhitespace(s.charAt(cursorPosition - 1)); + if(cursorInWhitespace){ + // Find the nearest word if we are starting in whitespace + for (g = cursorPosition - 1; g >= 0; g--) { + char currentChar = s.charAt(g); + if (!Character.isWhitespace(currentChar)) { + nearestCondition = g; + break; + } + if(g == 0){ + nearestCondition = 0; + } + } + } + else { + // Find the nearest blank space or new line + for (g = cursorPosition - 1; g >= 0; g--) { + char currentChar = s.charAt(g); + if (Character.isWhitespace(currentChar) || currentChar == '\n') { + nearestCondition = g; + break; + } + if(g == 0){ + nearestCondition = 0; + } + } + } + + // Remove all text to the left up to the nearest boundary + s = s.substring(0, nearestCondition); + startSelection -= (cursorPosition - nearestCondition); + } + setText(s + getSelectionAfterText()); + endSelection = cursorPosition = startSelection; + return true; + } if(i == Keyboard.KEY_BACK){ String s = getSelectionBeforeText(); if(startSelection > 0 && startSelection == endSelection){ @@ -389,6 +433,11 @@ public class GuiScriptTextArea extends GuiNpcTextField { return keyID == 45 && isCtrlKeyDown() && !isShiftKeyDown() && !isAltKeyDown(); } + private boolean isKeyComboCtrlBackspace(int keyID) + { + return keyID == Keyboard.KEY_BACK && isCtrlKeyDown() && !isShiftKeyDown() && !isAltKeyDown(); + } + private boolean isKeyComboCtrlV(int keyID) { return keyID == 47 && isCtrlKeyDown() && !isShiftKeyDown() && !isAltKeyDown();