diff options
author | DeDiamondPro <67508414+DeDiamondPro@users.noreply.github.com> | 2022-05-11 17:54:19 +0200 |
---|---|---|
committer | DeDiamondPro <67508414+DeDiamondPro@users.noreply.github.com> | 2022-05-11 17:54:19 +0200 |
commit | b239915ac1e4b2b51b42d2c2fe163dffcdd7ae4f (patch) | |
tree | 8a1d31cb79da3a1626596f70e014b395b45b6178 /src/main/java/cc/polyfrost/oneconfig/gui/elements | |
parent | 333b4099972260d0e348ec20f8a00a430471aac8 (diff) | |
download | OneConfig-b239915ac1e4b2b51b42d2c2fe163dffcdd7ae4f.tar.gz OneConfig-b239915ac1e4b2b51b42d2c2fe163dffcdd7ae4f.tar.bz2 OneConfig-b239915ac1e4b2b51b42d2c2fe163dffcdd7ae4f.zip |
keybinds
Diffstat (limited to 'src/main/java/cc/polyfrost/oneconfig/gui/elements')
-rw-r--r-- | src/main/java/cc/polyfrost/oneconfig/gui/elements/BasicButton.java | 21 | ||||
-rw-r--r-- | src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigKeyBind.java | 81 |
2 files changed, 97 insertions, 5 deletions
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/BasicButton.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/BasicButton.java index bd2521a..f705d0b 100644 --- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/BasicButton.java +++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/BasicButton.java @@ -10,8 +10,6 @@ import cc.polyfrost.oneconfig.utils.ColorUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.awt.*; - public class BasicButton extends BasicElement { protected String text; @@ -25,6 +23,7 @@ public class BasicButton extends BasicElement { private boolean toggleable; private Page page; private Runnable runnable; + private boolean alignIconLeft = false; /** * Create a new basic button. Used mostly on the homepage and the sidebar. Note: The button will not be drawn until you call {@link #draw(long, int, int)}. @@ -79,7 +78,7 @@ public class BasicButton extends BasicElement { int textColor = -1; RenderManager.drawRectangle(vg, x, y, this.width, this.height, this.currentColor); float contentWidth = RenderManager.getTextWidth(vg, text, fontSize, Fonts.MEDIUM); - if (fileNameLeftIco != null) { + if (fileNameLeftIco != null && !alignIconLeft) { contentWidth += 28; } if (fileNameRightIco != null) { @@ -95,9 +94,13 @@ public class BasicButton extends BasicElement { if (thisAlignment == ALIGNMENT_CENTER) { int middle = x + this.width / 2; - RenderManager.drawString(vg, text, middle - contentWidth / 2 + (fileNameLeftIco != null ? 28 : 0), y + ((float) height / 2) + 1, textColor, fontSize, Fonts.MEDIUM); + if (alignIconLeft) + RenderManager.drawString(vg, text, middle - contentWidth / 2, y + ((float) height / 2) + 1, textColor, fontSize, Fonts.MEDIUM); + else + RenderManager.drawString(vg, text, middle - contentWidth / 2 + (fileNameLeftIco != null ? 28 : 0), y + ((float) height / 2) + 1, textColor, fontSize, Fonts.MEDIUM); if (fileNameLeftIco != null) { - RenderManager.drawImage(vg, fileNameLeftIco, middle - contentWidth / 2, y + 8, 20, 20); + if (alignIconLeft) RenderManager.drawImage(vg, fileNameLeftIco, x + 12, y + height / 2f - 10, 20, 20); + else RenderManager.drawImage(vg, fileNameLeftIco, middle - contentWidth / 2, y + 8, 20, 20); } if (fileNameRightIco != null) { RenderManager.drawImage(vg, fileNameRightIco, middle + contentWidth / 2 - (fileNameLeftIco != null ? 20 : 24), y + 8, 20, 20); @@ -153,4 +156,12 @@ public class BasicButton extends BasicElement { public String getText() { return text; } + + public void setText(String text) { + this.text = text; + } + + public void alignIconLeft(boolean value) { + alignIconLeft = value; + } } diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigKeyBind.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigKeyBind.java new file mode 100644 index 0000000..809143f --- /dev/null +++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigKeyBind.java @@ -0,0 +1,81 @@ +package cc.polyfrost.oneconfig.gui.elements.config; + +import cc.polyfrost.oneconfig.config.OneConfigConfig; +import cc.polyfrost.oneconfig.config.core.OneKeyBind; +import cc.polyfrost.oneconfig.config.interfaces.BasicOption; +import cc.polyfrost.oneconfig.gui.OneConfigGui; +import cc.polyfrost.oneconfig.gui.elements.BasicButton; +import cc.polyfrost.oneconfig.lwjgl.RenderManager; +import cc.polyfrost.oneconfig.lwjgl.font.Fonts; +import cc.polyfrost.oneconfig.lwjgl.image.Images; +import org.lwjgl.input.Keyboard; + +import java.lang.reflect.Field; + +public class ConfigKeyBind extends BasicOption { + private final BasicButton button; + private boolean clicked = false; + + public ConfigKeyBind(Field field, String name, int size) { + super(field, name, size); + button = new BasicButton(256, 32, "", Images.KEYSTROKE, null, 0, BasicButton.ALIGNMENT_CENTER, true); + button.alignIconLeft(true); + } + + @Override + public void draw(long vg, int x, int y) { + RenderManager.drawString(vg, name, x, y + 17, OneConfigConfig.WHITE, 14f, Fonts.MEDIUM); + OneKeyBind keyBind = getKeyBind(); + String text = keyBind.getDisplay(); + if (button.isToggled()) { + if (text.equals("")) text = "Recording... (ESC to clear)"; + if (!clicked) { + keyBind.clearKeys(); + setKeyBind(keyBind); + clicked = true; + } else if (keyBind.getSize() == 0 || keyBind.isActive()) { + OneConfigGui.INSTANCE.allowClose = false; + } else { + button.setToggled(false); + clicked = false; + OneConfigGui.INSTANCE.allowClose = true; + } + } else if (text.equals("")) text = "None"; + button.setText(text); + button.draw(vg, x + (size == 1 ? 224 : 736), y); + } + + @Override + public void keyTyped(char key, int keyCode) { + if (!button.isToggled()) return; + OneKeyBind keyBind = getKeyBind(); + if (keyCode == Keyboard.KEY_ESCAPE) { + keyBind.clearKeys(); + button.setToggled(false); + OneConfigGui.INSTANCE.allowClose = true; + clicked = false; + } else keyBind.addKey(keyCode); + setKeyBind(keyBind); + } + + private OneKeyBind getKeyBind() { + OneKeyBind keyBind = new OneKeyBind(); + try { + keyBind = (OneKeyBind) get(); + } catch (IllegalAccessException ignored) { + } + return keyBind; + } + + private void setKeyBind(OneKeyBind keyBind) { + try { + set(keyBind); + } catch (IllegalAccessException ignored) { + } + } + + @Override + public int getHeight() { + return 32; + } +} |