From cbfb1625bc3bf04b31d601217234593c2e9fffa6 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sun, 21 Sep 2025 21:28:56 -0500 Subject: [PATCH] add extra logic to proof-of-concept java swing UI --- .../config/gui/JavaScreenHandlerScreen.java | 65 +++++++-- .../core/config/gui/OpenGLConfigScreen.java | 126 ------------------ 2 files changed, 53 insertions(+), 138 deletions(-) delete mode 100644 core/src/main/java/com/seibel/distanthorizons/core/config/gui/OpenGLConfigScreen.java diff --git a/core/src/main/java/com/seibel/distanthorizons/core/config/gui/JavaScreenHandlerScreen.java b/core/src/main/java/com/seibel/distanthorizons/core/config/gui/JavaScreenHandlerScreen.java index 6b80a12a5..9163f66fa 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/config/gui/JavaScreenHandlerScreen.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/config/gui/JavaScreenHandlerScreen.java @@ -23,6 +23,7 @@ import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.awt.*; +import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; @@ -35,6 +36,8 @@ public class JavaScreenHandlerScreen extends AbstractScreen public static boolean firstRun = true; public final Component jComponent; + + static { // Note: this code can cause Mac @@ -54,19 +57,25 @@ public class JavaScreenHandlerScreen extends AbstractScreen public void init() { if (firstRun) + { frame = EmbeddedFrameUtil.embeddedFrameCreate(this.minecraftWindow); // Don't call this multiple times + } - frame.add(jComponent); + frame.add(this.jComponent); + frame.setBackground(new Color(0, 125, 155)); JavaScreenHandlerScreen thiss = this; - frame.addKeyListener(new KeyListener() { + frame.addKeyListener(new KeyListener() + { @Override public void keyPressed(KeyEvent keyEvent) { System.out.println("Key pressed code=" + keyEvent.getKeyCode() + ", char=" + keyEvent.getKeyChar()); if (keyEvent.getKeyCode() == KeyEvent.VK_ESCAPE) + { thiss.close = true; + } } @Override @@ -80,8 +89,8 @@ public class JavaScreenHandlerScreen extends AbstractScreen EmbeddedFrameUtil.embeddedFrameSetBounds(frame, 0, 0, this.width, this.height); firstRun = false; } - else - EmbeddedFrameUtil.showFrame(frame); + + EmbeddedFrameUtil.showFrame(frame); } /** A testing/debug screen */ @@ -89,13 +98,43 @@ public class JavaScreenHandlerScreen extends AbstractScreen { public ExampleScreen() { - setLayout(new GridBagLayout()); - GridBagConstraints constraints = new GridBagConstraints(); - constraints.fill = GridBagConstraints.HORIZONTAL; - constraints.weightx = 0.5; - constraints.gridx = 0; - constraints.gridy = 0; - add(new JLabel("Hello World!"), constraints); + this.setLayout(new GridBagLayout()); + this.setBackground(new Color(255, 0, 0)); // doesn't appear to be used + + GridBagConstraints helloWorldConstraints = new GridBagConstraints(); + helloWorldConstraints.weightx = 0.5; + helloWorldConstraints.gridx = 0; + helloWorldConstraints.gridy = 0; + //helloWorldConstraints.fill = GridBagConstraints.BOTH; + this.add(new JLabel("Hello World!"), helloWorldConstraints); + + + GridBagConstraints buttonConstraints = new GridBagConstraints(); + buttonConstraints.weightx = 0.5; + buttonConstraints.gridx = 0; + buttonConstraints.gridy = 1; + //buttonConstraints.fill = GridBagConstraints.BOTH; + JButton button = new JButton(); + button.setBackground(Color.GREEN); + button.setFocusable(false); // otherwise we can't use escape to leave + button.setAction(new ExampleButtonEventHandler("Button text")); + this.add(button, buttonConstraints); + } + + private class ExampleButtonEventHandler extends AbstractAction + { + public ExampleButtonEventHandler(String text) + { + super(text); + //this.putValue(SHORT_DESCRIPTION, text); + //this.putValue(MNEMONIC_KEY, text); + } + + @Override + public void actionPerformed(ActionEvent e) + { + System.out.println("button pressed"); + } } } @@ -116,8 +155,10 @@ public class JavaScreenHandlerScreen extends AbstractScreen @Override public void onClose() { - frame.remove(jComponent); + frame.remove(this.jComponent); EmbeddedFrameUtil.hideFrame(frame); } + + } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/config/gui/OpenGLConfigScreen.java b/core/src/main/java/com/seibel/distanthorizons/core/config/gui/OpenGLConfigScreen.java deleted file mode 100644 index 7b455d207..000000000 --- a/core/src/main/java/com/seibel/distanthorizons/core/config/gui/OpenGLConfigScreen.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * This file is part of the Distant Horizons mod - * licensed under the GNU LGPL v3 License. - * - * Copyright (C) 2020 James Seibel - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ - -package com.seibel.distanthorizons.core.config.gui; - -import com.seibel.distanthorizons.api.enums.config.EDhApiGpuUploadMethod; -import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; -import com.seibel.distanthorizons.core.render.glObject.buffer.GLVertexBuffer; -import com.seibel.distanthorizons.core.render.glObject.shader.ShaderProgram; -import com.seibel.distanthorizons.core.render.glObject.vertexAttribute.AbstractVertexAttribute; -import com.seibel.distanthorizons.core.render.glObject.vertexAttribute.VertexPointer; -import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftGLWrapper; -import org.lwjgl.opengl.GL32; - -import java.nio.ByteBuffer; -import java.nio.ByteOrder; - -/** - * @author coolGi - */ -public class OpenGLConfigScreen extends AbstractScreen -{ - private static final IMinecraftGLWrapper GLMC = SingletonInjector.INSTANCE.get(IMinecraftGLWrapper.class); - - private ShaderProgram basicShader; - private GLVertexBuffer sameContextBuffer; - private GLVertexBuffer sharedContextBuffer; - private AbstractVertexAttribute va; - - - - @Override - public void init() - { - System.out.println("init"); - - this.va = AbstractVertexAttribute.create(); - this.va.bind(); - // Pos - this.va.setVertexAttribute(0, 0, VertexPointer.addVec2Pointer(false)); - // Color - this.va.setVertexAttribute(0, 1, VertexPointer.addVec4Pointer(false)); - this.va.completeAndCheck(Float.BYTES * 6); - this.basicShader = new ShaderProgram("shaders/test/vert.vert", "shaders/test/frag.frag", - "fragColor", new String[]{"vPosition", "color"}); - this.createBuffer(); - } - - // Render a square with uv color - private static final float[] vertices = { - // PosX,Y, ColorR,G,B,A - -0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 1.0f, - 0.4f, -0.4f, 1.0f, 0.0f, 0.0f, 1.0f, - 0.3f, 0.3f, 1.0f, 1.0f, 0.0f, 0.0f, - -0.2f, 0.2f, 0.0f, 1.0f, 1.0f, 1.0f - }; - - private static GLVertexBuffer createTextingBuffer() - { - ByteBuffer buffer = ByteBuffer.allocateDirect(vertices.length * Float.BYTES); - // Fill buffer with the vertices. - buffer = buffer.order(ByteOrder.nativeOrder()); - buffer.asFloatBuffer().put(vertices); - buffer.rewind(); - GLVertexBuffer vbo = new GLVertexBuffer(false); - vbo.bind(); - vbo.uploadBuffer(buffer, 4, EDhApiGpuUploadMethod.DATA, vertices.length * Float.BYTES); - return vbo; - } - - private void createBuffer() - { - this.sharedContextBuffer = createTextingBuffer(); - this.sameContextBuffer = createTextingBuffer(); - } - - @Override - public void render(float delta) - { - System.out.println("Updated config screen with the delta of " + delta); - - GL32.glViewport(0, 0, this.width, this.height); - GL32.glPolygonMode(GL32.GL_FRONT_AND_BACK, GL32.GL_FILL); - GLMC.disableFaceCulling(); - GLMC.disableDepthTest(); - GLMC.disableBlend(); - - this.basicShader.bind(); - this.va.bind(); - - // Switch between the two buffers per second - if (System.currentTimeMillis() % 2000 < 1000) - { - this.sameContextBuffer.bind(); - this.va.bindBufferToAllBindingPoints(this.sameContextBuffer.getId()); - } - else - { - this.sameContextBuffer.bind(); - this.va.bindBufferToAllBindingPoints(this.sharedContextBuffer.getId()); - } - // Render the square - GL32.glDrawArrays(GL32.GL_TRIANGLE_FAN, 0, 4); - GL32.glClear(GL32.GL_DEPTH_BUFFER_BIT); - } - - @Override - public void tick() { System.out.println("Ticked"); } - -}