diff --git a/.gitignore b/.gitignore index 5a49e12b..658f96ed 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ # Package Files # !/target/*.jar +!/libs/*.jar *.war *.jar *.ear @@ -20,6 +21,7 @@ VBO_Example.java /target/ !/target/*.jar +!libs/**/*.jar /backups/ /Resources_and_Videos/ diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 00000000..a1a0f1a1 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 00000000..b26911bd --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 00000000..4b661a5f --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..35eb1ddf --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 2549f89f..8a74449f 100755 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ src/main/java src/main/java src/main/resources + veryverylongandparticularpath/abcd @@ -45,16 +46,29 @@ - - jarprofile - - jar-specific - src/main/rules - - - true - - + + aarch64 + + + false + + + org/warp/picalculator/gui/graphicengine/gpu/* + + + + jarprofile + + jar-specific + src/main/rules + + + true + + org.jogamp.jogl jogl-all-main @@ -65,27 +79,27 @@ gluegen-rt-main 2.3.2 - - com.pi4j - pi4j-core - 1.2-SNAPSHOT - - - org.fusesource.jansi - jansi - 1.15 - - - net.lingala.zip4j - zip4j - 1.3.2 - - - org.eclipse.jdt.core.compiler - ecj - 4.6.1 - - + + com.pi4j + pi4j-core + 1.2-SNAPSHOT + + + org.fusesource.jansi + jansi + 1.15 + + + net.lingala.zip4j + zip4j + 1.3.2 + + + org.eclipse.jdt.core.compiler + ecj + 4.6.1 + + @@ -94,22 +108,22 @@ maven-compiler-plugin 2.3.2 - - org/warp/picalculator/gui/graphicengine/html/* - 1.8 1.8 UTF-8 + + ${buildprops.exclude1} + - + jsprofile js-specific - src/main/rules + src/main/rules false @@ -186,7 +200,7 @@ - it.unimi.dsi @@ -300,10 +314,10 @@ - diff --git a/src/jar-specific/java/org/warp/picalculator/deps/DEngine.java b/src/jar-specific/java/org/warp/picalculator/deps/DEngine.java index 7f45661d..cfcb6ab9 100644 --- a/src/jar-specific/java/org/warp/picalculator/deps/DEngine.java +++ b/src/jar-specific/java/org/warp/picalculator/deps/DEngine.java @@ -1,13 +1,18 @@ package org.warp.picalculator.deps; import org.warp.picalculator.ClassUtils; +import org.warp.picalculator.StaticVars; import org.warp.picalculator.gui.graphicengine.GraphicEngine; import org.warp.picalculator.gui.graphicengine.cpu.CPUEngine; import org.warp.picalculator.gui.graphicengine.framebuffer.FBEngine; public class DEngine { public static GraphicEngine newGPUEngine() { - return new org.warp.picalculator.gui.graphicengine.gpu.GPUEngine(); + try { + return (GraphicEngine) ClassUtils.newClassInstance("org.warp.picalculator.gui.graphicengine.gpu.GPUEngine"); + } catch (NullPointerException ex) { + return null; + } } public static GraphicEngine newHeadless24bitEngine() { return new org.warp.picalculator.gui.graphicengine.headless24bit.Headless24bitEngine(); diff --git a/src/jar-specific/java/org/warp/picalculator/deps/StorageUtils.java b/src/jar-specific/java/org/warp/picalculator/deps/StorageUtils.java index a97ae4b1..95c1f37f 100644 --- a/src/jar-specific/java/org/warp/picalculator/deps/StorageUtils.java +++ b/src/jar-specific/java/org/warp/picalculator/deps/StorageUtils.java @@ -25,11 +25,10 @@ import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; +import org.apache.commons.io.IOUtils; import org.warp.picalculator.ClassUtils; import org.warp.picalculator.Main; -import com.jogamp.common.util.IOUtil; - public class StorageUtils { public static final boolean exists(Path f) { return Files.exists(f); @@ -77,7 +76,7 @@ public class StorageUtils { tempFile.deleteOnExit(); try (FileOutputStream out = new FileOutputStream(tempFile)) { - IOUtil.copyStream2Stream(is, out, (int) tempFile.length()); + IOUtils.copy(is, out, (int) tempFile.length()); } resourcesCache.put(string, tempFile); diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/html/HtmlEngine.java b/src/js-specific/java/org/warp/picalculator/gui/graphicengine/html/HtmlEngine.java similarity index 96% rename from src/main/java/org/warp/picalculator/gui/graphicengine/html/HtmlEngine.java rename to src/js-specific/java/org/warp/picalculator/gui/graphicengine/html/HtmlEngine.java index 710a4cbf..60ecd2ad 100644 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/html/HtmlEngine.java +++ b/src/js-specific/java/org/warp/picalculator/gui/graphicengine/html/HtmlEngine.java @@ -1,296 +1,296 @@ -package org.warp.picalculator.gui.graphicengine.html; - -import java.io.IOException; -import java.util.concurrent.Semaphore; - -import org.teavm.jso.JSBody; -import org.teavm.jso.JSObject; -import org.teavm.jso.browser.Window; -import org.teavm.jso.canvas.CanvasGradient; -import org.teavm.jso.canvas.CanvasRenderingContext2D; -import org.teavm.jso.dom.events.Event; -import org.teavm.jso.dom.events.EventListener; -import org.teavm.jso.dom.events.EventTarget; -import org.teavm.jso.dom.events.KeyboardEvent; -import org.teavm.jso.dom.html.HTMLButtonElement; -import org.teavm.jso.dom.html.HTMLCanvasElement; -import org.teavm.jso.dom.html.HTMLDocument; -import org.teavm.jso.dom.html.HTMLElement; -import org.teavm.jso.dom.html.HTMLInputElement; -import org.teavm.jso.dom.xml.NodeList; -import org.teavm.jso.json.JSON; -import org.warp.picalculator.PlatformUtils; -import org.warp.picalculator.Utils; -import org.warp.picalculator.deps.DSemaphore; -import org.warp.picalculator.deps.StorageUtils; -import org.warp.picalculator.device.Keyboard; -import org.warp.picalculator.gui.graphicengine.BinaryFont; -import org.warp.picalculator.gui.graphicengine.GraphicEngine; -import org.warp.picalculator.gui.graphicengine.Renderer; -import org.warp.picalculator.gui.graphicengine.RenderingLoop; -import org.warp.picalculator.gui.graphicengine.Skin; -import org.warp.picalculator.gui.graphicengine.cpu.CPUFont; -import org.warp.picalculator.gui.graphicengine.cpu.CPUSkin; - -public class HtmlEngine implements GraphicEngine { - - private boolean initialized; - public DSemaphore exitSemaphore = new DSemaphore(0); - private static final HTMLDocument document = Window.current().getDocument(); - private HTMLCanvasElement canvas; - private CanvasRenderingContext2D g; - private RenderingLoop renderingLoop; - private HtmlRenderer renderer; - private int width = -1, height = -1; - private final int frameTime = (int) (1000d/10d); - - @Override - public int[] getSize() { - return new int[] { getWidth(), getHeight() }; - } - - @Override - public boolean isInitialized() { - return initialized; - } - - @Override - public void setTitle(String title) { - HtmlEngine.setHTMLTitle(title); - } - - @JSBody(params = {"wndTitle"}, script = "document.title = wndTitle") - private static native void setHTMLTitle(String wndTitle); - - @Override - public void setResizable(boolean r) {} - - @Override - public void setDisplayMode(int ww, int wh) { - canvas.setWidth(ww); - width = ww; - canvas.setHeight(wh); - height = wh; - } - - private String previousValue=""; - - @Override - public void create(Runnable onInitialized) { - canvas = (HTMLCanvasElement) document.createElement("canvas"); - g = (CanvasRenderingContext2D ) canvas.getContext("2d"); - HTMLInputElement keyInput = (HTMLInputElement) document.createElement("input"); - keyInput.setType("text"); - keyInput.getStyle().setProperty("opacity", "0.1"); - setDisplayMode(480, 320); - document.getElementById("container").appendChild(canvas); - document.getBody().appendChild(keyInput); - keyInput.setTabIndex(0); - keyInput.addEventListener("keydown", (KeyboardEvent evt) -> { - evt.preventDefault(); - new Thread(() -> { - previousValue = keyInput.getValue(); - Keyboard.debugKeyPressed(evt.getKeyCode()); - System.out.println(evt.getKeyCode()); - System.out.println(""+(int) evt.getKey().charAt(0)); - }).start(); - }); - keyInput.addEventListener("input", (Event evt) -> { - evt.preventDefault(); - final String previousValue = this.previousValue; - final String newValue = keyInput.getValue(); - final int prevLen = previousValue.length(); - final int newLen = newValue.length(); - - new Thread(() -> { - if (newLen == prevLen) { - - } else if (newLen - prevLen == 1) { - Keyboard.debugKeyPressed((int) newValue.toUpperCase().charAt(newLen-1)); - } else if (newLen - prevLen > 1) { - for (int i = 0; i < newLen - prevLen; i++) { - Keyboard.debugKeyPressed((int) newValue.toUpperCase().charAt(prevLen + i)); - } - } else if (newLen - prevLen < 1) { - for (int i = 0; i < prevLen - newLen; i++) { - Keyboard.debugKeyPressed(8); - } - } - }).start(); - }); - canvas.addEventListener("click", (Event evt) -> { - keyInput.focus(); - }); - document.addEventListener("DOMContentLoaded", (Event e) -> { - keyInput.focus(); - }); - NodeList buttons = document.getBody().getElementsByTagName("button"); - for (int i = 0; i < buttons.getLength(); i++) { - if (buttons.item(i).hasAttribute("keycode")) { - buttons.item(i).addEventListener("click", (Event evt) -> { - evt.preventDefault(); - EventTarget target = evt.getCurrentTarget(); - HTMLButtonElement button = target.cast(); - new Thread(() -> { - try { - if (button.hasAttribute("keycode") && button.getAttribute("keycode").contains(",")) { - String code = button.getAttribute("keycode"); - String[] coordinates = code.split(",", 2); - boolean removeshift = Keyboard.shift && Integer.parseInt(coordinates[0]) != 0 && Integer.parseInt(coordinates[1]) != 0; - boolean removealpha = Keyboard.alpha && Integer.parseInt(coordinates[0]) != 0 && Integer.parseInt(coordinates[1]) != 1; - Keyboard.keyPressedRaw(Integer.parseInt(coordinates[0]), Integer.parseInt(coordinates[1])); - if (removeshift) { - Keyboard.keyPressedRaw(0,0); - } - if (removealpha) { - Keyboard.keyPressedRaw(0,1); - } - Thread.sleep(100); - Keyboard.keyReleasedRaw(Integer.parseInt(coordinates[0]), Integer.parseInt(coordinates[1])); - if (removeshift) { - Keyboard.keyReleasedRaw(0,0); - } - if (removealpha) { - Keyboard.keyReleasedRaw(0,1); - } - } else { - if (Keyboard.alpha && !Keyboard.shift) { - if (button.hasAttribute("keycodea")) { - Keyboard.debugKeyPressed(Integer.parseInt(button.getAttribute("keycodea"))); - } else { - Keyboard.debugKeyPressed(Integer.parseInt(button.getAttribute("keycode"))); - } - } else if (!Keyboard.alpha && Keyboard.shift) { - if (button.hasAttribute("keycodes")) { - Keyboard.debugKeyPressed(Integer.parseInt(button.getAttribute("keycodes"))); - } else { - Keyboard.debugKeyPressed(Integer.parseInt(button.getAttribute("keycode"))); - } - } else if (Keyboard.alpha && Keyboard.shift) { - if (button.hasAttribute("keycodesa")) { - Keyboard.debugKeyPressed(Integer.parseInt(button.getAttribute("keycodesa"))); - } else { - if (button.hasAttribute("keycodes")) { - Keyboard.debugKeyPressed(Integer.parseInt(button.getAttribute("keycodes"))); - } else { - Keyboard.debugKeyPressed(Integer.parseInt(button.getAttribute("keycode"))); - } - } - } else { - Keyboard.debugKeyPressed(Integer.parseInt(button.getAttribute("keycode"))); - } - } - } catch (Exception ex) { - ex.printStackTrace(); - } - }).start(); - }); - } - } - renderer = new HtmlRenderer(this, g); - initialized = true; - if (onInitialized != null) { - onInitialized.run(); - } - } - - @Override - public boolean wasResized() { - return false; - } - - @Override - public int getWidth() { - if (width == -1) { - width = canvas.getWidth(); - } - return width; - } - - @Override - public int getHeight() { - if (height == -1) { - height = canvas.getHeight(); - } - return height; - } - - @Override - public void destroy() { - document.getBody().removeChild(canvas); - initialized = false; - exitSemaphore.release(); - } - - @Override - public void start(RenderingLoop d) { - renderingLoop = d; - final Thread th = new Thread(() -> { - try { - double extratime = 0; - while (initialized) { - final long start = System.currentTimeMillis(); - repaint(); - final long end = System.currentTimeMillis(); - final double delta = (end - start) / 1000d; - final int deltaInt = (int) Math.floor(delta); - final int extraTimeInt = (int) Math.floor(extratime); - if (extraTimeInt + deltaInt < frameTime) { - Thread.sleep(frameTime - (extraTimeInt + deltaInt)); - extratime = 0; - } else { - extratime += delta - frameTime; - } - } - } catch (final InterruptedException e) { - e.printStackTrace(); - } - }); - PlatformUtils.setThreadName(th, "Canvas rendering thread"); - PlatformUtils.setDaemon(th); - th.start(); - } - - @Override - public void repaint() { - renderingLoop.refresh(); - } - - @Override - public HtmlRenderer getRenderer() { - return renderer; - } - - @Override - public HtmlFont loadFont(String fontName) throws IOException { - return new HtmlFont(fontName); - } - - @Override - public HtmlFont loadFont(String path, String fontName) throws IOException { - return new HtmlFont(fontName); - } - - @Override - public HtmlSkin loadSkin(String file) throws IOException { - return new HtmlSkin(file); - } - - @Override - public void waitForExit() { - try { - exitSemaphore.acquire(); - } catch (final InterruptedException e) {} - } - - @Override - public boolean isSupported() { - return PlatformUtils.isJavascript; - } - - @Override - public boolean doesRefreshPauses() { - return true; - } - -} +package org.warp.picalculator.gui.graphicengine.html; + +import java.io.IOException; +import java.util.concurrent.Semaphore; + +import org.teavm.jso.JSBody; +import org.teavm.jso.JSObject; +import org.teavm.jso.browser.Window; +import org.teavm.jso.canvas.CanvasGradient; +import org.teavm.jso.canvas.CanvasRenderingContext2D; +import org.teavm.jso.dom.events.Event; +import org.teavm.jso.dom.events.EventListener; +import org.teavm.jso.dom.events.EventTarget; +import org.teavm.jso.dom.events.KeyboardEvent; +import org.teavm.jso.dom.html.HTMLButtonElement; +import org.teavm.jso.dom.html.HTMLCanvasElement; +import org.teavm.jso.dom.html.HTMLDocument; +import org.teavm.jso.dom.html.HTMLElement; +import org.teavm.jso.dom.html.HTMLInputElement; +import org.teavm.jso.dom.xml.NodeList; +import org.teavm.jso.json.JSON; +import org.warp.picalculator.PlatformUtils; +import org.warp.picalculator.Utils; +import org.warp.picalculator.deps.DSemaphore; +import org.warp.picalculator.deps.StorageUtils; +import org.warp.picalculator.device.Keyboard; +import org.warp.picalculator.gui.graphicengine.BinaryFont; +import org.warp.picalculator.gui.graphicengine.GraphicEngine; +import org.warp.picalculator.gui.graphicengine.Renderer; +import org.warp.picalculator.gui.graphicengine.RenderingLoop; +import org.warp.picalculator.gui.graphicengine.Skin; +import org.warp.picalculator.gui.graphicengine.cpu.CPUFont; +import org.warp.picalculator.gui.graphicengine.cpu.CPUSkin; + +public class HtmlEngine implements GraphicEngine { + + private boolean initialized; + public DSemaphore exitSemaphore = new DSemaphore(0); + private static final HTMLDocument document = Window.current().getDocument(); + private HTMLCanvasElement canvas; + private CanvasRenderingContext2D g; + private RenderingLoop renderingLoop; + private HtmlRenderer renderer; + private int width = -1, height = -1; + private final int frameTime = (int) (1000d/10d); + + @Override + public int[] getSize() { + return new int[] { getWidth(), getHeight() }; + } + + @Override + public boolean isInitialized() { + return initialized; + } + + @Override + public void setTitle(String title) { + HtmlEngine.setHTMLTitle(title); + } + + @JSBody(params = {"wndTitle"}, script = "document.title = wndTitle") + private static native void setHTMLTitle(String wndTitle); + + @Override + public void setResizable(boolean r) {} + + @Override + public void setDisplayMode(int ww, int wh) { + canvas.setWidth(ww); + width = ww; + canvas.setHeight(wh); + height = wh; + } + + private String previousValue=""; + + @Override + public void create(Runnable onInitialized) { + canvas = (HTMLCanvasElement) document.createElement("canvas"); + g = (CanvasRenderingContext2D ) canvas.getContext("2d"); + HTMLInputElement keyInput = (HTMLInputElement) document.createElement("input"); + keyInput.setType("text"); + keyInput.getStyle().setProperty("opacity", "0.1"); + setDisplayMode(480, 320); + document.getElementById("container").appendChild(canvas); + document.getBody().appendChild(keyInput); + keyInput.setTabIndex(0); + keyInput.addEventListener("keydown", (KeyboardEvent evt) -> { + evt.preventDefault(); + new Thread(() -> { + previousValue = keyInput.getValue(); + Keyboard.debugKeyPressed(evt.getKeyCode()); + System.out.println(evt.getKeyCode()); + System.out.println(""+(int) evt.getKey().charAt(0)); + }).start(); + }); + keyInput.addEventListener("input", (Event evt) -> { + evt.preventDefault(); + final String previousValue = this.previousValue; + final String newValue = keyInput.getValue(); + final int prevLen = previousValue.length(); + final int newLen = newValue.length(); + + new Thread(() -> { + if (newLen == prevLen) { + + } else if (newLen - prevLen == 1) { + Keyboard.debugKeyPressed((int) newValue.toUpperCase().charAt(newLen-1)); + } else if (newLen - prevLen > 1) { + for (int i = 0; i < newLen - prevLen; i++) { + Keyboard.debugKeyPressed((int) newValue.toUpperCase().charAt(prevLen + i)); + } + } else if (newLen - prevLen < 1) { + for (int i = 0; i < prevLen - newLen; i++) { + Keyboard.debugKeyPressed(8); + } + } + }).start(); + }); + canvas.addEventListener("click", (Event evt) -> { + keyInput.focus(); + }); + document.addEventListener("DOMContentLoaded", (Event e) -> { + keyInput.focus(); + }); + NodeList buttons = document.getBody().getElementsByTagName("button"); + for (int i = 0; i < buttons.getLength(); i++) { + if (buttons.item(i).hasAttribute("keycode")) { + buttons.item(i).addEventListener("click", (Event evt) -> { + evt.preventDefault(); + EventTarget target = evt.getCurrentTarget(); + HTMLButtonElement button = target.cast(); + new Thread(() -> { + try { + if (button.hasAttribute("keycode") && button.getAttribute("keycode").contains(",")) { + String code = button.getAttribute("keycode"); + String[] coordinates = code.split(",", 2); + boolean removeshift = Keyboard.shift && Integer.parseInt(coordinates[0]) != 0 && Integer.parseInt(coordinates[1]) != 0; + boolean removealpha = Keyboard.alpha && Integer.parseInt(coordinates[0]) != 0 && Integer.parseInt(coordinates[1]) != 1; + Keyboard.keyPressedRaw(Integer.parseInt(coordinates[0]), Integer.parseInt(coordinates[1])); + if (removeshift) { + Keyboard.keyPressedRaw(0,0); + } + if (removealpha) { + Keyboard.keyPressedRaw(0,1); + } + Thread.sleep(100); + Keyboard.keyReleasedRaw(Integer.parseInt(coordinates[0]), Integer.parseInt(coordinates[1])); + if (removeshift) { + Keyboard.keyReleasedRaw(0,0); + } + if (removealpha) { + Keyboard.keyReleasedRaw(0,1); + } + } else { + if (Keyboard.alpha && !Keyboard.shift) { + if (button.hasAttribute("keycodea")) { + Keyboard.debugKeyPressed(Integer.parseInt(button.getAttribute("keycodea"))); + } else { + Keyboard.debugKeyPressed(Integer.parseInt(button.getAttribute("keycode"))); + } + } else if (!Keyboard.alpha && Keyboard.shift) { + if (button.hasAttribute("keycodes")) { + Keyboard.debugKeyPressed(Integer.parseInt(button.getAttribute("keycodes"))); + } else { + Keyboard.debugKeyPressed(Integer.parseInt(button.getAttribute("keycode"))); + } + } else if (Keyboard.alpha && Keyboard.shift) { + if (button.hasAttribute("keycodesa")) { + Keyboard.debugKeyPressed(Integer.parseInt(button.getAttribute("keycodesa"))); + } else { + if (button.hasAttribute("keycodes")) { + Keyboard.debugKeyPressed(Integer.parseInt(button.getAttribute("keycodes"))); + } else { + Keyboard.debugKeyPressed(Integer.parseInt(button.getAttribute("keycode"))); + } + } + } else { + Keyboard.debugKeyPressed(Integer.parseInt(button.getAttribute("keycode"))); + } + } + } catch (Exception ex) { + ex.printStackTrace(); + } + }).start(); + }); + } + } + renderer = new HtmlRenderer(this, g); + initialized = true; + if (onInitialized != null) { + onInitialized.run(); + } + } + + @Override + public boolean wasResized() { + return false; + } + + @Override + public int getWidth() { + if (width == -1) { + width = canvas.getWidth(); + } + return width; + } + + @Override + public int getHeight() { + if (height == -1) { + height = canvas.getHeight(); + } + return height; + } + + @Override + public void destroy() { + document.getBody().removeChild(canvas); + initialized = false; + exitSemaphore.release(); + } + + @Override + public void start(RenderingLoop d) { + renderingLoop = d; + final Thread th = new Thread(() -> { + try { + double extratime = 0; + while (initialized) { + final long start = System.currentTimeMillis(); + repaint(); + final long end = System.currentTimeMillis(); + final double delta = (end - start) / 1000d; + final int deltaInt = (int) Math.floor(delta); + final int extraTimeInt = (int) Math.floor(extratime); + if (extraTimeInt + deltaInt < frameTime) { + Thread.sleep(frameTime - (extraTimeInt + deltaInt)); + extratime = 0; + } else { + extratime += delta - frameTime; + } + } + } catch (final InterruptedException e) { + e.printStackTrace(); + } + }); + PlatformUtils.setThreadName(th, "Canvas rendering thread"); + PlatformUtils.setDaemon(th); + th.start(); + } + + @Override + public void repaint() { + renderingLoop.refresh(); + } + + @Override + public HtmlRenderer getRenderer() { + return renderer; + } + + @Override + public HtmlFont loadFont(String fontName) throws IOException { + return new HtmlFont(fontName); + } + + @Override + public HtmlFont loadFont(String path, String fontName) throws IOException { + return new HtmlFont(fontName); + } + + @Override + public HtmlSkin loadSkin(String file) throws IOException { + return new HtmlSkin(file); + } + + @Override + public void waitForExit() { + try { + exitSemaphore.acquire(); + } catch (final InterruptedException e) {} + } + + @Override + public boolean isSupported() { + return PlatformUtils.isJavascript; + } + + @Override + public boolean doesRefreshPauses() { + return true; + } + +} diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/html/HtmlFont.java b/src/js-specific/java/org/warp/picalculator/gui/graphicengine/html/HtmlFont.java similarity index 96% rename from src/main/java/org/warp/picalculator/gui/graphicengine/html/HtmlFont.java rename to src/js-specific/java/org/warp/picalculator/gui/graphicengine/html/HtmlFont.java index c38ac69c..98a7a31a 100644 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/html/HtmlFont.java +++ b/src/js-specific/java/org/warp/picalculator/gui/graphicengine/html/HtmlFont.java @@ -1,68 +1,68 @@ -package org.warp.picalculator.gui.graphicengine.html; - -import java.io.IOException; - -import org.teavm.jso.browser.Window; -import org.teavm.jso.canvas.CanvasRenderingContext2D; -import org.teavm.jso.dom.html.HTMLCanvasElement; -import org.teavm.jso.dom.html.HTMLDocument; -import org.teavm.jso.dom.html.HTMLImageElement; -import org.teavm.jso.typedarrays.Uint8ClampedArray; -import org.warp.picalculator.StaticVars; -import org.warp.picalculator.gui.graphicengine.GraphicEngine; -import org.warp.picalculator.gui.graphicengine.cpu.CPUFont; - -public class HtmlFont extends CPUFont { - - public HTMLCanvasElement imgEl; - public CanvasRenderingContext2D imgElCtx; - - public HtmlFont(String fontName) throws IOException { - super(fontName); - HTMLDocument doc = Window.current().getDocument(); - imgEl = doc.createElement("canvas").cast(); - imgEl.setClassName("hidden"); - doc.getBody().appendChild(imgEl); - imgElCtx = imgEl.getContext("2d").cast(); - imgEl.setWidth(this.charW); - imgEl.setHeight(this.charH * intervalsTotalSize); - - int screenPos = 0; - - int currentInt; - int currentIntBitPosition; - int bitData; - int j; - imgElCtx.clearRect(0, 0, imgEl.getWidth(), imgEl.getHeight()); - imgElCtx.setFillStyle("#000"); - int minBound = 0, maxBound = intervalsTotalSize-1; - System.out.println("charIndex:"+0); - System.out.println("minBound"+minBound); - System.out.println("maxBound"+maxBound); - for (int charIndex = minBound; charIndex < maxBound; charIndex++) { - for (int dy = 0; dy < charH; dy++) { - for (int dx = 0; dx < charW; dx++) { - j = dx; - final int bit = dx + dy * charW; - currentInt = (int) (Math.floor(bit) / (HtmlFont.intBits)); - currentIntBitPosition = bit - (currentInt * HtmlFont.intBits); - final int charIdx = charIndex * charIntCount + currentInt; - if (charIdx >= 0 && charIdx < chars32.length) { - bitData = (chars32[charIdx] >> currentIntBitPosition) & 1; - if (bitData == 1) { - imgElCtx.fillRect( dx, charIndex*charH+dy, 1, 1 ); - } - } - } - } - } - } - - @Override - public void use(GraphicEngine d) { - if (d.getRenderer() instanceof HtmlRenderer) { - ((HtmlRenderer) d.getRenderer()).f = this; - } - } - -} +package org.warp.picalculator.gui.graphicengine.html; + +import java.io.IOException; + +import org.teavm.jso.browser.Window; +import org.teavm.jso.canvas.CanvasRenderingContext2D; +import org.teavm.jso.dom.html.HTMLCanvasElement; +import org.teavm.jso.dom.html.HTMLDocument; +import org.teavm.jso.dom.html.HTMLImageElement; +import org.teavm.jso.typedarrays.Uint8ClampedArray; +import org.warp.picalculator.StaticVars; +import org.warp.picalculator.gui.graphicengine.GraphicEngine; +import org.warp.picalculator.gui.graphicengine.cpu.CPUFont; + +public class HtmlFont extends CPUFont { + + public HTMLCanvasElement imgEl; + public CanvasRenderingContext2D imgElCtx; + + public HtmlFont(String fontName) throws IOException { + super(fontName); + HTMLDocument doc = Window.current().getDocument(); + imgEl = doc.createElement("canvas").cast(); + imgEl.setClassName("hidden"); + doc.getBody().appendChild(imgEl); + imgElCtx = imgEl.getContext("2d").cast(); + imgEl.setWidth(this.charW); + imgEl.setHeight(this.charH * intervalsTotalSize); + + int screenPos = 0; + + int currentInt; + int currentIntBitPosition; + int bitData; + int j; + imgElCtx.clearRect(0, 0, imgEl.getWidth(), imgEl.getHeight()); + imgElCtx.setFillStyle("#000"); + int minBound = 0, maxBound = intervalsTotalSize-1; + System.out.println("charIndex:"+0); + System.out.println("minBound"+minBound); + System.out.println("maxBound"+maxBound); + for (int charIndex = minBound; charIndex < maxBound; charIndex++) { + for (int dy = 0; dy < charH; dy++) { + for (int dx = 0; dx < charW; dx++) { + j = dx; + final int bit = dx + dy * charW; + currentInt = (int) (Math.floor(bit) / (HtmlFont.intBits)); + currentIntBitPosition = bit - (currentInt * HtmlFont.intBits); + final int charIdx = charIndex * charIntCount + currentInt; + if (charIdx >= 0 && charIdx < chars32.length) { + bitData = (chars32[charIdx] >> currentIntBitPosition) & 1; + if (bitData == 1) { + imgElCtx.fillRect( dx, charIndex*charH+dy, 1, 1 ); + } + } + } + } + } + } + + @Override + public void use(GraphicEngine d) { + if (d.getRenderer() instanceof HtmlRenderer) { + ((HtmlRenderer) d.getRenderer()).f = this; + } + } + +} diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/html/HtmlRenderer.java b/src/js-specific/java/org/warp/picalculator/gui/graphicengine/html/HtmlRenderer.java similarity index 96% rename from src/main/java/org/warp/picalculator/gui/graphicengine/html/HtmlRenderer.java rename to src/js-specific/java/org/warp/picalculator/gui/graphicengine/html/HtmlRenderer.java index 1a9277aa..20dcdbf5 100644 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/html/HtmlRenderer.java +++ b/src/js-specific/java/org/warp/picalculator/gui/graphicengine/html/HtmlRenderer.java @@ -1,292 +1,292 @@ -package org.warp.picalculator.gui.graphicengine.html; - -import org.teavm.jso.canvas.CanvasImageSource; -import org.teavm.jso.canvas.CanvasRenderingContext2D; -import org.teavm.jso.dom.html.HTMLImageElement; -import org.teavm.jso.typedarrays.Uint8ClampedArray; -import org.warp.picalculator.StaticVars; -import org.warp.picalculator.gui.graphicengine.Renderer; - -public class HtmlRenderer implements Renderer { - private static final boolean ENABLE_SUPERSAMPLING = false; - private static final boolean ENABLE_TRANSPARENCY = true; - private String currentColor = "#000000ff"; - private String clearColor = "#000000ff"; - HtmlFont f = null; - HtmlSkin currentSkin = null; - private final CanvasRenderingContext2D g; - private final HtmlEngine e; - public HtmlRenderer(HtmlEngine e, CanvasRenderingContext2D g) { - this.g = g; - this.e = e; - } - - private String toHex(int c) { - final int a = c >> 24 & 0xFF; - final int r = c >> 16 & 0xFF; - final int gg = c >> 8 & 0xFF; - final int b = c & 0xFF; - return String.format("#%02x%02x%02x%02x", r, gg, b, a); - } - - private String toHex8(int c) { - final int r = c >> 16 & 0xFF; - final int gg = c >> 8 & 0xFF; - final int b = c & 0xFF; - return String.format("#%02x%02x%02x", r, gg, b); - } - - private String toHex(int r, int g, int b) { - return String.format("#%02x%02x%02x", r, g, b); - } - - private String toHex(int r, int g, int b, int a) { - return String.format("#%02x%02x%02x%02x", r, g, b, a); - } - - @Override - public int glGetClearColor() { - return hexToInt(clearColor); - } - - private int hexToInt(String hex) { - switch (hex.length()) { - case 6: - return (0xFF << 24) | - (Integer.valueOf(hex.substring(0, 2), 16) << 16) | - (Integer.valueOf(hex.substring(2, 4), 16) << 8) | - Integer.valueOf(hex.substring(4, 6), 16); - case 6+1: - return (0xFF << 24) | - (Integer.valueOf(hex.substring(0+1, 2+1), 16) << 16) | - (Integer.valueOf(hex.substring(2+1, 4+1), 16) << 8) | - Integer.valueOf(hex.substring(4+1, 6+1), 16); - case 8: - return (Integer.valueOf(hex.substring(6, 8), 16) << 24) | - (Integer.valueOf(hex.substring(0, 2), 16) << 16) | - (Integer.valueOf(hex.substring(2, 4), 16) << 8) | - Integer.valueOf(hex.substring(4, 6), 16); - case 8+1: - return (Integer.valueOf(hex.substring(6+1, 8+1), 16) << 24) | - (Integer.valueOf(hex.substring(0+1, 2+1), 16) << 16) | - (Integer.valueOf(hex.substring(2+1, 4+1), 16) << 8) | - Integer.valueOf(hex.substring(4+1, 6+1), 16); - } - return 0xFF000000; - } - - @Override - public void glFillRect(float x, float y, float width, float height, float uvX, float uvY, float uvWidth, - float uvHeight) { - if (currentSkin != null) { - glDrawSkin((int) x, (int) y, (int) (x + width), (int) (y + height), (int) uvX, (int) uvY, (int) (uvWidth + uvX), (int) (uvHeight + uvY), true); - } else { - glFillColor(x, y, width, height); - } - } - - @SuppressWarnings("unused") - private void glDrawSkin(int x0, int y0, int x1, int y1, int s0, int t0, int s1, int t1, boolean transparent) { - final int[] size = e.getSize(); - - x0 += StaticVars.screenPos[0]; - y0 += StaticVars.screenPos[1]; - final double incrementX = Math.abs((double) (x1 - x0) / (double) (s1 - s0)); - final double incrementY = Math.abs((double) (y1 - y0) / (double) (t1 - t0)); - final boolean flippedX = (x1 - x0) / (s1 - s0) < 0; - final boolean flippedY = (y1 - y0) / (t1 - t0) < 0; - int oldColor = 0; - int newColor; - final int onex = s0 <= s1 ? 1 : -1; - final int oney = t0 <= t1 ? 1 : -1; - int width = 0; - int height = 0; - if (onex == -1) { - final int s00 = s0; - s0 = s1; - s1 = s00; - width = s1 - s0; - } - if (oney == -1) { - final int t00 = t0; - t0 = t1; - t1 = t00; - height = t1 - t0; - } - if (x0 >= size[0] || y0 >= size[0]) { - return; - } - if (x0 + width >= size[0]) { - s1 = size[0] - x0 + s0; - } - if (y0 + height >= size[1]) { - t1 = size[1] - y0 + t0; - } - if (x0 < 0) { - if (onex == -1) { - width += x0; - s1 += x0 + 1; - } else { - s0 -= x0; - } - x0 = 0; - } - if (y0 < 0) { - if (oney == -1) { - height += y0; - t1 += y0 + 1; - } else { - t0 -= y0; - } - y0 = 0; - } - g.drawImage(currentSkin.getImgElement(), s0, t0, s1-s0, t1-t0, x0, y0, x1-x0, y1-y0); - } - - @Override - public void glFillColor(float x, float y, float width, float height) { - x += StaticVars.screenPos[0]; - y += StaticVars.screenPos[1]; - g.setFillStyle(currentColor); - g.fillRect( x, y, width, height ); - } - - @Override - public void glDrawStringRight(float x, float y, String text) { - glDrawStringLeft(x - f.getStringWidth(text), y, text); - } - - @Override - public void glDrawStringLeft(float x, float y, String textString) { - x += StaticVars.screenPos[0]; - y += StaticVars.screenPos[1]; - - f.imgElCtx.setGlobalCompositeOperation("source-in"); - f.imgElCtx.setFillStyle(currentColor); - f.imgElCtx.fillRect(0, 0, f.imgEl.getWidth(), f.imgEl.getHeight()); - - final int[] text = f.getCharIndexes(textString); - final int[] screenSize = e.getSize(); - int cpos; - final int l = text.length; - for (int i = 0; i < l; i++) { - cpos = (i * (f.charW)); - final int charIndex = text[i]; - g.drawImage(f.imgEl, 0, charIndex*f.charH, f.charW, f.charH, x+cpos, y, f.charW, f.charH); - } - } - - private int stackColors(int... color) { - double a = 0; - double r = 0; - double g = 0; - double b = 0; - for (final int newColor : color) { - final double alpha = (newColor >> 24 & 0xFF) / 255d; - a = a * (1d - alpha) + (newColor >> 24 & 0xFF) * alpha; - r = r * (1d - alpha) + (newColor >> 16 & 0xFF) * alpha; - g = g * (1d - alpha) + (newColor >> 8 & 0xFF) * alpha; - b = b * (1d - alpha) + (newColor & 0xFF) * alpha; - } - return ((int) a) << 24 | ((int) r) << 16 | ((int) g) << 8 | ((int) b); - } - - @Override - public void glDrawStringCenter(float x, float y, String text) { - glDrawStringLeft(x - (f.getStringWidth(text) / 2), y, text); - } - - @Override - public void glDrawLine(float x0, float y0, float x1, float y1) { - if (x1-x0 > 0 && y1-y0 > 0) { - g.beginPath(); - g.moveTo(x0, y0); - g.lineTo(x1, y1); - g.stroke(); - } else { - g.fillRect(x0, y0, (x1-x0)+1, (y1-y0)+1); - } - } - - @Override - public void glDrawCharRight(int x, int y, char ch) { - glDrawStringRight(x, y, ch + ""); - } - - @Override - public void glDrawCharLeft(int x, int y, char ch) { - glDrawStringLeft(x, y, ch + ""); - } - - @Override - public void glDrawCharCenter(int x, int y, char ch) { - glDrawStringCenter(x, y, ch + ""); - } - - @Override - public void glColor4i(int red, int green, int blue, int alpha) { - g.setFillStyle(currentColor = toHex(red, green, blue, alpha)); - } - - @Override - public void glColor4f(float red, float green, float blue, float alpha) { - glColor4i((int) (red * 255d), (int) (green * 255d), (int) (blue * 255d), (int) (alpha * 255d)); - } - - @Override - public void glColor3i(int r, int gg, int b) { - g.setFillStyle(currentColor = toHex(r, gg, b)); - } - - @Override - public void glColor3f(float red, float green, float blue) { - glColor3i((int) (red * 255d), (int) (green * 255d), (int) (blue * 255d)); - } - - @Override - public void glColor(int c) { - final int a = c >> 24 & 0xFF; - final int r = c >> 16 & 0xFF; - final int gg = c >> 8 & 0xFF; - final int b = c & 0xFF; - g.setFillStyle(currentColor = toHex(r, gg, b, a)); - } - - @Override - public void glClearSkin() { - currentSkin = null; - } - - @Override - public void glClearColor4i(int red, int green, int blue, int alpha) { - clearColor = toHex(red, green, blue, alpha); - } - - @Override - public void glClearColor4f(float red, float green, float blue, float alpha) { - clearColor = toHex((int)(red*255), - (int)(green*255), - (int)(blue*255), - (int)(alpha*255)); - } - - @Override - public void glClearColor(int c) { - final int r = c >> 16 & 0xFF; - final int gg = c >> 8 & 0xFF; - final int b = c & 0xFF; - clearColor = toHex(r, gg, b); - } - - @Override - public void glClear(int screenWidth, int screenHeight) { - g.setFillStyle(clearColor); - g.fillRect(0, 0, screenWidth, screenHeight); - g.setFillStyle(currentColor); - } - - @Override - public HtmlFont getCurrentFont() { - return f; - } -} +package org.warp.picalculator.gui.graphicengine.html; + +import org.teavm.jso.canvas.CanvasImageSource; +import org.teavm.jso.canvas.CanvasRenderingContext2D; +import org.teavm.jso.dom.html.HTMLImageElement; +import org.teavm.jso.typedarrays.Uint8ClampedArray; +import org.warp.picalculator.StaticVars; +import org.warp.picalculator.gui.graphicengine.Renderer; + +public class HtmlRenderer implements Renderer { + private static final boolean ENABLE_SUPERSAMPLING = false; + private static final boolean ENABLE_TRANSPARENCY = true; + private String currentColor = "#000000ff"; + private String clearColor = "#000000ff"; + HtmlFont f = null; + HtmlSkin currentSkin = null; + private final CanvasRenderingContext2D g; + private final HtmlEngine e; + public HtmlRenderer(HtmlEngine e, CanvasRenderingContext2D g) { + this.g = g; + this.e = e; + } + + private String toHex(int c) { + final int a = c >> 24 & 0xFF; + final int r = c >> 16 & 0xFF; + final int gg = c >> 8 & 0xFF; + final int b = c & 0xFF; + return String.format("#%02x%02x%02x%02x", r, gg, b, a); + } + + private String toHex8(int c) { + final int r = c >> 16 & 0xFF; + final int gg = c >> 8 & 0xFF; + final int b = c & 0xFF; + return String.format("#%02x%02x%02x", r, gg, b); + } + + private String toHex(int r, int g, int b) { + return String.format("#%02x%02x%02x", r, g, b); + } + + private String toHex(int r, int g, int b, int a) { + return String.format("#%02x%02x%02x%02x", r, g, b, a); + } + + @Override + public int glGetClearColor() { + return hexToInt(clearColor); + } + + private int hexToInt(String hex) { + switch (hex.length()) { + case 6: + return (0xFF << 24) | + (Integer.valueOf(hex.substring(0, 2), 16) << 16) | + (Integer.valueOf(hex.substring(2, 4), 16) << 8) | + Integer.valueOf(hex.substring(4, 6), 16); + case 6+1: + return (0xFF << 24) | + (Integer.valueOf(hex.substring(0+1, 2+1), 16) << 16) | + (Integer.valueOf(hex.substring(2+1, 4+1), 16) << 8) | + Integer.valueOf(hex.substring(4+1, 6+1), 16); + case 8: + return (Integer.valueOf(hex.substring(6, 8), 16) << 24) | + (Integer.valueOf(hex.substring(0, 2), 16) << 16) | + (Integer.valueOf(hex.substring(2, 4), 16) << 8) | + Integer.valueOf(hex.substring(4, 6), 16); + case 8+1: + return (Integer.valueOf(hex.substring(6+1, 8+1), 16) << 24) | + (Integer.valueOf(hex.substring(0+1, 2+1), 16) << 16) | + (Integer.valueOf(hex.substring(2+1, 4+1), 16) << 8) | + Integer.valueOf(hex.substring(4+1, 6+1), 16); + } + return 0xFF000000; + } + + @Override + public void glFillRect(float x, float y, float width, float height, float uvX, float uvY, float uvWidth, + float uvHeight) { + if (currentSkin != null) { + glDrawSkin((int) x, (int) y, (int) (x + width), (int) (y + height), (int) uvX, (int) uvY, (int) (uvWidth + uvX), (int) (uvHeight + uvY), true); + } else { + glFillColor(x, y, width, height); + } + } + + @SuppressWarnings("unused") + private void glDrawSkin(int x0, int y0, int x1, int y1, int s0, int t0, int s1, int t1, boolean transparent) { + final int[] size = e.getSize(); + + x0 += StaticVars.screenPos[0]; + y0 += StaticVars.screenPos[1]; + final double incrementX = Math.abs((double) (x1 - x0) / (double) (s1 - s0)); + final double incrementY = Math.abs((double) (y1 - y0) / (double) (t1 - t0)); + final boolean flippedX = (x1 - x0) / (s1 - s0) < 0; + final boolean flippedY = (y1 - y0) / (t1 - t0) < 0; + int oldColor = 0; + int newColor; + final int onex = s0 <= s1 ? 1 : -1; + final int oney = t0 <= t1 ? 1 : -1; + int width = 0; + int height = 0; + if (onex == -1) { + final int s00 = s0; + s0 = s1; + s1 = s00; + width = s1 - s0; + } + if (oney == -1) { + final int t00 = t0; + t0 = t1; + t1 = t00; + height = t1 - t0; + } + if (x0 >= size[0] || y0 >= size[0]) { + return; + } + if (x0 + width >= size[0]) { + s1 = size[0] - x0 + s0; + } + if (y0 + height >= size[1]) { + t1 = size[1] - y0 + t0; + } + if (x0 < 0) { + if (onex == -1) { + width += x0; + s1 += x0 + 1; + } else { + s0 -= x0; + } + x0 = 0; + } + if (y0 < 0) { + if (oney == -1) { + height += y0; + t1 += y0 + 1; + } else { + t0 -= y0; + } + y0 = 0; + } + g.drawImage(currentSkin.getImgElement(), s0, t0, s1-s0, t1-t0, x0, y0, x1-x0, y1-y0); + } + + @Override + public void glFillColor(float x, float y, float width, float height) { + x += StaticVars.screenPos[0]; + y += StaticVars.screenPos[1]; + g.setFillStyle(currentColor); + g.fillRect( x, y, width, height ); + } + + @Override + public void glDrawStringRight(float x, float y, String text) { + glDrawStringLeft(x - f.getStringWidth(text), y, text); + } + + @Override + public void glDrawStringLeft(float x, float y, String textString) { + x += StaticVars.screenPos[0]; + y += StaticVars.screenPos[1]; + + f.imgElCtx.setGlobalCompositeOperation("source-in"); + f.imgElCtx.setFillStyle(currentColor); + f.imgElCtx.fillRect(0, 0, f.imgEl.getWidth(), f.imgEl.getHeight()); + + final int[] text = f.getCharIndexes(textString); + final int[] screenSize = e.getSize(); + int cpos; + final int l = text.length; + for (int i = 0; i < l; i++) { + cpos = (i * (f.charW)); + final int charIndex = text[i]; + g.drawImage(f.imgEl, 0, charIndex*f.charH, f.charW, f.charH, x+cpos, y, f.charW, f.charH); + } + } + + private int stackColors(int... color) { + double a = 0; + double r = 0; + double g = 0; + double b = 0; + for (final int newColor : color) { + final double alpha = (newColor >> 24 & 0xFF) / 255d; + a = a * (1d - alpha) + (newColor >> 24 & 0xFF) * alpha; + r = r * (1d - alpha) + (newColor >> 16 & 0xFF) * alpha; + g = g * (1d - alpha) + (newColor >> 8 & 0xFF) * alpha; + b = b * (1d - alpha) + (newColor & 0xFF) * alpha; + } + return ((int) a) << 24 | ((int) r) << 16 | ((int) g) << 8 | ((int) b); + } + + @Override + public void glDrawStringCenter(float x, float y, String text) { + glDrawStringLeft(x - (f.getStringWidth(text) / 2), y, text); + } + + @Override + public void glDrawLine(float x0, float y0, float x1, float y1) { + if (x1-x0 > 0 && y1-y0 > 0) { + g.beginPath(); + g.moveTo(x0, y0); + g.lineTo(x1, y1); + g.stroke(); + } else { + g.fillRect(x0, y0, (x1-x0)+1, (y1-y0)+1); + } + } + + @Override + public void glDrawCharRight(int x, int y, char ch) { + glDrawStringRight(x, y, ch + ""); + } + + @Override + public void glDrawCharLeft(int x, int y, char ch) { + glDrawStringLeft(x, y, ch + ""); + } + + @Override + public void glDrawCharCenter(int x, int y, char ch) { + glDrawStringCenter(x, y, ch + ""); + } + + @Override + public void glColor4i(int red, int green, int blue, int alpha) { + g.setFillStyle(currentColor = toHex(red, green, blue, alpha)); + } + + @Override + public void glColor4f(float red, float green, float blue, float alpha) { + glColor4i((int) (red * 255d), (int) (green * 255d), (int) (blue * 255d), (int) (alpha * 255d)); + } + + @Override + public void glColor3i(int r, int gg, int b) { + g.setFillStyle(currentColor = toHex(r, gg, b)); + } + + @Override + public void glColor3f(float red, float green, float blue) { + glColor3i((int) (red * 255d), (int) (green * 255d), (int) (blue * 255d)); + } + + @Override + public void glColor(int c) { + final int a = c >> 24 & 0xFF; + final int r = c >> 16 & 0xFF; + final int gg = c >> 8 & 0xFF; + final int b = c & 0xFF; + g.setFillStyle(currentColor = toHex(r, gg, b, a)); + } + + @Override + public void glClearSkin() { + currentSkin = null; + } + + @Override + public void glClearColor4i(int red, int green, int blue, int alpha) { + clearColor = toHex(red, green, blue, alpha); + } + + @Override + public void glClearColor4f(float red, float green, float blue, float alpha) { + clearColor = toHex((int)(red*255), + (int)(green*255), + (int)(blue*255), + (int)(alpha*255)); + } + + @Override + public void glClearColor(int c) { + final int r = c >> 16 & 0xFF; + final int gg = c >> 8 & 0xFF; + final int b = c & 0xFF; + clearColor = toHex(r, gg, b); + } + + @Override + public void glClear(int screenWidth, int screenHeight) { + g.setFillStyle(clearColor); + g.fillRect(0, 0, screenWidth, screenHeight); + g.setFillStyle(currentColor); + } + + @Override + public HtmlFont getCurrentFont() { + return f; + } +} diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/html/HtmlSkin.java b/src/js-specific/java/org/warp/picalculator/gui/graphicengine/html/HtmlSkin.java similarity index 95% rename from src/main/java/org/warp/picalculator/gui/graphicengine/html/HtmlSkin.java rename to src/js-specific/java/org/warp/picalculator/gui/graphicengine/html/HtmlSkin.java index 04d0db3b..f4edd85f 100644 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/html/HtmlSkin.java +++ b/src/js-specific/java/org/warp/picalculator/gui/graphicengine/html/HtmlSkin.java @@ -1,86 +1,86 @@ -package org.warp.picalculator.gui.graphicengine.html; - -import java.io.IOException; -import java.net.URISyntaxException; - -import org.teavm.jso.JSObject; -import org.teavm.jso.browser.Window; -import org.teavm.jso.dom.html.HTMLDocument; -import org.teavm.jso.dom.html.HTMLImageElement; -import org.warp.picalculator.deps.StorageUtils; -import org.warp.picalculator.gui.graphicengine.GraphicEngine; -import org.warp.picalculator.gui.graphicengine.Skin; - -import ar.com.hjg.pngj.PngReader; - -public class HtmlSkin implements Skin { - - private String url; - - private int[] skinSize; - - private boolean initd; - - private HTMLImageElement imgEl; - - public HtmlSkin(String file) throws IOException { - load(file); - } - - public void use(GraphicEngine d) { - if (d instanceof HtmlEngine) { - if (!initd) - initialize(d); - ((HtmlEngine) d).getRenderer().currentSkin = this; - } - } - - @Override - public void load(String file) throws IOException { - if (!file.startsWith("/")) - file = "/"+file; - url = StorageUtils.basepath+file; - try { - PngReader r = new PngReader(StorageUtils.getResourceStream(file)); - skinSize = new int[] { r.imgInfo.cols, r.imgInfo.rows }; - r.close(); - } catch (URISyntaxException e) { - IOException ex = new IOException(); - ex.initCause(e); - throw ex; - } - } - - @Override - public void initialize(GraphicEngine d) { - HTMLDocument doc = Window.current().getDocument(); - imgEl = doc.createElement("img").cast(); - imgEl.setSrc(url); - imgEl.setClassName("hidden"); - doc.getBody().appendChild(imgEl); - initd = true; - } - - @Override - public boolean isInitialized() { - return initd; - } - - @Override - public int getSkinWidth() { - return skinSize[0]; - } - - @Override - public int getSkinHeight() { - return skinSize[1]; - } - - public final String getUrl() { - return url; - } - - public final HTMLImageElement getImgElement() { - return imgEl; - } -} +package org.warp.picalculator.gui.graphicengine.html; + +import java.io.IOException; +import java.net.URISyntaxException; + +import org.teavm.jso.JSObject; +import org.teavm.jso.browser.Window; +import org.teavm.jso.dom.html.HTMLDocument; +import org.teavm.jso.dom.html.HTMLImageElement; +import org.warp.picalculator.deps.StorageUtils; +import org.warp.picalculator.gui.graphicengine.GraphicEngine; +import org.warp.picalculator.gui.graphicengine.Skin; + +import ar.com.hjg.pngj.PngReader; + +public class HtmlSkin implements Skin { + + private String url; + + private int[] skinSize; + + private boolean initd; + + private HTMLImageElement imgEl; + + public HtmlSkin(String file) throws IOException { + load(file); + } + + public void use(GraphicEngine d) { + if (d instanceof HtmlEngine) { + if (!initd) + initialize(d); + ((HtmlEngine) d).getRenderer().currentSkin = this; + } + } + + @Override + public void load(String file) throws IOException { + if (!file.startsWith("/")) + file = "/"+file; + url = StorageUtils.basepath+file; + try { + PngReader r = new PngReader(StorageUtils.getResourceStream(file)); + skinSize = new int[] { r.imgInfo.cols, r.imgInfo.rows }; + r.close(); + } catch (URISyntaxException e) { + IOException ex = new IOException(); + ex.initCause(e); + throw ex; + } + } + + @Override + public void initialize(GraphicEngine d) { + HTMLDocument doc = Window.current().getDocument(); + imgEl = doc.createElement("img").cast(); + imgEl.setSrc(url); + imgEl.setClassName("hidden"); + doc.getBody().appendChild(imgEl); + initd = true; + } + + @Override + public boolean isInitialized() { + return initd; + } + + @Override + public int getSkinWidth() { + return skinSize[0]; + } + + @Override + public int getSkinHeight() { + return skinSize[1]; + } + + public final String getUrl() { + return url; + } + + public final HTMLImageElement getImgElement() { + return imgEl; + } +} diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/html/InputEvent.java b/src/js-specific/java/org/warp/picalculator/gui/graphicengine/html/InputEvent.java similarity index 95% rename from src/main/java/org/warp/picalculator/gui/graphicengine/html/InputEvent.java rename to src/js-specific/java/org/warp/picalculator/gui/graphicengine/html/InputEvent.java index bb9b99f1..e387d250 100644 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/html/InputEvent.java +++ b/src/js-specific/java/org/warp/picalculator/gui/graphicengine/html/InputEvent.java @@ -1,10 +1,10 @@ -package org.warp.picalculator.gui.graphicengine.html; - -import org.teavm.jso.JSProperty; -import org.teavm.jso.dom.events.Event; - -public interface InputEvent extends Event { - - @JSProperty - String getValue(); -} +package org.warp.picalculator.gui.graphicengine.html; + +import org.teavm.jso.JSProperty; +import org.teavm.jso.dom.events.Event; + +public interface InputEvent extends Event { + + @JSProperty + String getValue(); +} diff --git a/src/main/java/org/nevec/rjm/BigComplex.java b/src/main/java/org/nevec/rjm/BigComplex.java index a8c516f3..67751010 100755 --- a/src/main/java/org/nevec/rjm/BigComplex.java +++ b/src/main/java/org/nevec/rjm/BigComplex.java @@ -153,7 +153,7 @@ public class BigComplex { * The branch is chosen such that the imaginary part of the result * has the * same sign as the imaginary part of this. - * @see Tim Ahrendt, Fast + * @see Tim Ahrendt, Fast * High-precision computation of complex square roots, * ISSAC 1996 p142-149. * @since 2008-10-27 diff --git a/src/main/java/org/nevec/rjm/BigIntegerMath.java b/src/main/java/org/nevec/rjm/BigIntegerMath.java index a683c6d9..98d27083 100755 --- a/src/main/java/org/nevec/rjm/BigIntegerMath.java +++ b/src/main/java/org/nevec/rjm/BigIntegerMath.java @@ -580,7 +580,7 @@ public class BigIntegerMath { * @since 2009-08-06 * @author Richard J. Mathar * @throws Error - * @see P. L. Butzer + * @see P. L. Butzer * et al, Num. Funct. Anal. Opt. 10 (5)( 1989) 419-488 */ static public Rational centrlFactNumt(int n, int k) throws Error { @@ -627,7 +627,7 @@ public class BigIntegerMath { * @return T(n,k) * @since 2009-08-06 * @author Richard J. Mathar - * @see P. L. Butzer + * @see P. L. Butzer * et al, Num. Funct. Anal. Opt. 10 (5)( 1989) 419-488 */ static public Rational centrlFactNumT(int n, int k) { diff --git a/src/main/java/org/nevec/rjm/Wigner3j.java b/src/main/java/org/nevec/rjm/Wigner3j.java index 06b011c4..43988f4d 100755 --- a/src/main/java/org/nevec/rjm/Wigner3j.java +++ b/src/main/java/org/nevec/rjm/Wigner3j.java @@ -137,7 +137,7 @@ public class Wigner3j { * separated. Only as many as announced by the m1 parameter are * used; trailing numbers are ignored. * @see A. Bar-Shalom and M. Klapisch, - * NJGRAF... + * NJGRAF... * , Comp. Phys Comm. 50 (3) (1988) 375 * @since 2011-02-13 * @since 2012-02-15 Upgraded return value to BigSurdVec