diff --git a/src/main/java/de/extio/game_engine/renderer/g2d/control/components/CustomJScrollPane.java b/src/main/java/de/extio/game_engine/renderer/g2d/control/components/CustomJScrollPane.java deleted file mode 100644 index b9273d3..0000000 --- a/src/main/java/de/extio/game_engine/renderer/g2d/control/components/CustomJScrollPane.java +++ /dev/null @@ -1,55 +0,0 @@ -package de.extio.game_engine.renderer.g2d.control.components; - -import java.awt.Component; -import java.awt.Graphics; - -import javax.swing.JScrollPane; -import javax.swing.RepaintManager; - -@SuppressWarnings("serial") -public class CustomJScrollPane extends JScrollPane { - - private Graphics drawGraphics; - - public CustomJScrollPane(final Component view) { - super(view); - - this.setIgnoreRepaint(true); - this.putClientProperty("AATextInfoPropertyKey", null); - this.setDoubleBuffered(false); - RepaintManager.currentManager(this).setDoubleBufferingEnabled(false); - } - - @Override - public void paintAll(final Graphics g) { - if (this.drawGraphics == null) { - return; - } - super.paintAll(this.drawGraphics); - } - - @Override - public void paint(final Graphics g) { - if (this.drawGraphics == null) { - return; - } - super.paint(this.drawGraphics); - } - - @Override - public void update(final Graphics g) { - if (this.drawGraphics == null) { - return; - } - super.update(this.drawGraphics); - } - - public Graphics getDrawGraphics() { - return this.drawGraphics; - } - - public void setDrawGraphics(final Graphics drawGraphics) { - this.drawGraphics = drawGraphics; - } - -} diff --git a/src/main/java/de/extio/game_engine/renderer/g2d/control/components/CustomJTextArea.java b/src/main/java/de/extio/game_engine/renderer/g2d/control/components/CustomJTextArea.java deleted file mode 100644 index 6ed3dd9..0000000 --- a/src/main/java/de/extio/game_engine/renderer/g2d/control/components/CustomJTextArea.java +++ /dev/null @@ -1,77 +0,0 @@ -package de.extio.game_engine.renderer.g2d.control.components; - -import java.awt.Graphics; - -import javax.swing.JTextArea; -import javax.swing.RepaintManager; - -import de.extio.game_engine.renderer.g2d.control.G2DControlHasExclusiveKeyEvent; - -@SuppressWarnings("serial") -public class CustomJTextArea extends JTextArea implements G2DControlHasExclusiveKeyEvent { - - // private final static Color CARET_COLOR = new ImmutableRgbaColor(RgbaColor.YELLOW_SPACECRAFT.getR(), RgbaColor.YELLOW_SPACECRAFT.getG(), RgbaColor.YELLOW_SPACECRAFT.getB(), 190).toAwtColor(); - // - // private final static Color CARET_COLOR2 = new ImmutableRgbaColor(RgbaColor.YELLOW_SPACECRAFT.getR() / 2, RgbaColor.YELLOW_SPACECRAFT.getG() / 2, RgbaColor.YELLOW_SPACECRAFT.getB() / 2, 100).toAwtColor(); - - protected boolean dirty = true; - - private Graphics drawGraphics; - - public CustomJTextArea() { - this.setIgnoreRepaint(true); - this.putClientProperty("AATextInfoPropertyKey", null); - this.setDoubleBuffered(false); - RepaintManager.currentManager(this).setDoubleBufferingEnabled(false); - } - - @Override - public void paintAll(final Graphics g) { - if (this.drawGraphics == null) { - return; - } - super.paintAll(this.drawGraphics); - } - - @Override - public void paint(final Graphics g) { - if (this.drawGraphics == null) { - return; - } - super.paint(this.drawGraphics); - - // try { - // Rectangle2D rect = this.getUI().modelToView2D(this, this.getCaret().getDot(), Bias.Forward); - // this.drawGraphics.setColor((System.currentTimeMillis() % 1000 < 500) ? CARET_COLOR : CARET_COLOR2); - // this.drawGraphics.fillRect((int)rect.getX(), (int)rect.getY(), Math.max(2, (int)rect.getWidth()), Math.max(6, (int)rect.getHeight())); - // } - // catch (BadLocationException e) { - // } - } - - @Override - public void update(final Graphics g) { - this.dirty = true; - - if (this.drawGraphics == null) { - return; - } - super.update(this.drawGraphics); - } - - public boolean isDirty() { - return this.dirty; - } - - public void setDirty(final boolean dirty) { - this.dirty = dirty; - } - - public Graphics getDrawGraphics() { - return this.drawGraphics; - } - - public void setDrawGraphics(final Graphics drawGraphics) { - this.drawGraphics = drawGraphics; - } -} diff --git a/src/main/java/de/extio/game_engine/renderer/g2d/control/components/CustomJTextField.java b/src/main/java/de/extio/game_engine/renderer/g2d/control/components/CustomJTextField.java index 7ba2e7a..38120bd 100644 --- a/src/main/java/de/extio/game_engine/renderer/g2d/control/components/CustomJTextField.java +++ b/src/main/java/de/extio/game_engine/renderer/g2d/control/components/CustomJTextField.java @@ -30,6 +30,7 @@ public class CustomJTextField extends JTextField implements G2DControlHasExclusi this.putClientProperty("AATextInfoPropertyKey", null); this.setDoubleBuffered(false); RepaintManager.currentManager(this).setDoubleBufferingEnabled(false); + this.setFocusable(true); } @Override diff --git a/src/main/java/de/extio/game_engine/renderer/g2d/control/impl/G2DTextfieldControlImpl.java b/src/main/java/de/extio/game_engine/renderer/g2d/control/impl/G2DTextfieldControlImpl.java deleted file mode 100644 index c0cd7c1..0000000 --- a/src/main/java/de/extio/game_engine/renderer/g2d/control/impl/G2DTextfieldControlImpl.java +++ /dev/null @@ -1,180 +0,0 @@ -package de.extio.game_engine.renderer.g2d.control.impl; - -import java.awt.Color; -import java.awt.TextArea; -import java.awt.TextComponent; -import java.awt.TextField; -import java.util.Objects; - -import de.extio.game_engine.renderer.ThemeManager; -import de.extio.game_engine.renderer.g2d.G2DRenderer; -import de.extio.game_engine.renderer.g2d.bo.rendering.G2DDrawFont; -import de.extio.game_engine.renderer.g2d.control.components.CustomTextArea; -import de.extio.game_engine.renderer.g2d.control.components.CustomTextField; -import de.extio.game_engine.renderer.g2d.theme.G2DThemeManager; -import de.extio.game_engine.renderer.model.bo.ControlRenderingBo.BaseControl; -import de.extio.game_engine.renderer.model.bo.ControlRenderingBo.TextfieldControl; -import de.extio.game_engine.renderer.model.bo.ControlRenderingBo.TextfieldData; -import de.extio.game_engine.renderer.model.color.RgbaColor; -import de.extio.game_engine.renderer.model.event.UiControlEvent; - -public class G2DTextfieldControlImpl extends G2DBaseControlImpl implements TextfieldControl { - - private TextComponent textComponent; - - private boolean multiLine; - - private String lastText; - - @Override - public void setCustomData(final TextfieldData data) { - if (data != null) { - this.setMultiLine(data.multiLine()); - this.setReadonly(data.readonly()); - this.setBackgroundColor(data.backgroundColor()); - } - } - - private void setMultiLine(final boolean multiLine) { - if (this.textComponent != null) { - throw new UnsupportedOperationException("Multiline property is read-only after initial control creation"); - } - this.multiLine = multiLine; - } - - @Override - public BaseControl setCaption(final String caption) { - this.modified |= caption != null && (!Objects.equals(this.caption, caption) || !Objects.equals(this.textComponent.getText(), caption)); - this.caption = caption; - return this; - } - - @Override - public void build() { - super.build(); - - if (this.multiLine) { - this.textComponent = new CustomTextArea("", 1, 1, TextArea.SCROLLBARS_VERTICAL_ONLY); - } - else { - this.textComponent = new CustomTextField(); - } - this.textComponent.setName(this.id); - this.initTextField(); - - if (!this.multiLine) { - ((TextField) this.textComponent).addActionListener(event -> { - // Simulate pressing enter - this.rendererData.getEventService().fire(new UiControlEvent(this.id, (this.lastText != null ? this.lastText : "") + "\n")); - }); - } - - final var mainFrame = ((G2DRenderer) this.rendererData.getRenderer()).getMainFrame(); - mainFrame.add(this.textComponent); - this.updateAllComponentZOrder(); - } - - @Override - public void performAction() { - - } - - @Override - public void render() { - final var curComponentText = this.textComponent.getText(); - if (!Objects.equals(this.lastText, curComponentText) && !((this.lastText == null || this.lastText.isEmpty()) && (curComponentText == null || curComponentText.isEmpty()))) { - this.lastText = curComponentText; - this.rendererData.getEventService().fire(new UiControlEvent(this.id, this.lastText)); - } - - boolean componentDirty; - if (this.multiLine) { - componentDirty = ((CustomTextArea) this.textComponent).isDirty(); - } - else { - componentDirty = ((CustomTextField) this.textComponent).isDirty(); - } - if (this.modified || componentDirty) { - //LOGGER.debug("TextComponent modified " + this.id); - this.initTextField(); - this.rebuildBufferedImage(); - this.safeInvoke(() -> this.textComponent.paint(this.bufferedImageGraphics)); - if (this.multiLine) { - ((CustomTextArea) this.textComponent).setDirty(false); - } - else { - ((CustomTextField) this.textComponent).setDirty(false); - } - this.updateAllComponentZOrder(); - } - else if (this.positionModified) { - this.safeInvoke(() -> this.textComponent.setLocation(this.x, this.y)); - this.positionModified = false; - } - - super.render(); - } - - @Override - public void close() { - if (this.textComponent.isFocusOwner()) { - ((G2DRenderer) this.rendererData.getRenderer()).getMainFrame().requestFocus(); - } - this.safeInvoke(() -> this.textComponent.setVisible(false)); - this.safeInvoke(() -> this.textComponent.invalidate()); - ((G2DRenderer) this.rendererData.getRenderer()).getMainFrame().remove(this.textComponent); - - super.close(); - } - - private void initTextField() { - final ThemeManager themeManager = (G2DThemeManager) this.rendererData.getThemeManager(); - final Color bgColor = themeManager.getCurrentTheme().getBackgroundNormal().toColor(); - final Color fgColor = themeManager.getCurrentTheme().getTextNormal().toColor(); - this.safeInvoke(() -> this.textComponent.setBackground(bgColor)); - this.safeInvoke(() -> this.textComponent.setForeground(fgColor)); - this.safeInvoke(() -> this.textComponent.setLocation(this.x, this.y)); - this.positionModified = false; - this.safeInvoke(() -> this.textComponent.setSize(this.width, this.height)); - this.safeInvoke(() -> this.textComponent.setFont(G2DDrawFont.getFont(this.scaleFactor, this.fontSize))); - this.safeInvoke(() -> this.textComponent.setVisible(this.visible)); - this.safeInvoke(() -> this.textComponent.setEditable(this.enabled)); - - try { - if (this.caption != null && !this.textComponent.getText().equals(this.caption)) { - final var pos = this.textComponent.getCaretPosition(); - this.safeInvoke(() -> this.textComponent.setText(this.caption)); - this.safeInvoke(() -> this.textComponent.setCaretPosition(pos)); - this.lastText = this.caption; - } - } - catch (final Exception exc) { - this.modified = true; - } - - if (this.multiLine) { - this.safeInvoke(() -> this.textComponent.setEditable(false)); - this.safeInvoke(() -> this.textComponent.setFocusable(false)); - final var scrollPos = (this.caption != null ? this.caption.lastIndexOf('\n') : -1) + 1; - this.safeInvoke(() -> this.textComponent.setCaretPosition(scrollPos)); - } - } - - private void safeInvoke(final Runnable runnable) { - try { - runnable.run(); - } - catch (final Exception exc) { - LOGGER.warn(exc.getMessage(), exc); - } - } - - private void setBackgroundColor(final RgbaColor color) { - - } - - private void setReadonly(final boolean readonly) { - - } - -}