From d038e80c043fb05fa1a07b5e8ecc984247b19619 Mon Sep 17 00:00:00 2001 From: Duy Tran Khanh Date: Sun, 17 Jan 2021 13:58:53 +0700 Subject: [PATCH] Add wrapped AWT for headless platform --- .../src/main/java/jdpi/awt/BorderLayout.java | 4 ++ JavaApp/src/main/java/jdpi/awt/Canvas.java | 21 ++++++++++ JavaApp/src/main/java/jdpi/awt/Color.java | 27 ++++++++++++ JavaApp/src/main/java/jdpi/awt/Component.java | 18 ++++++++ JavaApp/src/main/java/jdpi/awt/Container.java | 9 ++++ JavaApp/src/main/java/jdpi/awt/Dimension.java | 15 +++++++ JavaApp/src/main/java/jdpi/awt/Frame.java | 7 ++++ JavaApp/src/main/java/jdpi/awt/Graphics.java | 36 ++++++++++++++++ .../src/main/java/jdpi/awt/Graphics2D.java | 7 ++++ .../java/jdpi/awt/GraphicsEnvironment.java | 6 +++ JavaApp/src/main/java/jdpi/awt/Image.java | 5 +++ .../src/main/java/jdpi/awt/LayoutManager.java | 4 ++ JavaApp/src/main/java/jdpi/awt/Window.java | 17 ++++++++ .../java/jdpi/awt/event/WindowAdapter.java | 4 ++ .../java/jdpi/awt/event/WindowListener.java | 4 ++ .../java/jdpi/awt/image/BufferedImage.java | 42 +++++++++++++++++++ .../main/java/jdpi/awt/image/DataBuffer.java | 5 +++ .../java/jdpi/awt/image/DataBufferInt.java | 11 +++++ .../java/jdpi/awt/image/ImageObserver.java | 5 +++ .../java/jdpi/awt/image/RenderedImage.java | 4 ++ .../java/jdpi/awt/image/WritableRaster.java | 13 ++++++ 21 files changed, 264 insertions(+) create mode 100644 JavaApp/src/main/java/jdpi/awt/BorderLayout.java create mode 100644 JavaApp/src/main/java/jdpi/awt/Canvas.java create mode 100644 JavaApp/src/main/java/jdpi/awt/Color.java create mode 100644 JavaApp/src/main/java/jdpi/awt/Component.java create mode 100644 JavaApp/src/main/java/jdpi/awt/Container.java create mode 100644 JavaApp/src/main/java/jdpi/awt/Dimension.java create mode 100644 JavaApp/src/main/java/jdpi/awt/Frame.java create mode 100644 JavaApp/src/main/java/jdpi/awt/Graphics.java create mode 100644 JavaApp/src/main/java/jdpi/awt/Graphics2D.java create mode 100644 JavaApp/src/main/java/jdpi/awt/GraphicsEnvironment.java create mode 100644 JavaApp/src/main/java/jdpi/awt/Image.java create mode 100644 JavaApp/src/main/java/jdpi/awt/LayoutManager.java create mode 100644 JavaApp/src/main/java/jdpi/awt/Window.java create mode 100644 JavaApp/src/main/java/jdpi/awt/event/WindowAdapter.java create mode 100644 JavaApp/src/main/java/jdpi/awt/event/WindowListener.java create mode 100644 JavaApp/src/main/java/jdpi/awt/image/BufferedImage.java create mode 100644 JavaApp/src/main/java/jdpi/awt/image/DataBuffer.java create mode 100644 JavaApp/src/main/java/jdpi/awt/image/DataBufferInt.java create mode 100644 JavaApp/src/main/java/jdpi/awt/image/ImageObserver.java create mode 100644 JavaApp/src/main/java/jdpi/awt/image/RenderedImage.java create mode 100644 JavaApp/src/main/java/jdpi/awt/image/WritableRaster.java diff --git a/JavaApp/src/main/java/jdpi/awt/BorderLayout.java b/JavaApp/src/main/java/jdpi/awt/BorderLayout.java new file mode 100644 index 00000000..d4ba8bc8 --- /dev/null +++ b/JavaApp/src/main/java/jdpi/awt/BorderLayout.java @@ -0,0 +1,4 @@ +package net.zhuoweizhang.makeshift.java.awt; + +public class BorderLayout extends LayoutManager { +} diff --git a/JavaApp/src/main/java/jdpi/awt/Canvas.java b/JavaApp/src/main/java/jdpi/awt/Canvas.java new file mode 100644 index 00000000..6f331986 --- /dev/null +++ b/JavaApp/src/main/java/jdpi/awt/Canvas.java @@ -0,0 +1,21 @@ +package jdpi.awt; + +import org.lwjgl.glfw.GLFW; + +public class Canvas extends Component { + + public void setPreferredSize(Dimension dim) { + } + + public Graphics getGraphics() { + return null; + } + + public int getWidth() { + return GLFW.mGLFWWindowWidth; + } + + public int getHeight() { + return GLFW.mGLFWWindowHeight; + } +} \ No newline at end of file diff --git a/JavaApp/src/main/java/jdpi/awt/Color.java b/JavaApp/src/main/java/jdpi/awt/Color.java new file mode 100644 index 00000000..9205f118 --- /dev/null +++ b/JavaApp/src/main/java/jdpi/awt/Color.java @@ -0,0 +1,27 @@ +package jdpi.awt; + +public class Color extends java.awt.Color { + public Color(int r, int g, int b) { + super(r, g, b); + } + + public Color(int r, int g, int b, int a) { + super(r, g, b, a); + } + + public Color(int rgb) { + super(rgb); + } + + public Color(int rgba, boolean hasalpha) { + super(rgba, hasalpha); + } + + public Color(float r, float g, float b) { + super(r, g, b); + } + + public Color(float r, float g, float b, float a) { + super(r, g, b, a); + } +} \ No newline at end of file diff --git a/JavaApp/src/main/java/jdpi/awt/Component.java b/JavaApp/src/main/java/jdpi/awt/Component.java new file mode 100644 index 00000000..99f308b7 --- /dev/null +++ b/JavaApp/src/main/java/jdpi/awt/Component.java @@ -0,0 +1,18 @@ +package jdpi.awt; + +import org.lwjgl.glfw.GLFW; + +public class Component { + //setPreferredSize + + public int getWidth() { + return GLFW.mGLFWWindowWidth; + } + + public int getHeight() { + return GLFW.mGLFWWindowHeight; + } + + public void setVisible(boolean visible) { + } +} diff --git a/JavaApp/src/main/java/jdpi/awt/Container.java b/JavaApp/src/main/java/jdpi/awt/Container.java new file mode 100644 index 00000000..1e58ba53 --- /dev/null +++ b/JavaApp/src/main/java/jdpi/awt/Container.java @@ -0,0 +1,9 @@ +package jdpi.awt; + +public class Container extends Component { + public void add(Component component, Object something) { + } + + public void setLayout(LayoutManager mgr) { + } +} diff --git a/JavaApp/src/main/java/jdpi/awt/Dimension.java b/JavaApp/src/main/java/jdpi/awt/Dimension.java new file mode 100644 index 00000000..82f82d64 --- /dev/null +++ b/JavaApp/src/main/java/jdpi/awt/Dimension.java @@ -0,0 +1,15 @@ +package jdpi.awt; + +public class Dimension extends java.awt.Dimension { + public Dimension() { + this(0, 0); + } + + public Dimension(Dimension d) { + this(d.width, d.height); + } + + public Dimension(int width, int height) { + super(width, height); + } +} diff --git a/JavaApp/src/main/java/jdpi/awt/Frame.java b/JavaApp/src/main/java/jdpi/awt/Frame.java new file mode 100644 index 00000000..ab5f0d57 --- /dev/null +++ b/JavaApp/src/main/java/jdpi/awt/Frame.java @@ -0,0 +1,7 @@ +package jdpi.awt; + +public class Frame extends Window { + public Frame(String title) { + super(title); + } +} \ No newline at end of file diff --git a/JavaApp/src/main/java/jdpi/awt/Graphics.java b/JavaApp/src/main/java/jdpi/awt/Graphics.java new file mode 100644 index 00000000..0b96d6d7 --- /dev/null +++ b/JavaApp/src/main/java/jdpi/awt/Graphics.java @@ -0,0 +1,36 @@ +package jdpi.awt; + +import jdpi.awt.image.*; + +public class Graphics { + protected java.awt.Graphics2D g2d; + + public Graphics(java.awt.Graphics g2d) { + this((java.awt.Graphics2D) g2d); + } + + public Graphics(java.awt.Graphics2D g2d) { + this.g2d = g2d; + } + + public void setColor(Color color) { + g2d.setColor(color); + } + + public void fillRect(int x, int y, int width, int height) { + g2d.fillRect(x, y, width, height); + } + + public void drawString(String s, int x, int y) { + g2d.drawString(s, x, y); + } + + public void dispose() { + g2d.dispose(); + } + + public boolean drawImage(Image image, int x, int y, ImageObserver observer) { + if (!(image instanceof BufferedImage)) return true; + return g2d.drawImage(((BufferedImage) image).getBaseImage()); + } +} diff --git a/JavaApp/src/main/java/jdpi/awt/Graphics2D.java b/JavaApp/src/main/java/jdpi/awt/Graphics2D.java new file mode 100644 index 00000000..59ae7b51 --- /dev/null +++ b/JavaApp/src/main/java/jdpi/awt/Graphics2D.java @@ -0,0 +1,7 @@ +package jdpi.awt; + +public class Graphics2D extends Graphics { + public Graphics2D(java.awt.Graphics2D g2d) { + super(g2d); + } +} diff --git a/JavaApp/src/main/java/jdpi/awt/GraphicsEnvironment.java b/JavaApp/src/main/java/jdpi/awt/GraphicsEnvironment.java new file mode 100644 index 00000000..0b892918 --- /dev/null +++ b/JavaApp/src/main/java/jdpi/awt/GraphicsEnvironment.java @@ -0,0 +1,6 @@ +package jdpi.awt; +public class GraphicsEnvironment { + public static boolean isHeadless() { + return true; + } +} diff --git a/JavaApp/src/main/java/jdpi/awt/Image.java b/JavaApp/src/main/java/jdpi/awt/Image.java new file mode 100644 index 00000000..dc53a14f --- /dev/null +++ b/JavaApp/src/main/java/jdpi/awt/Image.java @@ -0,0 +1,5 @@ +package jdpi.awt; + +public abstract class Image { + +} diff --git a/JavaApp/src/main/java/jdpi/awt/LayoutManager.java b/JavaApp/src/main/java/jdpi/awt/LayoutManager.java new file mode 100644 index 00000000..c91554e8 --- /dev/null +++ b/JavaApp/src/main/java/jdpi/awt/LayoutManager.java @@ -0,0 +1,4 @@ +package jdpi.awt; + +public class LayoutManager { +} diff --git a/JavaApp/src/main/java/jdpi/awt/Window.java b/JavaApp/src/main/java/jdpi/awt/Window.java new file mode 100644 index 00000000..498b8d80 --- /dev/null +++ b/JavaApp/src/main/java/jdpi/awt/Window.java @@ -0,0 +1,17 @@ +package jdpi.awt; + +import jdpi.awt.event.*; + +public class Window extends Container { + public Window(String title) { + } + + public void addWindowListener(WindowListener listener) { + } + + public void pack() { + } + + public void setLocationRelativeTo(Component comp) { + } +} diff --git a/JavaApp/src/main/java/jdpi/awt/event/WindowAdapter.java b/JavaApp/src/main/java/jdpi/awt/event/WindowAdapter.java new file mode 100644 index 00000000..bcbbf05f --- /dev/null +++ b/JavaApp/src/main/java/jdpi/awt/event/WindowAdapter.java @@ -0,0 +1,4 @@ +package jdpi.awt.event; + +public class WindowAdapter implements WindowListener { +} \ No newline at end of file diff --git a/JavaApp/src/main/java/jdpi/awt/event/WindowListener.java b/JavaApp/src/main/java/jdpi/awt/event/WindowListener.java new file mode 100644 index 00000000..cc8801e2 --- /dev/null +++ b/JavaApp/src/main/java/jdpi/awt/event/WindowListener.java @@ -0,0 +1,4 @@ +package jdpi.awt.event; + +public interface WindowListener { +} \ No newline at end of file diff --git a/JavaApp/src/main/java/jdpi/awt/image/BufferedImage.java b/JavaApp/src/main/java/jdpi/awt/image/BufferedImage.java new file mode 100644 index 00000000..ff8346be --- /dev/null +++ b/JavaApp/src/main/java/jdpi/awt/image/BufferedImage.java @@ -0,0 +1,42 @@ +package jdpi.awt; + +import jdpi.awt.Image; + +public class BufferedImage extends Inage { + private java.awt.BufferedImage mImg; + public BufferedImage(int width, int height, int imageType) { + mImg = new java.awt.BufferedImage(width, height, imageType); + } + + public Graphics getGraphics() { + return new Graphics2D(mImg.getGraphics()); + } + + public Graphics2D createGraphics() { + return new Graphics2D(mImg.createGraphics()); + } + + public int getWidth() { + return mImg.getWidth(); + } + + public int getHeight() { + return mImg.getHeight(); + } + + public int[] getRGB(int startX, int startY, int w, int h, int[] rgbArray, int offset, int scansize) { + return mImg.getRGB(startX, startY, w, h, rgbArray, offset, scansize); + } + + public void setRGB(int startX, int startY, int w, int h, int[] rgbArray, int offset, int scansize) { + mImg.setRGB(startX, startY, w, h, rgbArray, offset, scansize); + } + + public WritableRaster getRaster() { + return new WritableRaster(mIng.getRaster()); + } + + public java.awt.BufferedImage getBaseImage() { + return mImg; + } +} diff --git a/JavaApp/src/main/java/jdpi/awt/image/DataBuffer.java b/JavaApp/src/main/java/jdpi/awt/image/DataBuffer.java new file mode 100644 index 00000000..84e5da56 --- /dev/null +++ b/JavaApp/src/main/java/jdpi/awt/image/DataBuffer.java @@ -0,0 +1,5 @@ +package jdpi.awt.image; + +public class DataBuffer { + +} diff --git a/JavaApp/src/main/java/jdpi/awt/image/DataBufferInt.java b/JavaApp/src/main/java/jdpi/awt/image/DataBufferInt.java new file mode 100644 index 00000000..d96425ee --- /dev/null +++ b/JavaApp/src/main/java/jdpi/awt/image/DataBufferInt.java @@ -0,0 +1,11 @@ +package jdpi.awt.image; + +public class DataBufferInt extends DataBuffer { + private int[] array; + public DataBufferInt(int[] array, int size) { + this.array = array; + } + public int[] getData() { + return array; + } +} diff --git a/JavaApp/src/main/java/jdpi/awt/image/ImageObserver.java b/JavaApp/src/main/java/jdpi/awt/image/ImageObserver.java new file mode 100644 index 00000000..78260c2f --- /dev/null +++ b/JavaApp/src/main/java/jdpi/awt/image/ImageObserver.java @@ -0,0 +1,5 @@ +package jdpi.awt.image; + +public class ImageObserver { + +} diff --git a/JavaApp/src/main/java/jdpi/awt/image/RenderedImage.java b/JavaApp/src/main/java/jdpi/awt/image/RenderedImage.java new file mode 100644 index 00000000..6ac97528 --- /dev/null +++ b/JavaApp/src/main/java/jdpi/awt/image/RenderedImage.java @@ -0,0 +1,4 @@ +package jdpi.awt.image; + +public interface RenderedImage { +} \ No newline at end of file diff --git a/JavaApp/src/main/java/jdpi/awt/image/WritableRaster.java b/JavaApp/src/main/java/jdpi/awt/image/WritableRaster.java new file mode 100644 index 00000000..756ce896 --- /dev/null +++ b/JavaApp/src/main/java/jdpi/awt/image/WritableRaster.java @@ -0,0 +1,13 @@ +package jdpi.awt.image; + +public class WritableRaster { + private BufferedImage image; + public WritableRaster(BufferedImage image) { + this.image = image; + } + public DataBuffer getDataBuffer() { + int[] theBuf = new int[image.getWidth() * image.getHeight()]; + image.getRGB(0, 0, image.getWidth(), image.getHeight(), theBuf, 0, image.getWidth()); + return new DataBufferInt(theBuf, theBuf.length); + } +}