diff --git a/.gitignore b/.gitignore index cbdd4cd2..f70650cc 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,9 @@ *.jar *.war *.ear +Thumbs.db +font_easter.png +font_easter.rft /target/ /backups/ diff --git a/src/main/java/org/nevec/rjm/SafeMathContext.java b/src/main/java/org/nevec/rjm/SafeMathContext.java index 181bd806..0f77b8dd 100644 --- a/src/main/java/org/nevec/rjm/SafeMathContext.java +++ b/src/main/java/org/nevec/rjm/SafeMathContext.java @@ -6,10 +6,10 @@ import java.math.RoundingMode; import org.warp.picalculator.Utils; public final class SafeMathContext { - + public static MathContext newMathContext(int precision) { if (precision <= 0) { - Utils.out.print(Utils.OUTPUTLEVEL_DEBUG_MIN, "Warning! MathContext precision is <= 0 ("+precision+")"); + Utils.out.print(Utils.OUTPUTLEVEL_DEBUG_MIN, "Warning! MathContext precision is <= 0 (" + precision + ")"); precision = 1; } return new MathContext(precision); @@ -17,7 +17,7 @@ public final class SafeMathContext { public static MathContext newMathContext(int precision, RoundingMode roundingMode) { if (precision <= 0) { - Utils.out.print(Utils.OUTPUTLEVEL_DEBUG_MIN, "Warning! MathContext precision is <= 0 ("+precision+")"); + Utils.out.print(Utils.OUTPUTLEVEL_DEBUG_MIN, "Warning! MathContext precision is <= 0 (" + precision + ")"); precision = 1; } return new MathContext(precision, roundingMode); diff --git a/src/main/java/org/warp/picalculator/Main.java b/src/main/java/org/warp/picalculator/Main.java index c083bb3a..d4fcfbf5 100755 --- a/src/main/java/org/warp/picalculator/Main.java +++ b/src/main/java/org/warp/picalculator/Main.java @@ -1,16 +1,9 @@ package org.warp.picalculator; -import java.math.BigInteger; -import java.util.LinkedList; -import java.util.Vector; - -import org.nevec.rjm.BigIntegerMath; import org.warp.picalculator.device.Keyboard; import org.warp.picalculator.gui.DisplayManager; import org.warp.picalculator.gui.screens.LoadingScreen; import org.warp.picalculator.gui.screens.Screen; -import org.warp.picalculator.math.MathContext; -import org.warp.picalculator.math.functions.Number; import com.pi4j.system.SystemInfo.BoardType; import com.pi4j.wiringpi.Gpio; @@ -37,6 +30,8 @@ public class Main { Main.args = args; beforeStart(); new DisplayManager(screen); + afterStart(); + DisplayManager.INSTANCE.waitForExit(); Utils.out.println(1, "Shutdown..."); beforeShutdown(); Utils.out.println(1, ""); @@ -45,7 +40,10 @@ public class Main { } public void beforeStart() { - boolean isRaspi = false; try {isRaspi = com.pi4j.system.SystemInfo.getBoardType() != BoardType.UNKNOWN;} catch (Exception e) {} + boolean isRaspi = false; + try { + isRaspi = com.pi4j.system.SystemInfo.getBoardType() != BoardType.UNKNOWN; + } catch (Exception e) {} if (Utils.isRunningOnRaspberry() && !Utils.isInArray("-noraspi", args) && isRaspi) { Gpio.wiringPiSetupPhys(); Gpio.pinMode(12, Gpio.PWM_OUTPUT); @@ -81,11 +79,13 @@ public class Main { Utils.msDosMode = true; } } - DisplayManager.preInitialization(); - DisplayManager.setBrightness(0.2f); Keyboard.startKeyboard(); } + public void afterStart() { + DisplayManager.INSTANCE.setBrightness(0.2f); + } + public void beforeShutdown() { Keyboard.stopKeyboard(); } @@ -120,7 +120,7 @@ public class Main { time2 = System.currentTimeMillis(); System.out.println("BigIntegerMath HCN: "+(time2-time1)+" ("+empty.toString()+")"); - + bigintegers[0] = BigInteger.valueOf(LCN); for (int i = 0; i < max; i++) { bigintegers[i] = bigintegers[0]; @@ -139,7 +139,7 @@ public class Main { } time2 = System.currentTimeMillis(); System.out.println("BigIntegerMath HCN: "+(time2-time1)+" ("+empty2.toString()+")"); - + numbers[0] = new Number(mc, LCN); for (int i = 0; i < max; i++) { numbers[i] = numbers[0]; diff --git a/src/main/java/org/warp/picalculator/TestGPU.java b/src/main/java/org/warp/picalculator/TestGPU.java index 634a1590..c408758a 100755 --- a/src/main/java/org/warp/picalculator/TestGPU.java +++ b/src/main/java/org/warp/picalculator/TestGPU.java @@ -184,7 +184,7 @@ public class TestGPU { } }).start(); - d.waitUntilExit(); + d.waitForExit(); } @Override diff --git a/src/main/java/org/warp/picalculator/Utils.java b/src/main/java/org/warp/picalculator/Utils.java index f50d74db..fea788e5 100755 --- a/src/main/java/org/warp/picalculator/Utils.java +++ b/src/main/java/org/warp/picalculator/Utils.java @@ -56,7 +56,7 @@ public class Utils { public static boolean debugThirdScreen; public static final boolean debugWindow2x = true; public static boolean headlessOverride = false; - private static String OS = System.getProperty("os.name").toLowerCase(); + private static String OS = System.getProperty("os.name").toLowerCase(); public static String forceEngine; public static boolean msDosMode; @@ -65,7 +65,7 @@ public class Utils { public void println(String str) { println(0, str); } - + public void println(int level) { if (outputLevel >= level) { if (outputLevel == 0) { @@ -75,7 +75,7 @@ public class Utils { } } } - + public void println(int level, String str) { if (outputLevel >= level) { if (outputLevel == 0) { @@ -85,7 +85,7 @@ public class Utils { } } } - + public void print(int level, String str) { if (outputLevel >= level) { if (outputLevel == 0) { @@ -451,12 +451,12 @@ public class Utils { // // var.draw(x + wsegno, y + (hsegno - h1), null, null); // -// DisplayManager.renderer.glDrawLine(x + 1, y + hsegno - 3, x + 1, y + hsegno - 3); -// DisplayManager.renderer.glDrawLine(x + 2, y + hsegno - 2, x + 2, y + hsegno - 2); -// DisplayManager.renderer.glDrawLine(x + 3, y + hsegno - 1, x + 3, y + hsegno - 1); -// DisplayManager.renderer.glDrawLine(x + 3, y + (hsegno - 1) / 2 + 1, x + 3, y + hsegno - 1); -// DisplayManager.renderer.glDrawLine(x + 4, y, x + 4, y + (hsegno - 1) / 2); -// DisplayManager.renderer.glDrawLine(x + 4, y, x + 4 + 1 + w1 + 1, y); +// DisplayManager.INSTANCE.renderer.glDrawLine(x + 1, y + hsegno - 3, x + 1, y + hsegno - 3); +// DisplayManager.INSTANCE.renderer.glDrawLine(x + 2, y + hsegno - 2, x + 2, y + hsegno - 2); +// DisplayManager.INSTANCE.renderer.glDrawLine(x + 3, y + hsegno - 1, x + 3, y + hsegno - 1); +// DisplayManager.INSTANCE.renderer.glDrawLine(x + 3, y + (hsegno - 1) / 2 + 1, x + 3, y + hsegno - 1); +// DisplayManager.INSTANCE.renderer.glDrawLine(x + 4, y, x + 4, y + (hsegno - 1) / 2); +// DisplayManager.INSTANCE.renderer.glDrawLine(x + 4, y, x + 4 + 1 + w1 + 1, y); } public static final int getFontHeight() { @@ -468,7 +468,7 @@ public class Utils { } public static final BinaryFont getFont(boolean small, boolean zoomed) { - return DisplayManager.fonts[getFontIndex(small, zoomed)]; + return DisplayManager.INSTANCE.fonts[getFontIndex(small, zoomed)]; } public static final int getFontIndex(boolean small, boolean zoomed) { @@ -494,15 +494,15 @@ public class Utils { public static final int getFontHeight(boolean small, boolean zoomed) { if (small) { if (zoomed) { - return DisplayManager.glyphsHeight[3]; + return DisplayManager.INSTANCE.glyphsHeight[3]; } else { - return DisplayManager.glyphsHeight[1]; + return DisplayManager.INSTANCE.glyphsHeight[1]; } } else { if (zoomed) { - return DisplayManager.glyphsHeight[2]; + return DisplayManager.INSTANCE.glyphsHeight[2]; } else { - return DisplayManager.glyphsHeight[0]; + return DisplayManager.INSTANCE.glyphsHeight[0]; } } } diff --git a/src/main/java/org/warp/picalculator/device/CacheFile.java b/src/main/java/org/warp/picalculator/device/CacheFile.java index efbd5fc8..159a5b54 100755 --- a/src/main/java/org/warp/picalculator/device/CacheFile.java +++ b/src/main/java/org/warp/picalculator/device/CacheFile.java @@ -17,10 +17,10 @@ public class CacheFile { private FileOutputStream lastFOS; private ObjectInputStream lastOIS; private FileInputStream lastFIS; - + public CacheFile() { do { - path = UUID.randomUUID().toString()+".ser"; + path = UUID.randomUUID().toString() + ".ser"; } while (Files.exists(Paths.get(path))); try { Files.createTempFile(Main.calculatorNameLOWER, ""); @@ -28,7 +28,7 @@ public class CacheFile { e.printStackTrace(); } } - + public ObjectOutputStream getObjectOutputStram() { if (lastOOS == null) { try { @@ -41,7 +41,7 @@ public class CacheFile { return lastOOS; } } - + public ObjectInputStream getObjectInputStram() { if (lastOIS == null) { try { diff --git a/src/main/java/org/warp/picalculator/device/Keyboard.java b/src/main/java/org/warp/picalculator/device/Keyboard.java index 36b5dd0c..610fe244 100755 --- a/src/main/java/org/warp/picalculator/device/Keyboard.java +++ b/src/main/java/org/warp/picalculator/device/Keyboard.java @@ -8,7 +8,6 @@ import org.warp.picalculator.device.chip.SerialToParallel; import org.warp.picalculator.gui.DisplayManager; import org.warp.picalculator.gui.GUIErrorMessage; import org.warp.picalculator.gui.screens.KeyboardDebugScreen; -import org.warp.picalculator.gui.screens.MarioScreen; import org.warp.picalculator.gui.screens.Screen; import com.pi4j.wiringpi.Gpio; @@ -780,7 +779,7 @@ public class Keyboard { } else { switch (k) { case POWER: - DisplayManager.engine.destroy(); + DisplayManager.INSTANCE.engine.destroy(); break; case NONE: break; @@ -788,12 +787,12 @@ public class Keyboard { letterPressed('X'); break; case BRIGHTNESS_CYCLE: - DisplayManager.cycleBrightness(false); + DisplayManager.INSTANCE.cycleBrightness(false); refresh = true; break; case BRIGHTNESS_CYCLE_REVERSE: - DisplayManager.INSTANCE.setScreen(new MarioScreen()); //TODO: rimuovere: prova - DisplayManager.cycleBrightness(true); + //DisplayManager.INSTANCE.setScreen(new MarioScreen()); //TODO: rimuovere: prova + DisplayManager.INSTANCE.cycleBrightness(true); refresh = true; break; case HISTORY_BACK: diff --git a/src/main/java/org/warp/picalculator/gui/DisplayManager.java b/src/main/java/org/warp/picalculator/gui/DisplayManager.java index 20f17723..04575a95 100755 --- a/src/main/java/org/warp/picalculator/gui/DisplayManager.java +++ b/src/main/java/org/warp/picalculator/gui/DisplayManager.java @@ -1,9 +1,7 @@ package org.warp.picalculator.gui; import java.io.IOException; -import java.util.Iterator; import java.util.List; -import java.util.Vector; import java.util.concurrent.Semaphore; import org.warp.picalculator.Main; @@ -27,37 +25,30 @@ import it.unimi.dsi.fastutil.objects.ObjectArrayList; public final class DisplayManager implements RenderingLoop { public static DisplayManager INSTANCE; - private static float brightness; + private float brightness; - public static final GraphicEngine engine; - public static final boolean supportsPauses; - public static Renderer renderer; + public final GraphicEngine engine; + public final boolean supportsPauses; + public Renderer renderer; - public static Skin guiSkin; - public static BinaryFont[] fonts; + public Skin guiSkin; + public BinaryFont[] fonts; - public static String error; + public String error; public String[] errorStackTrace; - public final static int[] glyphsHeight; + public final int[] glyphsHeight; - private static Screen screen; - public static Semaphore screenChange = new Semaphore(0); - public static String displayDebugString; - public static ObjectArrayList errorMessages; - - static { + private Screen screen; + public Semaphore screenChange = new Semaphore(0); + public String displayDebugString; + public ObjectArrayList errorMessages; + + public DisplayManager(Screen screen) { engine = chooseGraphicEngine(); supportsPauses = engine.doesRefreshPauses(); glyphsHeight = new int[] { 9, 6, 12, 9 }; displayDebugString = ""; errorMessages = new ObjectArrayList<>(); - } - - public static void preInitialization() { - //Nothing. When called for the first time the static methods will be loaded - } - - public DisplayManager(Screen screen) { setScreen(screen); INSTANCE = this; loop(); @@ -91,7 +82,7 @@ public final class DisplayManager implements RenderingLoop { * } */ - private static GraphicEngine chooseGraphicEngine() { + private GraphicEngine chooseGraphicEngine() { GraphicEngine d; d = new GPUEngine(); if (d.isSupported()) { @@ -124,19 +115,19 @@ public final class DisplayManager implements RenderingLoop { public void setScreen(Screen screen) { if (screen.initialized == false) { if (screen.canBeInHistory) { - DisplayManager.currentSession = 0; - for (int i = DisplayManager.sessions.length - 1; i >= 1; i--) { - DisplayManager.sessions[i] = DisplayManager.sessions[i - 1]; + DisplayManager.INSTANCE.currentSession = 0; + for (int i = DisplayManager.INSTANCE.sessions.length - 1; i >= 1; i--) { + DisplayManager.INSTANCE.sessions[i] = DisplayManager.INSTANCE.sessions[i - 1]; } - DisplayManager.sessions[0] = screen; + DisplayManager.INSTANCE.sessions[0] = screen; } else { - DisplayManager.currentSession = -1; + DisplayManager.INSTANCE.currentSession = -1; } } screen.d = this; try { screen.create(); - DisplayManager.screen = screen; + DisplayManager.INSTANCE.screen = screen; screenChange.release(); if (screen.initialized == false) { screen.initialize(); @@ -150,18 +141,18 @@ public final class DisplayManager implements RenderingLoop { public void replaceScreen(Screen screen) { if (screen.initialized == false) { if (screen.canBeInHistory) { - DisplayManager.sessions[DisplayManager.currentSession] = screen; + DisplayManager.INSTANCE.sessions[DisplayManager.INSTANCE.currentSession] = screen; } else { - DisplayManager.currentSession = -1; - for (int i = 0; i < DisplayManager.sessions.length - 2; i++) { - DisplayManager.sessions[i] = DisplayManager.sessions[i + 1]; + DisplayManager.INSTANCE.currentSession = -1; + for (int i = 0; i < DisplayManager.INSTANCE.sessions.length - 2; i++) { + DisplayManager.INSTANCE.sessions[i] = DisplayManager.INSTANCE.sessions[i + 1]; } } } screen.d = this; try { screen.create(); - DisplayManager.screen = screen; + DisplayManager.INSTANCE.screen = screen; screenChange.release(); if (screen.initialized == false) { screen.initialize(); @@ -173,13 +164,13 @@ public final class DisplayManager implements RenderingLoop { } public boolean canGoBack() { - if (DisplayManager.currentSession == -1) { - return DisplayManager.sessions[0] != null; + if (DisplayManager.INSTANCE.currentSession == -1) { + return DisplayManager.INSTANCE.sessions[0] != null; } - if (DisplayManager.screen != DisplayManager.sessions[DisplayManager.currentSession]) { + if (DisplayManager.INSTANCE.screen != DisplayManager.INSTANCE.sessions[DisplayManager.INSTANCE.currentSession]) { - } else if (DisplayManager.currentSession + 1 < DisplayManager.sessions.length) { - if (DisplayManager.sessions[DisplayManager.currentSession + 1] != null) { + } else if (DisplayManager.INSTANCE.currentSession + 1 < DisplayManager.INSTANCE.sessions.length) { + if (DisplayManager.INSTANCE.sessions[DisplayManager.INSTANCE.currentSession + 1] != null) { } else { return false; @@ -187,7 +178,7 @@ public final class DisplayManager implements RenderingLoop { } else { return false; } - if (DisplayManager.sessions[DisplayManager.currentSession] != null) { + if (DisplayManager.INSTANCE.sessions[DisplayManager.INSTANCE.currentSession] != null) { return true; } return false; @@ -195,22 +186,22 @@ public final class DisplayManager implements RenderingLoop { public void goBack() { if (canGoBack()) { - if (DisplayManager.currentSession >= 0 && DisplayManager.screen != DisplayManager.sessions[DisplayManager.currentSession]) {} else { - DisplayManager.currentSession += 1; + if (DisplayManager.INSTANCE.currentSession >= 0 && DisplayManager.INSTANCE.screen != DisplayManager.INSTANCE.sessions[DisplayManager.INSTANCE.currentSession]) {} else { + DisplayManager.INSTANCE.currentSession += 1; } - DisplayManager.screen = DisplayManager.sessions[DisplayManager.currentSession]; + DisplayManager.INSTANCE.screen = DisplayManager.INSTANCE.sessions[DisplayManager.INSTANCE.currentSession]; screenChange.release(); } } public boolean canGoForward() { - if (DisplayManager.currentSession <= 0) { // -1 e 0 + if (DisplayManager.INSTANCE.currentSession <= 0) { // -1 e 0 return false; } - if (DisplayManager.screen != DisplayManager.sessions[DisplayManager.currentSession]) { + if (DisplayManager.INSTANCE.screen != DisplayManager.INSTANCE.sessions[DisplayManager.INSTANCE.currentSession]) { - } else if (DisplayManager.currentSession > 0) { - if (DisplayManager.sessions[DisplayManager.currentSession - 1] != null) { + } else if (DisplayManager.INSTANCE.currentSession > 0) { + if (DisplayManager.INSTANCE.sessions[DisplayManager.INSTANCE.currentSession - 1] != null) { } else { return false; @@ -218,7 +209,7 @@ public final class DisplayManager implements RenderingLoop { } else { return false; } - if (DisplayManager.sessions[DisplayManager.currentSession] != null) { + if (DisplayManager.INSTANCE.sessions[DisplayManager.INSTANCE.currentSession] != null) { return true; } return false; @@ -226,18 +217,18 @@ public final class DisplayManager implements RenderingLoop { public void goForward() { if (canGoForward()) { - if (DisplayManager.screen != DisplayManager.sessions[DisplayManager.currentSession]) { + if (DisplayManager.INSTANCE.screen != DisplayManager.INSTANCE.sessions[DisplayManager.INSTANCE.currentSession]) { } else { - DisplayManager.currentSession -= 1; + DisplayManager.INSTANCE.currentSession -= 1; } - DisplayManager.screen = DisplayManager.sessions[DisplayManager.currentSession]; + DisplayManager.INSTANCE.screen = DisplayManager.INSTANCE.sessions[DisplayManager.INSTANCE.currentSession]; screenChange.release(); } } - public static Screen getScreen() { - return DisplayManager.screen; + public Screen getScreen() { + return DisplayManager.INSTANCE.screen; } private void load_skin() throws IOException { @@ -250,7 +241,7 @@ public final class DisplayManager implements RenderingLoop { fonts[1] = engine.loadFont("small"); fonts[2] = engine.loadFont("ex"); fonts[3] = engine.loadFont("big"); - fonts[4] = engine.loadFont("32"); + //4 fonts[5] = engine.loadFont("square"); } @@ -304,7 +295,7 @@ public final class DisplayManager implements RenderingLoop { int padding = 2; - final int brightness = (int) (Math.ceil(DisplayManager.brightness * 9)); + final int brightness = (int) (Math.ceil(DisplayManager.INSTANCE.brightness * 9)); if (brightness <= 10) { renderer.glFillRect(Main.screenSize[0] - (padding + 16), 2, 16, 16, 16 * brightness, 16 * 1, 16, 16); } else { @@ -343,15 +334,15 @@ public final class DisplayManager implements RenderingLoop { private void draw_bottom() { renderer.glDrawStringLeft(2, 90, displayDebugString); - Utils.getFont(true, false).use(DisplayManager.engine); - DisplayManager.renderer.glColor4i(255, 0, 0, 40); - DisplayManager.renderer.glDrawStringLeft(1 + 1, Main.screenSize[1] - 7 - 7 + 1, "WORK IN"); - DisplayManager.renderer.glColor4i(255, 0, 0, 80); - DisplayManager.renderer.glDrawStringLeft(1, Main.screenSize[1] - 7 - 7, "WORK IN"); - DisplayManager.renderer.glColor4i(255, 0, 0, 40); - DisplayManager.renderer.glDrawStringLeft(1 + 1, Main.screenSize[1] - 7 + 1, "PROGRESS."); - DisplayManager.renderer.glColor4i(255, 0, 0, 80); - DisplayManager.renderer.glDrawStringLeft(1, Main.screenSize[1] - 7, "PROGRESS."); + Utils.getFont(true, false).use(DisplayManager.INSTANCE.engine); + DisplayManager.INSTANCE.renderer.glColor4i(255, 0, 0, 40); + DisplayManager.INSTANCE.renderer.glDrawStringLeft(1 + 1, Main.screenSize[1] - 7 - 7 + 1, "WORK IN"); + DisplayManager.INSTANCE.renderer.glColor4i(255, 0, 0, 80); + DisplayManager.INSTANCE.renderer.glDrawStringLeft(1, Main.screenSize[1] - 7 - 7, "WORK IN"); + DisplayManager.INSTANCE.renderer.glColor4i(255, 0, 0, 40); + DisplayManager.INSTANCE.renderer.glDrawStringLeft(1 + 1, Main.screenSize[1] - 7 + 1, "PROGRESS."); + DisplayManager.INSTANCE.renderer.glColor4i(255, 0, 0, 80); + DisplayManager.INSTANCE.renderer.glDrawStringLeft(1, Main.screenSize[1] - 7, "PROGRESS."); } private void draw_world() { @@ -410,7 +401,7 @@ public final class DisplayManager implements RenderingLoop { load_skin(); load_fonts(); - + try { screen.initialize(); } catch (final Exception e) { @@ -497,18 +488,16 @@ public final class DisplayManager implements RenderingLoop { workThread.start(); engine.start(getDrawable()); - - engine.waitUntilExit(); } catch (final Exception ex) { ex.printStackTrace(); } finally {} } - public static void changeBrightness(float change) { + public void changeBrightness(float change) { setBrightness(brightness + change); } - public static void setBrightness(float newval) { + public void setBrightness(float newval) { if (newval >= 0 && newval <= 1) { brightness = newval; if (Utils.debugOn == false) { @@ -520,7 +509,7 @@ public final class DisplayManager implements RenderingLoop { } } - public static void cycleBrightness(boolean reverse) { + public void cycleBrightness(boolean reverse) { final float step = reverse ? -0.1f : 0.1f; if (brightness + step > 1f) { setBrightness(0f); @@ -531,24 +520,28 @@ public final class DisplayManager implements RenderingLoop { } } - public static float getBrightness() { + public float getBrightness() { return brightness; } - public static int currentSession = 0; - public static Screen[] sessions = new Screen[5]; + public int currentSession = 0; + public Screen[] sessions = new Screen[5]; @Deprecated - public static void colore(float f1, float f2, float f3, float f4) { + public void colore(float f1, float f2, float f3, float f4) { renderer.glColor4f(f1, f2, f3, f4); } - public static RenderingLoop getDrawable() { + public RenderingLoop getDrawable() { return INSTANCE; } @Deprecated - public static void drawSkinPart(int x, int y, int uvX, int uvY, int uvX2, int uvY2) { + public void drawSkinPart(int x, int y, int uvX, int uvY, int uvX2, int uvY2) { renderer.glFillRect(x, y, uvX2 - uvX, uvY2 - uvY, uvX, uvY, uvX2 - uvX, uvY2 - uvY); } + + public void waitForExit() { + engine.waitForExit(); + } } \ No newline at end of file diff --git a/src/main/java/org/warp/picalculator/gui/expression/Caret.java b/src/main/java/org/warp/picalculator/gui/expression/Caret.java index a74f2e73..ab56d092 100755 --- a/src/main/java/org/warp/picalculator/gui/expression/Caret.java +++ b/src/main/java/org/warp/picalculator/gui/expression/Caret.java @@ -9,7 +9,7 @@ public class Caret { private int[] lastLocation; public Caret(CaretState state, int pos) { - this(state, pos, new int[]{0, 0}, new int[]{2, 5}); + this(state, pos, new int[] { 0, 0 }, new int[] { 2, 5 }); } public Caret(CaretState state, int pos, int[] lastLocation, int[] lastSize) { @@ -19,7 +19,7 @@ public class Caret { this.lastLocation = lastLocation; this.lastSize = lastSize; } - + public void skip(int i) { remaining -= i; } @@ -59,21 +59,21 @@ public class Caret { } public void setLastLocation(int x, int y) { - lastLocation[0]=x; - lastLocation[1]=y; + lastLocation[0] = x; + lastLocation[1] = y; } - + public int[] getLastLocation() { - return new int[]{lastLocation[0],lastLocation[1]}; + return new int[] { lastLocation[0], lastLocation[1] }; } public void setLastSize(int w, int h) { - lastSize[0]=w; - lastSize[1]=h; + lastSize[0] = w; + lastSize[1] = h; } - + public int[] getLastSize() { - return new int[]{lastSize[0],lastSize[1]}; + return new int[] { lastSize[0], lastSize[1] }; } } diff --git a/src/main/java/org/warp/picalculator/gui/expression/ExtraMenu.java b/src/main/java/org/warp/picalculator/gui/expression/ExtraMenu.java index 59d579d3..c3bc6562 100644 --- a/src/main/java/org/warp/picalculator/gui/expression/ExtraMenu.java +++ b/src/main/java/org/warp/picalculator/gui/expression/ExtraMenu.java @@ -8,32 +8,32 @@ import org.warp.picalculator.gui.graphicengine.GraphicEngine; import org.warp.picalculator.gui.graphicengine.Renderer; public abstract class ExtraMenu implements Serializable, KeyboardEventListener { - + private static final long serialVersionUID = -6944683477814944299L; public ExtraMenu(T block) { this.block = block; - this.location = new int[]{0,0}; + this.location = new int[] { 0, 0 }; this.width = 0; this.height = 0; } - + public final T block; protected int width; protected int height; protected int[] location; - + public abstract void draw(GraphicEngine ge, Renderer r, Caret caret); public abstract void open(); - + public abstract void close(); public boolean beforeRender(float delta, Caret caret) { int[] l = caret.getLastLocation(); int[] cs = caret.getLastSize(); - location[0]=l[0]-block.getWidth()/2-width/2; - location[1]=l[1]+cs[1]; + location[0] = l[0] - block.getWidth() / 2 - width / 2; + location[1] = l[1] + cs[1]; return false; } diff --git a/src/main/java/org/warp/picalculator/gui/expression/InputContext.java b/src/main/java/org/warp/picalculator/gui/expression/InputContext.java index 5a532a4b..b51256fc 100644 --- a/src/main/java/org/warp/picalculator/gui/expression/InputContext.java +++ b/src/main/java/org/warp/picalculator/gui/expression/InputContext.java @@ -9,12 +9,12 @@ import org.warp.picalculator.math.functions.Variable.V_TYPE; public class InputContext { public final HashMap variableTypes; public BlockVariable variableTypeDirtyID = null; - + public InputContext() { this.variableTypes = new HashMap<>(); this.variableTypes.put(MathematicalSymbols.PI, V_TYPE.CONSTANT); } - + public InputContext(HashMap variableTypes) { this.variableTypes = variableTypes; } diff --git a/src/main/java/org/warp/picalculator/gui/expression/blocks/Block.java b/src/main/java/org/warp/picalculator/gui/expression/blocks/Block.java index 6719b63f..fec54c56 100755 --- a/src/main/java/org/warp/picalculator/gui/expression/blocks/Block.java +++ b/src/main/java/org/warp/picalculator/gui/expression/blocks/Block.java @@ -57,9 +57,9 @@ public abstract class Block implements GraphicalElement { public boolean isSmall() { return small; } - + public abstract void setSmall(boolean small); - + public ExtraMenu getExtraMenu() { return null; } diff --git a/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockChar.java b/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockChar.java index a59fdd93..664eaa88 100755 --- a/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockChar.java +++ b/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockChar.java @@ -40,7 +40,7 @@ public class BlockChar extends Block { @Override public void recomputeDimensions() { - width = BlockContainer.getDefaultCharWidth(small)-1; + width = BlockContainer.getDefaultCharWidth(small) - 1; height = BlockContainer.getDefaultCharHeight(small); line = height / 2; } diff --git a/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockContainer.java b/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockContainer.java index 8083eb39..b5ae643f 100755 --- a/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockContainer.java +++ b/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockContainer.java @@ -199,14 +199,14 @@ public class BlockContainer implements GraphicalElement { public Block getBlock(Caret caret) { Block block = null; - + int pos = 0; for (final Block b : content) { caret.skip(1); pos++; final int deltaCaret = caret.getRemaining(); - - block= b.getBlock(caret); + + block = b.getBlock(caret); if (block != null) { return block; } @@ -310,9 +310,9 @@ public class BlockContainer implements GraphicalElement { public static void drawCaret(GraphicEngine ge, Renderer r, Caret caret, boolean small, int x, int y, int height) { if (caret.getState() == CaretState.VISIBLE_ON) { r.glColor(getDefaultColor()); - r.glFillColor(x, y, small?2:3, height); + r.glFillColor(x, y, small ? 2 : 3, height); caret.setLastLocation(x, y); - caret.setLastSize(small?2:3, height); + caret.setLastSize(small ? 2 : 3, height); } } @@ -352,12 +352,13 @@ public class BlockContainer implements GraphicalElement { for (final Block block : blocks) { final Feature blockFeature = block.toFeature(context); - if (blockFeature == null) throw new Error(Errors.NOT_IMPLEMENTED, "The block " + block.getClass().getSimpleName() + " isn't a known Block"); + if (blockFeature == null) + throw new Error(Errors.NOT_IMPLEMENTED, "The block " + block.getClass().getSimpleName() + " isn't a known Block"); blockFeatures.add(blockFeature); } final Function result = MathParser.joinFeatures(context, blockFeatures); return result; } - + } \ No newline at end of file diff --git a/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockExponentialNotation.java b/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockExponentialNotation.java index 20f24e8f..62b7d52f 100755 --- a/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockExponentialNotation.java +++ b/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockExponentialNotation.java @@ -7,20 +7,20 @@ import org.warp.picalculator.gui.graphicengine.Renderer; public class BlockExponentialNotation extends BlockPower { private int bw; private int bh; - + @Override public void draw(GraphicEngine ge, Renderer r, int x, int y, Caret caret) { BlockContainer.getDefaultFont(small).use(ge); r.glColor(BlockContainer.getDefaultColor()); - r.glDrawStringLeft(x, y+height-bh, "ℯ℮"); - super.draw(ge, r, x+bw, y, caret); + r.glDrawStringLeft(x, y + height - bh, "ℯ℮"); + super.draw(ge, r, x + bw, y, caret); } - + @Override public void recomputeDimensions() { super.recomputeDimensions(); - bw = (int) (BlockContainer.getDefaultCharWidth(small)*1.5); + bw = (int) (BlockContainer.getDefaultCharWidth(small) * 1.5); bh = BlockContainer.getDefaultCharHeight(small); - this.width+=bw; + this.width += bw; } } diff --git a/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockParenthesis.java b/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockParenthesis.java index 77efed8c..a5660dfc 100755 --- a/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockParenthesis.java +++ b/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockParenthesis.java @@ -1,9 +1,6 @@ package org.warp.picalculator.gui.expression.blocks; import org.warp.picalculator.Error; -import org.warp.picalculator.gui.expression.Caret; -import org.warp.picalculator.gui.graphicengine.GraphicEngine; -import org.warp.picalculator.gui.graphicengine.Renderer; import org.warp.picalculator.math.Function; import org.warp.picalculator.math.MathContext; import org.warp.picalculator.math.parser.features.FeatureParenthesis; diff --git a/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockParenthesisAbstract.java b/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockParenthesisAbstract.java index 798b285d..d80698e6 100644 --- a/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockParenthesisAbstract.java +++ b/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockParenthesisAbstract.java @@ -4,9 +4,7 @@ import org.warp.picalculator.Error; import org.warp.picalculator.gui.expression.Caret; import org.warp.picalculator.gui.graphicengine.GraphicEngine; import org.warp.picalculator.gui.graphicengine.Renderer; -import org.warp.picalculator.math.Function; import org.warp.picalculator.math.MathContext; -import org.warp.picalculator.math.parser.features.FeatureParenthesis; import org.warp.picalculator.math.parser.features.interfaces.Feature; public abstract class BlockParenthesisAbstract extends Block { @@ -21,10 +19,10 @@ public abstract class BlockParenthesisAbstract extends Block { protected BlockParenthesisAbstract(String prefix) { containerNumber = new BlockContainer(false); this.prefix = prefix; - + recomputeDimensions(); } - + public BlockParenthesisAbstract() { containerNumber = new BlockContainer(false); this.prefix = null; @@ -36,15 +34,15 @@ public abstract class BlockParenthesisAbstract extends Block { BlockContainer.getDefaultFont(small).use(ge); r.glColor(BlockContainer.getDefaultColor()); if (prefix != null) { - r.glDrawStringLeft(x+1, y+line-chh/2, prefix); + r.glDrawStringLeft(x + 1, y + line - chh / 2, prefix); } - r.glDrawCharLeft(x+prw, y, '╭'); - r.glDrawCharLeft(x+prw, y+height-chh, '╰'); - r.glFillColor(x+prw+3, y+6, 2, height-6*2); - r.glFillColor(x+width-5, y+6, 2, height-6*2); - r.glDrawCharLeft(x+width-chw, y, '╮'); - r.glDrawCharLeft(x+width-chw, y+height-chh, '╯'); - containerNumber.draw(ge, r, x+prw+chw, y, caret); + r.glDrawCharLeft(x + prw, y, '╭'); + r.glDrawCharLeft(x + prw, y + height - chh, '╰'); + r.glFillColor(x + prw + 3, y + 6, 2, height - 6 * 2); + r.glFillColor(x + width - 5, y + 6, 2, height - 6 * 2); + r.glDrawCharLeft(x + width - chw, y, '╮'); + r.glDrawCharLeft(x + width - chw, y + height - chh, '╯'); + containerNumber.draw(ge, r, x + prw + chw, y, caret); } @Override @@ -75,9 +73,9 @@ public abstract class BlockParenthesisAbstract extends Block { @Override public void recomputeDimensions() { if (prefix == null) { - prw=0; + prw = 0; } else { - prw = 1+BlockContainer.getDefaultCharWidth(small)*prefix.length()+2; + prw = 1 + BlockContainer.getDefaultCharWidth(small) * prefix.length() + 2; } chw = BlockContainer.getDefaultCharWidth(small); chh = BlockContainer.getDefaultCharHeight(small); diff --git a/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockPower.java b/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockPower.java index 78794300..87b5ae2b 100755 --- a/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockPower.java +++ b/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockPower.java @@ -44,7 +44,7 @@ public class BlockPower extends Block { } return removed; } - + @Override public Block getBlock(Caret caret) { return containerExponent.getBlock(caret); @@ -54,9 +54,9 @@ public class BlockPower extends Block { public void recomputeDimensions() { final int w2 = containerExponent.getWidth(); final int h2 = containerExponent.getHeight(); - width = w2+1; - height = h2+BlockContainer.getDefaultCharHeight(small)-3; - line = h2+BlockContainer.getDefaultCharHeight(small)/2-3; + width = w2 + 1; + height = h2 + BlockContainer.getDefaultCharHeight(small) - 3; + line = h2 + BlockContainer.getDefaultCharHeight(small) / 2 - 3; } @Override diff --git a/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockSine.java b/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockSine.java index bf99524d..868793db 100644 --- a/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockSine.java +++ b/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockSine.java @@ -3,7 +3,6 @@ package org.warp.picalculator.gui.expression.blocks; import org.warp.picalculator.Error; import org.warp.picalculator.math.Function; import org.warp.picalculator.math.MathContext; -import org.warp.picalculator.math.parser.features.FeatureParenthesis; import org.warp.picalculator.math.parser.features.FeatureSine; import org.warp.picalculator.math.parser.features.interfaces.Feature; diff --git a/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockSquareRoot.java b/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockSquareRoot.java index bf6322fe..bc3952f9 100755 --- a/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockSquareRoot.java +++ b/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockSquareRoot.java @@ -54,7 +54,7 @@ public class BlockSquareRoot extends Block { } return removed; } - + @Override public Block getBlock(Caret caret) { return containerNumber.getBlock(caret); diff --git a/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockVariable.java b/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockVariable.java index 902e6022..8b54c8d3 100644 --- a/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockVariable.java +++ b/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockVariable.java @@ -28,6 +28,7 @@ public class BlockVariable extends Block { public BlockVariable(InputContext ic, char ch) { this(ic, ch, false); } + public BlockVariable(InputContext ic, char ch, boolean typeLocked) { this.ic = ic; this.ch = ch; @@ -47,7 +48,7 @@ public class BlockVariable extends Block { menu.mustRefreshMenu = true; } mustRefresh = true; - System.out.println("retrieve:"+type.toString()); + System.out.println("retrieve:" + type.toString()); } public void pushValue() { @@ -59,12 +60,12 @@ public class BlockVariable extends Block { ic.variableTypeDirtyID = null; } ic.variableTypes.put(ch, type); - System.out.println("push:"+type.toString()); + System.out.println("push:" + type.toString()); } @Override public void draw(GraphicEngine ge, Renderer r, int x, int y, Caret caret) { - if(ic.variableTypeDirtyID != typeDirtyID) { + if (ic.variableTypeDirtyID != typeDirtyID) { retrieveValue(); } if (mustRefresh) { @@ -82,7 +83,7 @@ public class BlockVariable extends Block { break; } } - + BlockContainer.getDefaultFont(small).use(ge); r.glColor(color); r.glDrawCharLeft(x, y, ch); @@ -124,7 +125,7 @@ public class BlockVariable extends Block { public int computeCaretMaxBound() { return 0; } - + @Override public ExtraMenu getExtraMenu() { return menu; @@ -134,7 +135,7 @@ public class BlockVariable extends Block { String text = ""; boolean mustRefreshMenu = true; - + public VariableMenu(BlockVariable var) { super(var); } @@ -143,12 +144,11 @@ public class BlockVariable extends Block { @Override public void open() { - + } @Override - public void close() { - } + public void close() {} @Override public boolean keyPressed(Key k) { @@ -206,9 +206,9 @@ public class BlockVariable extends Block { mustRefreshMenu = false; text = block.type.toString(); BinaryFont f = BlockContainer.getDefaultFont(true); - width = 7+f.getStringWidth(text)+7; - height = 2+f.getCharacterHeight()+2; - + width = 7 + f.getStringWidth(text) + 7; + height = 2 + f.getCharacterHeight() + 2; + super.beforeRender(delta, caret); return true; } @@ -218,7 +218,7 @@ public class BlockVariable extends Block { @Override public void draw(GraphicEngine ge, Renderer r, Caret caret) { r.glColor3f(1.0f, 1.0f, 1.0f); - DisplayManager.guiSkin.use(ge); + DisplayManager.INSTANCE.guiSkin.use(ge); int popupX = location[0]; int popupY = location[1]; if (popupX < 0) { @@ -228,23 +228,23 @@ public class BlockVariable extends Block { popupY = 0; } int[] screenSize = ge.getSize(); - if (popupX+width >= screenSize[0]) { - popupX=screenSize[0]-width-1; + if (popupX + width >= screenSize[0]) { + popupX = screenSize[0] - width - 1; } - if (popupY+height >= screenSize[1]) { - popupY=screenSize[1]-height-1; + if (popupY + height >= screenSize[1]) { + popupY = screenSize[1] - height - 1; } - r.glFillRect(location[0]+width/2-5, popupY+1, 10, 5, 163, 16, 10, 5); - r.glFillColor(popupX, popupY+5, width, height); - r.glFillColor(popupX+2, popupY+4, width-4, height+2); - r.glFillColor(popupX-1, popupY+7, width+2, height-4); - r.glFillRect(popupX+2, popupY+5+height/2-7/2, 4, 7, 160, 21, 4, 7); - r.glFillRect(popupX+width-2-4, popupY+5+height/2-7/2, 4, 7, 172, 21, 4, 7); + r.glFillRect(location[0] + width / 2 - 5, popupY + 1, 10, 5, 163, 16, 10, 5); + r.glFillColor(popupX, popupY + 5, width, height); + r.glFillColor(popupX + 2, popupY + 4, width - 4, height + 2); + r.glFillColor(popupX - 1, popupY + 7, width + 2, height - 4); + r.glFillRect(popupX + 2, popupY + 5 + height / 2 - 7 / 2, 4, 7, 160, 21, 4, 7); + r.glFillRect(popupX + width - 2 - 4, popupY + 5 + height / 2 - 7 / 2, 4, 7, 172, 21, 4, 7); r.glColor(color); BlockContainer.getDefaultFont(true).use(ge); - r.glDrawStringCenter(popupX+width/2, popupY+2+5, text); + r.glDrawStringCenter(popupX + width / 2, popupY + 2 + 5, text); } - + } @Override diff --git a/src/main/java/org/warp/picalculator/gui/expression/containers/InlineInputContainer.java b/src/main/java/org/warp/picalculator/gui/expression/containers/InlineInputContainer.java index a3cf2914..c1c27c1a 100755 --- a/src/main/java/org/warp/picalculator/gui/expression/containers/InlineInputContainer.java +++ b/src/main/java/org/warp/picalculator/gui/expression/containers/InlineInputContainer.java @@ -3,7 +3,6 @@ package org.warp.picalculator.gui.expression.containers; import org.warp.picalculator.gui.expression.InputContext; import org.warp.picalculator.gui.expression.blocks.Block; import org.warp.picalculator.gui.expression.blocks.BlockChar; -import org.warp.picalculator.math.MathematicalSymbols; public class InlineInputContainer extends InputContainer { @@ -16,7 +15,7 @@ public class InlineInputContainer extends InputContainer { public InlineInputContainer() { super(); } - + public InlineInputContainer(InputContext ic) { super(ic); } diff --git a/src/main/java/org/warp/picalculator/gui/expression/containers/InputContainer.java b/src/main/java/org/warp/picalculator/gui/expression/containers/InputContainer.java index 89de97d2..63c15a93 100755 --- a/src/main/java/org/warp/picalculator/gui/expression/containers/InputContainer.java +++ b/src/main/java/org/warp/picalculator/gui/expression/containers/InputContainer.java @@ -16,8 +16,6 @@ import org.warp.picalculator.gui.graphicengine.GraphicEngine; import org.warp.picalculator.gui.graphicengine.Renderer; import org.warp.picalculator.math.Function; import org.warp.picalculator.math.MathContext; -import org.warp.picalculator.math.parser.MathParser; -import org.warp.picalculator.math.parser.features.interfaces.Feature; import it.unimi.dsi.fastutil.objects.ObjectArrayList; @@ -35,6 +33,7 @@ public abstract class InputContainer implements GraphicalElement, InputLayout, S public synchronized InputContext getInputContext() { return inputContext; } + @Deprecated() /** * Use InputContainer(InputContext) instead @@ -75,7 +74,7 @@ public abstract class InputContainer implements GraphicalElement, InputLayout, S public void typeChar(String c) { typeChar(c.charAt(0)); } - + public void del() { caret.resetRemaining(); if (root.delBlock(caret)) { @@ -90,7 +89,6 @@ public abstract class InputContainer implements GraphicalElement, InputLayout, S closeExtra(); } - public Block getSelectedBlock() { caret.resetRemaining(); Block selectedBlock = root.getBlock(caret); @@ -102,7 +100,7 @@ public abstract class InputContainer implements GraphicalElement, InputLayout, S if (curPos > 0) { caret.setPosition(curPos - 1); } else { - caret.setPosition(maxPosition-1); + caret.setPosition(maxPosition - 1); } caret.turnOn(); caretTime = 0; @@ -157,9 +155,9 @@ public abstract class InputContainer implements GraphicalElement, InputLayout, S somethingChanged = true; } } - + if (extra != null) { - somethingChanged = somethingChanged|extra.beforeRender(delta, caret); + somethingChanged = somethingChanged | extra.beforeRender(delta, caret); } return somethingChanged; @@ -237,21 +235,22 @@ public abstract class InputContainer implements GraphicalElement, InputLayout, S extra = null; } } - + public void closeExtra() { if (extra != null) { extra.close(); extra = null; } } - + public boolean isExtraOpened() { return extra != null; } - + public KeyboardEventListener getExtraKeyboardEventListener() { return extra; } + public Function toFunction(MathContext context) throws Error { return root.toFunction(context); } diff --git a/src/main/java/org/warp/picalculator/gui/expression/containers/NormalInputContainer.java b/src/main/java/org/warp/picalculator/gui/expression/containers/NormalInputContainer.java index 94de7211..3793b453 100755 --- a/src/main/java/org/warp/picalculator/gui/expression/containers/NormalInputContainer.java +++ b/src/main/java/org/warp/picalculator/gui/expression/containers/NormalInputContainer.java @@ -22,7 +22,7 @@ public class NormalInputContainer extends InputContainer { public NormalInputContainer() { super(); } - + public NormalInputContainer(InputContext ic) { super(ic); } @@ -77,7 +77,7 @@ public class NormalInputContainer extends InputContainer { return new BlockChar(c); } } - + @Override public void typeChar(char c) { super.typeChar(c); diff --git a/src/main/java/org/warp/picalculator/gui/expression/containers/OutputContainer.java b/src/main/java/org/warp/picalculator/gui/expression/containers/OutputContainer.java index 0b18cfbc..3c1b65d7 100755 --- a/src/main/java/org/warp/picalculator/gui/expression/containers/OutputContainer.java +++ b/src/main/java/org/warp/picalculator/gui/expression/containers/OutputContainer.java @@ -31,7 +31,7 @@ public abstract class OutputContainer implements GraphicalElement, OutputLayout, roots = new ObjectArrayList<>(); roots.add(new BlockContainer(small)); } - + public void setContentAsSingleGroup(ObjectArrayList blocks) { roots.clear(); BlockContainer bcnt = new BlockContainer(); @@ -41,7 +41,7 @@ public abstract class OutputContainer implements GraphicalElement, OutputLayout, roots.add(bcnt); recomputeDimensions(); } - + public void setContentAsMultipleGroups(ObjectArrayList> roots) { this.roots.clear(); for (ObjectArrayList blocks : roots) { @@ -53,7 +53,7 @@ public abstract class OutputContainer implements GraphicalElement, OutputLayout, } recomputeDimensions(); } - + public void setContentAsMultipleElements(ObjectArrayList elems) { this.roots.clear(); for (Block block : elems) { @@ -76,7 +76,8 @@ public abstract class OutputContainer implements GraphicalElement, OutputLayout, int maxw = 0; for (BlockContainer root : roots) { int w = root.getWidth(); - if (w > maxw) maxw = w; + if (w > maxw) + maxw = w; } return maxw; } @@ -85,10 +86,10 @@ public abstract class OutputContainer implements GraphicalElement, OutputLayout, public int getHeight() { int h = 0; for (BlockContainer root : roots) { - h+=root.getHeight()+2; + h += root.getHeight() + 2; } if (h > 0) { - return h-2; + return h - 2; } else { return h; } @@ -122,8 +123,8 @@ public abstract class OutputContainer implements GraphicalElement, OutputLayout, public void draw(GraphicEngine ge, Renderer r, int x, int y) { int offset = 0; for (BlockContainer root : roots) { - root.draw(ge, r, x, y+offset, caret); - offset+=root.getHeight()+2; + root.draw(ge, r, x, y + offset, caret); + offset += root.getHeight() + 2; } } @@ -134,7 +135,7 @@ public abstract class OutputContainer implements GraphicalElement, OutputLayout, } public boolean isContentEmpty() { - for(BlockContainer root : roots) { + for (BlockContainer root : roots) { ObjectArrayList cnt = root.getContent(); if (cnt != null && !cnt.isEmpty()) { return false; diff --git a/src/main/java/org/warp/picalculator/gui/expression/containers/OutputLayout.java b/src/main/java/org/warp/picalculator/gui/expression/containers/OutputLayout.java index 0035c935..daea265c 100755 --- a/src/main/java/org/warp/picalculator/gui/expression/containers/OutputLayout.java +++ b/src/main/java/org/warp/picalculator/gui/expression/containers/OutputLayout.java @@ -1,4 +1,3 @@ package org.warp.picalculator.gui.expression.containers; -public interface OutputLayout { -} +public interface OutputLayout {} diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/GraphicEngine.java b/src/main/java/org/warp/picalculator/gui/graphicengine/GraphicEngine.java index df8770f1..ba157e36 100755 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/GraphicEngine.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/GraphicEngine.java @@ -2,7 +2,6 @@ package org.warp.picalculator.gui.graphicengine; import java.io.IOException; import java.util.List; -import java.util.Vector; public interface GraphicEngine { @@ -17,7 +16,7 @@ public interface GraphicEngine { public void setDisplayMode(final int ww, final int wh); public void create(); - + public void create(Runnable object); public boolean wasResized(); @@ -38,7 +37,7 @@ public interface GraphicEngine { public Skin loadSkin(String file) throws IOException; - public void waitUntilExit(); + public void waitForExit(); public boolean isSupported(); @@ -47,7 +46,7 @@ public interface GraphicEngine { public default boolean supportsFontRegistering() { return false; } - + public default List getRegisteredFonts() { return null; } diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/Skin.java b/src/main/java/org/warp/picalculator/gui/graphicengine/Skin.java index 3b2d7574..04c927bf 100755 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/Skin.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/Skin.java @@ -7,7 +7,7 @@ public interface Skin { public void load(String file) throws IOException; public void initialize(GraphicEngine d); - + public boolean isInitialized(); public void use(GraphicEngine d); diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPUEngine.java b/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPUEngine.java index e4ac1a63..fe1a31bc 100644 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPUEngine.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPUEngine.java @@ -1,21 +1,15 @@ package org.warp.picalculator.gui.graphicengine.cpu; -import java.awt.FontMetrics; import java.awt.GraphicsEnvironment; import java.awt.image.BufferedImage; import java.io.IOException; -import java.util.ArrayList; import java.util.concurrent.Semaphore; -import javax.swing.UIManager; -import javax.swing.UnsupportedLookAndFeelException; - import org.warp.picalculator.Main; import org.warp.picalculator.Utils; import org.warp.picalculator.gui.DisplayManager; 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; @@ -48,12 +42,12 @@ public class CPUEngine implements GraphicEngine { g = new BufferedImage(ww, wh, BufferedImage.TYPE_INT_ARGB); INSTANCE.wasResized = false; } - + @Override public void create() { create(null); } - + @Override public void create(Runnable onInitialized) { INSTANCE = new SwingWindow(this); @@ -126,7 +120,7 @@ public class CPUEngine implements GraphicEngine { @Deprecated() public void refresh() { - if (DisplayManager.getScreen() == null || (DisplayManager.error != null && DisplayManager.error.length() > 0) || DisplayManager.getScreen() == null || DisplayManager.getScreen().mustBeRefreshed()) { + if (DisplayManager.INSTANCE.getScreen() == null || (DisplayManager.INSTANCE.error != null && DisplayManager.INSTANCE.error.length() > 0) || DisplayManager.INSTANCE.getScreen() == null || DisplayManager.INSTANCE.getScreen().mustBeRefreshed()) { INSTANCE.c.repaint(); } } @@ -176,16 +170,16 @@ public class CPUEngine implements GraphicEngine { } @Override - public void waitUntilExit() { + public void waitForExit() { try { exitSemaphore.acquire(); - } catch (InterruptedException e) { - } + } catch (InterruptedException e) {} } @Override public boolean isSupported() { - if (Utils.forceEngine != null && Utils.forceEngine != "cpu") return false; + if (Utils.forceEngine != null && Utils.forceEngine != "cpu") + return false; return (Utils.headlessOverride || GraphicsEnvironment.isHeadless()) == false; } diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPUFont.java b/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPUFont.java index 1ac46d27..237ad05f 100755 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPUFont.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPUFont.java @@ -148,8 +148,7 @@ public class CPUFont implements BinaryFont { } @Override - public void initialize(GraphicEngine d) { - } + public void initialize(GraphicEngine d) {} @Override public void use(GraphicEngine d) { diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPURenderer.java b/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPURenderer.java index a181cd9e..d408ba21 100644 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPURenderer.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPURenderer.java @@ -7,306 +7,306 @@ import org.warp.picalculator.gui.graphicengine.BinaryFont; import org.warp.picalculator.gui.graphicengine.Renderer; public class CPURenderer implements Renderer { - public int clearcolor = 0xFFc5c2af; - public CPUFont currentFont; - public CPUSkin currentSkin; - public int color = 0xFF000000; - public int[] size = new int[] { 1, 1 }; - static int[] canvas2d = new int[1]; - - @Override - public void glColor3i(int r, int gg, int b) { - glColor4i(r, gg, b, 255); - } - - @Override - public void glColor(int c) { - color = c & 0xFFFFFFFF; - } - - @Override - public void glClearColor(int c) { - clearcolor = c & 0xFFFFFFFF; - } - - @Override - public void glColor4i(int red, int green, int blue, int alpha) { - color = (alpha << 24) + (red << 16) + (green << 8) + (blue); - } - - @Override - public void glClearColor4i(int red, int green, int blue, int alpha) { - clearcolor = (alpha << 24) + (red << 16) + (green << 8) + (blue); - } - - @Override - public void glClearColor4f(float red, float green, float blue, float alpha) { - clearcolor = ((int) (alpha * 255) << 24) + ((int) (red * 255) << 16) + ((int) (green * 255) << 8) + ((int) (blue * 255)); - } - - @Override - public void glClear(int screenWidth, int screenHeight) { - for (int x = 0; x < screenWidth; x++) { - for (int y = 0; y < screenHeight; y++) { - canvas2d[x + y * size[0]] = clearcolor; - } - } - } - - private void glDrawSkin(int x0, int y0, int s0, int t0, int s1, int t1, boolean transparent) { - x0 += Main.screenPos[0]; - y0 += Main.screenPos[1]; - int oldColor; - 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; - } - int pixelX; - int pixelY; - for (int texx = 0; texx < s1 - s0; texx++) { - for (int texy = 0; texy < t1 - t0; texy++) { - pixelX = (x0 + texx * onex + width); - pixelY = (y0 + texy * oney + height); - if (pixelX - (pixelX % size[0]) == 0) { - newColor = currentSkin.skinData[(s0 + texx) + (t0 + texy) * currentSkin.skinSize[0]]; - if (transparent) { - oldColor = canvas2d[pixelX + pixelY * size[0]]; - final float a2 = (newColor >> 24 & 0xFF) / 255f; - final float a1 = 1f - a2; - final int r = (int) ((oldColor >> 16 & 0xFF) * a1 + (newColor >> 16 & 0xFF) * a2); - final int g = (int) ((oldColor >> 8 & 0xFF) * a1 + (newColor >> 8 & 0xFF) * a2); - final int b = (int) ((oldColor & 0xFF) * a1 + (newColor & 0xFF) * a2); - newColor = 0xFF000000 | r << 16 | g << 8 | b; - } - canvas2d[pixelX + pixelY * size[0]] = newColor; - } - } - } - } - - @Override - public void glDrawLine(float x0, float y0, float x1, float y1) { - x0 += Main.screenPos[0]; - x1 += Main.screenPos[0]; - y0 += Main.screenPos[1]; - y1 += Main.screenPos[1]; - final int ix0 = (int) x0; - final int ix1 = (int) x1; - final int iy0 = (int) y0; - final int iy1 = (int) y1; - if (ix0 >= size[0] || iy0 >= size[0]) { - return; - } - if (iy0 == iy1) { - for (int x = 0; x <= ix1 - ix0; x++) { - if ((ix0 + x < size[0]) & (iy0 < size[1])) { - canvas2d[ix0 + x + iy0 * size[0]] = color; - } - } - } else if (ix0 == ix1) { - for (int y = 0; y <= iy1 - iy0; y++) { - if ((ix0 < size[0]) & (iy0 + y < size[1])) { - canvas2d[ix0 + (iy0 + y) * size[0]] = color; - } - } - } else { - final int m = (iy1 - iy0) / (ix1 - ix0); - for (int texx = 0; texx <= ix1 - ix0; texx++) { - if (ix0 + texx < size[0] && iy0 + (m * texx) < size[1]) { - if ((ix0 + texx < size[0]) & ((iy0 + (m * texx)) < size[1])) { - canvas2d[(ix0 + texx) + (iy0 + (m * texx)) * size[0]] = color; - } - } - } - } - } - - @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) uvX, (int) uvY, (int) (uvWidth + uvX), (int) (uvHeight + uvY), true); - } else { - glFillColor(x, y, width, height); - } - } - - @Override - public void glFillColor(float x, float y, float width, float height) { - x += Main.screenPos[0]; - y += Main.screenPos[1]; - - final int ix = (int) x; - final int iy = (int) y; - final int iw = (int) width; - final int ih = (int) height; - - int x0 = ix; - int y0 = iy; - int x1 = ix + iw; - int y1 = iy + ih; - if (ix >= size[0] || iy >= size[0]) { - return; - } - if (x0 < 0) { - x0 = 0; - } - if (x1 >= size[0]) { - x1 = size[0]; - } - if (y0 < 0) { - y0 = 0; - } - if (y1 >= size[1]) { - y1 = size[1]; - } - final int sizeW = size[0]; - for (int px = x0; px < x1; px++) { - for (int py = y0; py < y1; py++) { - canvas2d[(px) + (py) * sizeW] = color; - } - } - } - - @Override - public void glDrawStringLeft(float x, float y, String textString) { - x += Main.screenPos[0]; - y += Main.screenPos[1]; - - final int ix = (int) x; - final int iy = (int) y; - - final int[] text = currentFont.getCharIndexes(textString); - final int[] screen = canvas2d; - final int[] screenSize = size; - final int screenLength = screen.length; - int screenPos = 0; - - int currentInt; - int currentIntBitPosition; - int bitData; - int cpos; - int j; - final int l = text.length; - for (int i = 0; i < l; i++) { - cpos = (i * (currentFont.charW)); - final int charIndex = text[i]; - for (int dy = 0; dy < currentFont.charH; dy++) { - for (int dx = 0; dx < currentFont.charW; dx++) { - j = ix + cpos + dx; - if (j > 0 & j < screenSize[0]) { - final int bit = dx + dy * currentFont.charW; - currentInt = (int) (Math.floor(bit) / (CPUFont.intBits)); - currentIntBitPosition = bit - (currentInt * CPUFont.intBits); - bitData = (currentFont.chars32[charIndex * currentFont.charIntCount + currentInt] >> currentIntBitPosition) & 1; - screenPos = ix + cpos + dx + (iy + dy) * screenSize[0]; - if (bitData == 1 & screenLength > screenPos) { - screen[screenPos] = color; - } - } - } - } - } - } - - @Override - public void glDrawStringCenter(float x, float y, String text) { - glDrawStringLeft(x - (currentFont.getStringWidth(text) / 2), y, text); - } - - @Override - public void glDrawStringRight(float x, float y, String text) { - glDrawStringLeft(x - currentFont.getStringWidth(text), y, text); - } - - @Deprecated - public int glGetFontWidth(FontMetrics fm, String text) { - return fm.stringWidth(text); - } - - @Deprecated - public int glGetCurrentFontHeight() { - return currentFont.charH; - } - - @Override - public int glGetClearColor() { - return clearcolor; - } - - @Override - public BinaryFont getCurrentFont() { - return currentFont; - } - - @Override - public void glColor3f(float red, float green, float blue) { - glColor3i((int) (red * 255f), (int) (green * 255f), (int) (blue * 255f)); - } - - @Override - public void glColor4f(float red, float green, float blue, float alpha) { - glColor4i((int) (red * 255f), (int) (green * 255f), (int) (blue * 255f), (int) (alpha * 255f)); - } - - @Override - public void glClearSkin() { - currentSkin = null; - } - - @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 glDrawCharRight(int x, int y, char ch) { - glDrawStringRight(x, y, ch + ""); - } + public int clearcolor = 0xFFc5c2af; + public CPUFont currentFont; + public CPUSkin currentSkin; + public int color = 0xFF000000; + public int[] size = new int[] { 1, 1 }; + static int[] canvas2d = new int[1]; + @Override + public void glColor3i(int r, int gg, int b) { + glColor4i(r, gg, b, 255); } + + @Override + public void glColor(int c) { + color = c & 0xFFFFFFFF; + } + + @Override + public void glClearColor(int c) { + clearcolor = c & 0xFFFFFFFF; + } + + @Override + public void glColor4i(int red, int green, int blue, int alpha) { + color = (alpha << 24) + (red << 16) + (green << 8) + (blue); + } + + @Override + public void glClearColor4i(int red, int green, int blue, int alpha) { + clearcolor = (alpha << 24) + (red << 16) + (green << 8) + (blue); + } + + @Override + public void glClearColor4f(float red, float green, float blue, float alpha) { + clearcolor = ((int) (alpha * 255) << 24) + ((int) (red * 255) << 16) + ((int) (green * 255) << 8) + ((int) (blue * 255)); + } + + @Override + public void glClear(int screenWidth, int screenHeight) { + for (int x = 0; x < screenWidth; x++) { + for (int y = 0; y < screenHeight; y++) { + canvas2d[x + y * size[0]] = clearcolor; + } + } + } + + private void glDrawSkin(int x0, int y0, int s0, int t0, int s1, int t1, boolean transparent) { + x0 += Main.screenPos[0]; + y0 += Main.screenPos[1]; + int oldColor; + 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; + } + int pixelX; + int pixelY; + for (int texx = 0; texx < s1 - s0; texx++) { + for (int texy = 0; texy < t1 - t0; texy++) { + pixelX = (x0 + texx * onex + width); + pixelY = (y0 + texy * oney + height); + if (pixelX - (pixelX % size[0]) == 0) { + newColor = currentSkin.skinData[(s0 + texx) + (t0 + texy) * currentSkin.skinSize[0]]; + if (transparent) { + oldColor = canvas2d[pixelX + pixelY * size[0]]; + final float a2 = (newColor >> 24 & 0xFF) / 255f; + final float a1 = 1f - a2; + final int r = (int) ((oldColor >> 16 & 0xFF) * a1 + (newColor >> 16 & 0xFF) * a2); + final int g = (int) ((oldColor >> 8 & 0xFF) * a1 + (newColor >> 8 & 0xFF) * a2); + final int b = (int) ((oldColor & 0xFF) * a1 + (newColor & 0xFF) * a2); + newColor = 0xFF000000 | r << 16 | g << 8 | b; + } + canvas2d[pixelX + pixelY * size[0]] = newColor; + } + } + } + } + + @Override + public void glDrawLine(float x0, float y0, float x1, float y1) { + x0 += Main.screenPos[0]; + x1 += Main.screenPos[0]; + y0 += Main.screenPos[1]; + y1 += Main.screenPos[1]; + final int ix0 = (int) x0; + final int ix1 = (int) x1; + final int iy0 = (int) y0; + final int iy1 = (int) y1; + if (ix0 >= size[0] || iy0 >= size[0]) { + return; + } + if (iy0 == iy1) { + for (int x = 0; x <= ix1 - ix0; x++) { + if ((ix0 + x < size[0]) & (iy0 < size[1])) { + canvas2d[ix0 + x + iy0 * size[0]] = color; + } + } + } else if (ix0 == ix1) { + for (int y = 0; y <= iy1 - iy0; y++) { + if ((ix0 < size[0]) & (iy0 + y < size[1])) { + canvas2d[ix0 + (iy0 + y) * size[0]] = color; + } + } + } else { + final int m = (iy1 - iy0) / (ix1 - ix0); + for (int texx = 0; texx <= ix1 - ix0; texx++) { + if (ix0 + texx < size[0] && iy0 + (m * texx) < size[1]) { + if ((ix0 + texx < size[0]) & ((iy0 + (m * texx)) < size[1])) { + canvas2d[(ix0 + texx) + (iy0 + (m * texx)) * size[0]] = color; + } + } + } + } + } + + @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) uvX, (int) uvY, (int) (uvWidth + uvX), (int) (uvHeight + uvY), true); + } else { + glFillColor(x, y, width, height); + } + } + + @Override + public void glFillColor(float x, float y, float width, float height) { + x += Main.screenPos[0]; + y += Main.screenPos[1]; + + final int ix = (int) x; + final int iy = (int) y; + final int iw = (int) width; + final int ih = (int) height; + + int x0 = ix; + int y0 = iy; + int x1 = ix + iw; + int y1 = iy + ih; + if (ix >= size[0] || iy >= size[0]) { + return; + } + if (x0 < 0) { + x0 = 0; + } + if (x1 >= size[0]) { + x1 = size[0]; + } + if (y0 < 0) { + y0 = 0; + } + if (y1 >= size[1]) { + y1 = size[1]; + } + final int sizeW = size[0]; + for (int px = x0; px < x1; px++) { + for (int py = y0; py < y1; py++) { + canvas2d[(px) + (py) * sizeW] = color; + } + } + } + + @Override + public void glDrawStringLeft(float x, float y, String textString) { + x += Main.screenPos[0]; + y += Main.screenPos[1]; + + final int ix = (int) x; + final int iy = (int) y; + + final int[] text = currentFont.getCharIndexes(textString); + final int[] screen = canvas2d; + final int[] screenSize = size; + final int screenLength = screen.length; + int screenPos = 0; + + int currentInt; + int currentIntBitPosition; + int bitData; + int cpos; + int j; + final int l = text.length; + for (int i = 0; i < l; i++) { + cpos = (i * (currentFont.charW)); + final int charIndex = text[i]; + for (int dy = 0; dy < currentFont.charH; dy++) { + for (int dx = 0; dx < currentFont.charW; dx++) { + j = ix + cpos + dx; + if (j > 0 & j < screenSize[0]) { + final int bit = dx + dy * currentFont.charW; + currentInt = (int) (Math.floor(bit) / (CPUFont.intBits)); + currentIntBitPosition = bit - (currentInt * CPUFont.intBits); + bitData = (currentFont.chars32[charIndex * currentFont.charIntCount + currentInt] >> currentIntBitPosition) & 1; + screenPos = ix + cpos + dx + (iy + dy) * screenSize[0]; + if (bitData == 1 & screenLength > screenPos) { + screen[screenPos] = color; + } + } + } + } + } + } + + @Override + public void glDrawStringCenter(float x, float y, String text) { + glDrawStringLeft(x - (currentFont.getStringWidth(text) / 2), y, text); + } + + @Override + public void glDrawStringRight(float x, float y, String text) { + glDrawStringLeft(x - currentFont.getStringWidth(text), y, text); + } + + @Deprecated + public int glGetFontWidth(FontMetrics fm, String text) { + return fm.stringWidth(text); + } + + @Deprecated + public int glGetCurrentFontHeight() { + return currentFont.charH; + } + + @Override + public int glGetClearColor() { + return clearcolor; + } + + @Override + public BinaryFont getCurrentFont() { + return currentFont; + } + + @Override + public void glColor3f(float red, float green, float blue) { + glColor3i((int) (red * 255f), (int) (green * 255f), (int) (blue * 255f)); + } + + @Override + public void glColor4f(float red, float green, float blue, float alpha) { + glColor4i((int) (red * 255f), (int) (green * 255f), (int) (blue * 255f), (int) (alpha * 255f)); + } + + @Override + public void glClearSkin() { + currentSkin = null; + } + + @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 glDrawCharRight(int x, int y, char ch) { + glDrawStringRight(x, y, ch + ""); + } + +} diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/SwingWindow.java b/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/SwingWindow.java index 89fd6dbc..9247e17c 100755 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/SwingWindow.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/SwingWindow.java @@ -14,8 +14,6 @@ import java.awt.image.DataBufferInt; import javax.swing.JFrame; import javax.swing.JPanel; -import javax.swing.UIManager; -import javax.swing.UnsupportedLookAndFeelException; import org.warp.picalculator.Utils; import org.warp.picalculator.device.Keyboard; @@ -61,7 +59,7 @@ public class SwingWindow extends JFrame { addComponentListener(new ComponentListener() { @Override public void componentHidden(ComponentEvent e) { - DisplayManager.engine.destroy(); + DisplayManager.INSTANCE.engine.destroy(); } @Override diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/DeallocationHelper.java b/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/DeallocationHelper.java index 6b7defb2..1c16194e 100755 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/DeallocationHelper.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/DeallocationHelper.java @@ -402,7 +402,7 @@ public class DeallocationHelper { attachmentOrByteBufferFieldMap.put(bufferClass, bufferField); } } catch (final ClassNotFoundException cnfe) {// TODO The Java version - // isn't very useful + // isn't very useful // under // Android as it is // always zero, rather @@ -419,7 +419,7 @@ public class DeallocationHelper { // if a known implementation has drastically changed or if the current // implementation is unknown if (attachmentOrByteBufferFieldNameMap.isEmpty()) {// detects everything - // with the + // with the // reflection API // creates all // possible kinds of @@ -581,7 +581,7 @@ public class DeallocationHelper { } // if there is no known implementation class of the direct byte buffers if (deallocatableBufferClassSet.isEmpty()) {// creates a read write - // direct byte buffer + // direct byte buffer final ByteBuffer dummyReadWriteDirectByteBuffer = ByteBuffer.allocateDirect(1); // gets its class final Class readWriteDirectByteBufferClass = dummyReadWriteDirectByteBuffer.getClass(); @@ -625,7 +625,7 @@ public class DeallocationHelper { final ByteBuffer deallocatableDirectByteBuffer; // looks only for the direct buffers if (buffer != null && buffer.isDirect()) {// looks for any contained - // buffer in the passed buffer + // buffer in the passed buffer final Class bufferClass = buffer.getClass(); final Field attachmentOrByteBufferField = attachmentOrByteBufferFieldMap == null ? null : attachmentOrByteBufferFieldMap.get(bufferClass); final Buffer attachmentBufferOrByteBuffer; @@ -650,20 +650,20 @@ public class DeallocationHelper { } // if there is no buffer inside the buffer given in input if (attachmentBufferOrByteBuffer == null) {// if it's a direct byte - // buffer and if it's an + // buffer and if it's an // instance of // a deallocatable buffer // class if (buffer instanceof ByteBuffer && deallocatableBufferClassSet.contains(bufferClass)) { deallocatableDirectByteBuffer = (ByteBuffer) buffer; } else {// it's not a byte buffer or it's not a - // deallocatable buffer + // deallocatable buffer deallocatableDirectByteBuffer = null; final String bufferClassName = bufferClass.getName(); logger.warning("No deallocatable buffer has been found for an instance of the class " + bufferClassName + " whereas it is a direct NIO buffer"); } } else {// the passed buffer contains another buffer, looks for a - // deallocatable buffer inside it + // deallocatable buffer inside it deallocatableDirectByteBuffer = findDeallocatableBuffer(attachmentBufferOrByteBuffer); } } else {// there is no need to clean the heap based buffers diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPUEngine.java b/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPUEngine.java index 6f69f5c7..103f7265 100755 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPUEngine.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPUEngine.java @@ -1,10 +1,6 @@ package org.warp.picalculator.gui.graphicengine.gpu; import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Vector; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.Semaphore; @@ -64,7 +60,7 @@ public class GPUEngine implements GraphicEngine { public void create() { create(null); } - + @Override public void create(Runnable onInitialized) { created = true; @@ -129,25 +125,26 @@ public class GPUEngine implements GraphicEngine { } @Override - public void waitUntilExit() { + public void waitForExit() { try { exitSemaphore.acquire(); - } catch (InterruptedException e) { - } + } catch (InterruptedException e) {} } @Override public boolean isSupported() { - if (Utils.forceEngine != null && Utils.forceEngine != "gpu") return false; - if (Utils.headlessOverride) return false; + if (Utils.forceEngine != null && Utils.forceEngine != "gpu") + return false; + if (Utils.headlessOverride) + return false; boolean available = false; boolean errored = false; try { available = GLProfile.isAvailable(GLProfile.GL2ES1); - } catch (Exception ex) { - errored = true; - System.err.println(ex.getMessage()); - } + } catch (Exception ex) { + errored = true; + System.err.println(ex.getMessage()); + } if (!available && !errored) { System.err.println(GLProfile.glAvailabilityToString()); } @@ -158,7 +155,7 @@ public class GPUEngine implements GraphicEngine { public boolean doesRefreshPauses() { return false; } - + public void registerFont(GPUFont gpuFont) { registeredFonts.add(gpuFont); } diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPUFont.java b/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPUFont.java index 780c2657..bc3ff128 100755 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPUFont.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPUFont.java @@ -94,7 +94,7 @@ public class GPUFont implements BinaryFont { e.printStackTrace(); } } - + private void genTexture() { try { texture = GPURenderer.importTexture(tmpFont); diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPURenderer.java b/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPURenderer.java index bfdc1f53..c79194c0 100755 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPURenderer.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPURenderer.java @@ -3,7 +3,6 @@ package org.warp.picalculator.gui.graphicengine.gpu; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; -import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; @@ -29,7 +28,7 @@ public class GPURenderer implements Renderer { private static final int ELEMENT_VERTICES_COUNT = 6; private static final int ELEMENTS_MAX_COUNT_PER_BUFFER = 128; - + private final DeallocationHelper deallocationHelper = new DeallocationHelper(); FloatBuffer fbVertices; FloatBuffer txVertices; @@ -51,40 +50,19 @@ public class GPURenderer implements Renderer { final float gre = (gg) / 255f; final float blu = (b) / 255f; //currentColor = new float[] { red, gre, blu, 1.0f, red, gre, blu, 1.0f, red, gre, blu, 1.0f, red, gre, blu, 1.0f, }; - currentColor = new float[] { - red, gre, blu, 1.0f, - red, gre, blu, 1.0f, - red, gre, blu, 1.0f, - red, gre, blu, 1.0f, - red, gre, blu, 1.0f, - red, gre, blu, 1.0f, - }; //OK + currentColor = new float[] { red, gre, blu, 1.0f, red, gre, blu, 1.0f, red, gre, blu, 1.0f, red, gre, blu, 1.0f, red, gre, blu, 1.0f, red, gre, blu, 1.0f, }; //OK } @Override public void glColor3f(float red, float gre, float blu) { // currentColor = new float[] { red, gre, blu, 1.0f, red, gre, blu, 1.0f, red, gre, blu, 1.0f, red, gre, blu, 1.0f, }; - currentColor = new float[] { - red, gre, blu, 1.0f, - red, gre, blu, 1.0f, - red, gre, blu, 1.0f, - red, gre, blu, 1.0f, - red, gre, blu, 1.0f, - red, gre, blu, 1.0f, - };//OK + currentColor = new float[] { red, gre, blu, 1.0f, red, gre, blu, 1.0f, red, gre, blu, 1.0f, red, gre, blu, 1.0f, red, gre, blu, 1.0f, red, gre, blu, 1.0f, };//OK } @Override public void glColor4f(float red, float gre, float blu, float alp) { // currentColor = new float[] { red, gre, blu, alp, red, gre, blu, alp, red, gre, blu, alp, red, gre, blu, alp, }; - currentColor = new float[] { - red, gre, blu, alp, - red, gre, blu, alp, - red, gre, blu, alp, - red, gre, blu, alp, - red, gre, blu, alp, - red, gre, blu, alp, - };//ok + currentColor = new float[] { red, gre, blu, alp, red, gre, blu, alp, red, gre, blu, alp, red, gre, blu, alp, red, gre, blu, alp, red, gre, blu, alp, };//ok } @@ -118,14 +96,7 @@ public class GPURenderer implements Renderer { final float blu = (b) / 255f; final float alp = (a) / 255f; //currentColor = new float[] { red, gre, blu, alp, red, gre, blu, alp, red, gre, blu, alp, red, gre, blu, alp, }; - currentColor = new float[] { - red, gre, blu, alp, - red, gre, blu, alp, - red, gre, blu, alp, - red, gre, blu, alp, - red, gre, blu, alp, - red, gre, blu, alp, - };//OK + currentColor = new float[] { red, gre, blu, alp, red, gre, blu, alp, red, gre, blu, alp, red, gre, blu, alp, red, gre, blu, alp, red, gre, blu, alp, };//OK } @Override @@ -167,31 +138,17 @@ public class GPURenderer implements Renderer { //V1 x, y + height, 0.0f //V2 x + width, y, 0.0f //V3 x + width, y + height, 0.0f - + //NV0 = V1 //NV1 = V3 //NV2 = V0 - + //NV3 = V0 //NV4 = V3 //NV5 = V2 - - final float[] vertices = { - x, y + height, 0.0f, - x + width, y + height, 0.0f, - x, y, 0.0f, - x, y, 0.0f, - x + width, y + height, 0.0f, - x + width, y, 0.0f - }; - final float[] tex_vertices = { - uvX, uvY, - uvX + uvWidth, uvY, - uvX, uvY + uvHeight, - uvX, uvY + uvHeight, - uvX + uvWidth, uvY, - uvX + uvWidth, uvY + uvHeight - }; + + final float[] vertices = { x, y + height, 0.0f, x + width, y + height, 0.0f, x, y, 0.0f, x, y, 0.0f, x + width, y + height, 0.0f, x + width, y, 0.0f }; + final float[] tex_vertices = { uvX, uvY, uvX + uvWidth, uvY, uvX, uvY + uvHeight, uvX, uvY + uvHeight, uvX + uvWidth, uvY, uvX + uvWidth, uvY + uvHeight }; fbElements++; fbVertices.put(vertices); txVertices.put(tex_vertices); @@ -207,31 +164,17 @@ public class GPURenderer implements Renderer { //V1 x0, y0 + h1, 0.0f //V2 x0 + w1, y0, 0.0f //V3 x0 + w1, y0 + h1, 0.0f - + //NV0 = V1 //NV1 = V3 //NV2 = V0 - + //NV3 = V0 //NV4 = V3 //NV5 = V2 - - final float[] vertices = { - x0, y0 + h1, 0.0f, - x0 + w1, y0 + h1, 0.0f, - x0, y0, 0.0f, - x0, y0, 0.0f, - x0 + w1, y0 + h1, 0.0f, - x0 + w1, y0, 0.0f, - }; - final float[] tex_vertices = { - 0.0f, 0.0f, - 1.0f, 0.0f, - 0.0f, 1.0f, - 0.0f, 1.0f, - 1.0f, 0.0f, - 1.0f, 1.0f, - }; + + final float[] vertices = { x0, y0 + h1, 0.0f, x0 + w1, y0 + h1, 0.0f, x0, y0, 0.0f, x0, y0, 0.0f, x0 + w1, y0 + h1, 0.0f, x0 + w1, y0, 0.0f, }; + final float[] tex_vertices = { 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, }; fbElements++; fbVertices.put(vertices); txVertices.put(tex_vertices); @@ -328,7 +271,7 @@ public class GPURenderer implements Renderer { public void updateDrawCycle() { updateDrawCycle(false, false); } - + public void updateDrawCycle(boolean first, boolean last) { final boolean textureChange = precTexEnabled != currentTexEnabled || precTex != currentTex; final boolean changeRequired = last || fbElements >= ELEMENTS_MAX_COUNT_PER_BUFFER; @@ -359,7 +302,7 @@ public class GPURenderer implements Renderer { } } } - + public void endDrawCycle() { fbVertices.limit(fbVertices.position()); txVertices.limit(txVertices.position()); @@ -400,7 +343,7 @@ public class GPURenderer implements Renderer { updateDrawCycle(); } } - + void disableTexture() { currentTexEnabled = false; updateDrawCycle(); diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/NEWTWindow.java b/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/NEWTWindow.java index 8a64bad9..2fdf0f8c 100755 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/NEWTWindow.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/NEWTWindow.java @@ -97,7 +97,7 @@ class NEWTWindow implements GLEventListener { @Override public void windowDestroyed(WindowEvent e) { - DisplayManager.engine.destroy(); + DisplayManager.INSTANCE.engine.destroy(); } @Override @@ -280,7 +280,7 @@ class NEWTWindow implements GLEventListener { @Override public void init(GLAutoDrawable drawable) { final GL2ES1 gl = drawable.getGL().getGL2ES1(); - + //Vsync gl.setSwapInterval(2); @@ -335,7 +335,7 @@ class NEWTWindow implements GLEventListener { @Override public void display(GLAutoDrawable glad) { final GL2ES1 gl = glad.getGL().getGL2ES1(); - + GPURenderer.gl = gl; gl.glEnableClientState(GLPointerFunc.GL_COLOR_ARRAY); diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/headless24bit/Headless24bitEngine.java b/src/main/java/org/warp/picalculator/gui/graphicengine/headless24bit/Headless24bitEngine.java index 853a3f63..9e81edd7 100644 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/headless24bit/Headless24bitEngine.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/headless24bit/Headless24bitEngine.java @@ -1,23 +1,14 @@ package org.warp.picalculator.gui.graphicengine.headless24bit; -import java.io.BufferedReader; -import java.io.Console; import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.util.ArrayList; import java.util.logging.ConsoleHandler; import org.fusesource.jansi.AnsiConsole; -import org.fusesource.jansi.internal.Kernel32; -import org.fusesource.jansi.internal.Kernel32.INPUT_RECORD; import org.fusesource.jansi.internal.WindowsSupport; import org.warp.picalculator.Main; import org.warp.picalculator.Utils; import org.warp.picalculator.device.Keyboard; import org.warp.picalculator.device.Keyboard.Key; -import org.warp.picalculator.gui.graphicengine.BinaryFont; import org.warp.picalculator.gui.graphicengine.Renderer; import org.warp.picalculator.gui.graphicengine.RenderingLoop; @@ -28,16 +19,16 @@ public class Headless24bitEngine implements org.warp.picalculator.gui.graphiceng private RenderingLoop renderLoop; public static final int C_MUL_X = 4;//8; public static final int C_MUL_Y = 8;//8; - protected static final int C_WIDTH = Main.screenSize[0]/C_MUL_X;//Main.screenSize[0]/2;//;60; - protected static final int C_HEIGHT = Main.screenSize[1]/C_MUL_Y;//Main.screenSize[1]/3;//;40; + protected static final int C_WIDTH = Main.screenSize[0] / C_MUL_X;//Main.screenSize[0]/2;//;60; + protected static final int C_HEIGHT = Main.screenSize[1] / C_MUL_Y;//Main.screenSize[1]/3;//;40; private String title = Main.calculatorName; private boolean win = false; private Key precKey = null; - + @Override public int[] getSize() { new ConsoleHandler(); - return new int[]{r.size[0], r.size[1]}; + return new int[] { r.size[0], r.size[1] }; } @Override @@ -53,87 +44,87 @@ public class Headless24bitEngine implements org.warp.picalculator.gui.graphiceng @Override public void setResizable(boolean r) { // TODO Auto-generated method stub - + } @Override public void setDisplayMode(int ww, int wh) { // TODO Auto-generated method stub - + } private long outHandle; - + @Override public void create() { this.create(null); } - + @Override public void create(Runnable onInitialized) { Utils.outputLevel = -1; AnsiConsole.systemInstall(); - if(Utils.isWindows() && !Utils.msDosMode){ + if (Utils.isWindows() && !Utils.msDosMode) { win = true; WindowsSupport.setConsoleMode(0x0200); - Thread t = new Thread(()-> { + Thread t = new Thread(() -> { int ch = -1; - while(true) { - if (precKey != null) { - Keyboard.keyReleased(precKey); - precKey = null; + while (true) { + if (precKey != null) { + Keyboard.keyReleased(precKey); + precKey = null; + } + ch = WindowsSupport.readByte(); + Key key = null; + switch (ch) { + case 72: { // UP + key = Key.UP; + break; } - ch = WindowsSupport.readByte(); - Key key = null; - switch(ch) { - case 72: { // UP - key = Key.UP; - break; - } - case 80: { // DOWN - key = Key.DOWN; - break; - } - case 77: { // RIGHT - key = Key.RIGHT; - break; - } - case 75: { // LEFT - key = Key.LEFT; - break; - } - case 49: { // 1 - key = Key.NUM1; - break; - } - case 50: { // 2 - key = Key.NUM2; - break; - } - case 51: { // 3 - key = Key.NUM3; - break; - } - case 52: { // 4 - key = Key.NUM4; - break; - } - case 53: { // 5 - key = Key.NUM5; - break; - } - case 54: { // 6 - key = Key.NUM6; - break; - } - default: { - key = Key.NONE; - break; - } + case 80: { // DOWN + key = Key.DOWN; + break; } - if (key != null) { - Keyboard.keyPressed(key); + case 77: { // RIGHT + key = Key.RIGHT; + break; } + case 75: { // LEFT + key = Key.LEFT; + break; + } + case 49: { // 1 + key = Key.NUM1; + break; + } + case 50: { // 2 + key = Key.NUM2; + break; + } + case 51: { // 3 + key = Key.NUM3; + break; + } + case 52: { // 4 + key = Key.NUM4; + break; + } + case 53: { // 5 + key = Key.NUM5; + break; + } + case 54: { // 6 + key = Key.NUM6; + break; + } + default: { + key = Key.NONE; + break; + } + } + if (key != null) { + Keyboard.keyPressed(key); + } } }); @@ -197,68 +188,68 @@ public class Headless24bitEngine implements org.warp.picalculator.gui.graphiceng @Override public void repaint() { renderLoop.refresh(); - r.curColor = new int[] {0x00, 0x87, 0x00}; - r.glDrawStringCenter((C_WIDTH*C_MUL_X)/2, 0, title); + r.curColor = new int[] { 0x00, 0x87, 0x00 }; + r.glDrawStringCenter((C_WIDTH * C_MUL_X) / 2, 0, title); if (win) { - WindowsSupport.writeConsole(Headless24bitRenderer.ANSI_PREFIX+"0;0f"); - WindowsSupport.writeConsole(Headless24bitRenderer.ANSI_PREFIX+"?12l"); - WindowsSupport.writeConsole(Headless24bitRenderer.ANSI_PREFIX+"?25l"); + WindowsSupport.writeConsole(Headless24bitRenderer.ANSI_PREFIX + "0;0f"); + WindowsSupport.writeConsole(Headless24bitRenderer.ANSI_PREFIX + "?12l"); + WindowsSupport.writeConsole(Headless24bitRenderer.ANSI_PREFIX + "?25l"); } else { - AnsiConsole.out.print(Headless24bitRenderer.ANSI_PREFIX+"0;0f"); - AnsiConsole.out.print(Headless24bitRenderer.ANSI_PREFIX+"?12l"); - AnsiConsole.out.print(Headless24bitRenderer.ANSI_PREFIX+"?25l"); + AnsiConsole.out.print(Headless24bitRenderer.ANSI_PREFIX + "0;0f"); + AnsiConsole.out.print(Headless24bitRenderer.ANSI_PREFIX + "?12l"); + AnsiConsole.out.print(Headless24bitRenderer.ANSI_PREFIX + "?25l"); } - int[] precBgColor = new int[] {-1, -1, -1}; - int[] precFgColor = new int[] {-1, -1, -1}; - int[] curBgColor = new int[] {-1, -1, -1}; - int[] curFgColor = new int[] {-1, -1, -1}; + int[] precBgColor = new int[] { -1, -1, -1 }; + int[] precFgColor = new int[] { -1, -1, -1 }; + int[] curBgColor = new int[] { -1, -1, -1 }; + int[] curFgColor = new int[] { -1, -1, -1 }; String out = ""; char outchar = ' '; for (int y = 0; y < C_HEIGHT; y++) { for (int x = 0; x < C_WIDTH; x++) { //BG color - int[][] pixs = new int[C_MUL_X*C_MUL_Y][]; + int[][] pixs = new int[C_MUL_X * C_MUL_Y][]; for (int paddY = 0; paddY < C_MUL_Y; paddY++) { for (int paddX = 0; paddX < C_MUL_X; paddX++) { - pixs[paddX+paddY*C_MUL_X] = r.bgColorMatrixSs[(x*C_MUL_X+paddX)+(y*C_MUL_Y+paddY)*r.size[0]]; + pixs[paddX + paddY * C_MUL_X] = r.bgColorMatrixSs[(x * C_MUL_X + paddX) + (y * C_MUL_Y + paddY) * r.size[0]]; } } int[] newpix = new int[3]; for (int i = 0; i < pixs.length; i++) { - newpix[0]+=pixs[i][0]; - newpix[1]+=pixs[i][1]; - newpix[2]+=pixs[i][2]; + newpix[0] += pixs[i][0]; + newpix[1] += pixs[i][1]; + newpix[2] += pixs[i][2]; } - newpix[0]/=pixs.length; - newpix[1]/=pixs.length; - newpix[2]/=pixs.length; - r.bgColorMatrix[x+y*C_WIDTH] = newpix; - + newpix[0] /= pixs.length; + newpix[1] /= pixs.length; + newpix[2] /= pixs.length; + r.bgColorMatrix[x + y * C_WIDTH] = newpix; + //FG color - pixs = new int[C_MUL_X*C_MUL_Y][]; + pixs = new int[C_MUL_X * C_MUL_Y][]; for (int paddY = 0; paddY < C_MUL_Y; paddY++) { for (int paddX = 0; paddX < C_MUL_X; paddX++) { - pixs[paddX+paddY*C_MUL_X] = r.fgColorMatrixSs[(x*C_MUL_X+paddX)+(y*C_MUL_Y+paddY)*r.size[0]]; + pixs[paddX + paddY * C_MUL_X] = r.fgColorMatrixSs[(x * C_MUL_X + paddX) + (y * C_MUL_Y + paddY) * r.size[0]]; } } newpix = new int[3]; for (int i = 0; i < pixs.length; i++) { - newpix[0]+=pixs[i][0]; - newpix[1]+=pixs[i][1]; - newpix[2]+=pixs[i][2]; + newpix[0] += pixs[i][0]; + newpix[1] += pixs[i][1]; + newpix[2] += pixs[i][2]; } - newpix[0]/=pixs.length; - newpix[1]/=pixs.length; - newpix[2]/=pixs.length; - r.fgColorMatrix[x+y*C_WIDTH] = newpix; + newpix[0] /= pixs.length; + newpix[1] /= pixs.length; + newpix[2] /= pixs.length; + r.fgColorMatrix[x + y * C_WIDTH] = newpix; } } for (int y = 0; y < C_HEIGHT; y++) { for (int x = 0; x < C_WIDTH; x++) { - curBgColor = r.bgColorMatrix[x+y*C_WIDTH]; - curFgColor = r.fgColorMatrix[x+y*C_WIDTH]; + curBgColor = r.bgColorMatrix[x + y * C_WIDTH]; + curFgColor = r.fgColorMatrix[x + y * C_WIDTH]; if (precBgColor != curBgColor) { - out = Headless24bitRenderer.ANSI_PREFIX+Headless24bitRenderer.ansiBgColorPrefix+curBgColor[0]+";"+curBgColor[1]+";"+curBgColor[2]+Headless24bitRenderer.ansiColorSuffix; + out = Headless24bitRenderer.ANSI_PREFIX + Headless24bitRenderer.ansiBgColorPrefix + curBgColor[0] + ";" + curBgColor[1] + ";" + curBgColor[2] + Headless24bitRenderer.ansiColorSuffix; if (win) { WindowsSupport.writeConsole(out); } else { @@ -266,25 +257,25 @@ public class Headless24bitEngine implements org.warp.picalculator.gui.graphiceng } } if (precFgColor != curFgColor) { - out = Headless24bitRenderer.ANSI_PREFIX+Headless24bitRenderer.ansiFgColorPrefix+curFgColor[0]+";"+curFgColor[1]+";"+curFgColor[2]+Headless24bitRenderer.ansiColorSuffix; + out = Headless24bitRenderer.ANSI_PREFIX + Headless24bitRenderer.ansiFgColorPrefix + curFgColor[0] + ";" + curFgColor[1] + ";" + curFgColor[2] + Headless24bitRenderer.ansiColorSuffix; if (win) { WindowsSupport.writeConsole(out); } else { AnsiConsole.out.print(out); } } - - outchar = r.charmatrix[x+y*C_WIDTH]; + + outchar = r.charmatrix[x + y * C_WIDTH]; if (win) { - WindowsSupport.writeConsole(outchar+""); + WindowsSupport.writeConsole(outchar + ""); } else { AnsiConsole.out.print(outchar); } - + precBgColor = curBgColor; precFgColor = curFgColor; } - + if (win) { //System.out.println(ch); WindowsSupport.writeConsole("\r\n"); @@ -310,11 +301,11 @@ public class Headless24bitEngine implements org.warp.picalculator.gui.graphiceng } @Override - public void waitUntilExit() { + public void waitForExit() { try { do { Thread.sleep(500); - } while (stopped==false); + } while (stopped == false); } catch (final InterruptedException e) { } @@ -322,7 +313,8 @@ public class Headless24bitEngine implements org.warp.picalculator.gui.graphiceng @Override public boolean isSupported() { - if (Utils.msDosMode || (Utils.forceEngine != null && Utils.forceEngine != "console-24bit")) return false; + if (Utils.msDosMode || (Utils.forceEngine != null && Utils.forceEngine != "console-24bit")) + return false; return true; } diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/headless24bit/Headless24bitFont.java b/src/main/java/org/warp/picalculator/gui/graphicengine/headless24bit/Headless24bitFont.java index f8f97dc5..856cae0e 100644 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/headless24bit/Headless24bitFont.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/headless24bit/Headless24bitFont.java @@ -9,24 +9,24 @@ public class Headless24bitFont implements BinaryFont { @Override public void load(String file) throws IOException { - + } @Override public void initialize(GraphicEngine d) { // TODO Auto-generated method stub - + } @Override public void use(GraphicEngine d) { // TODO Auto-generated method stub - + } @Override public int getStringWidth(String text) { - return 5*text.length(); + return 5 * text.length(); } @Override diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/headless24bit/Headless24bitRenderer.java b/src/main/java/org/warp/picalculator/gui/graphicengine/headless24bit/Headless24bitRenderer.java index 5c5229f3..83cdcf76 100644 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/headless24bit/Headless24bitRenderer.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/headless24bit/Headless24bitRenderer.java @@ -5,32 +5,30 @@ import org.warp.picalculator.gui.graphicengine.Renderer; public class Headless24bitRenderer implements Renderer { Headless24bitFont currentFont; - public int[] size = new int[] { Headless24bitEngine.C_WIDTH*Headless24bitEngine.C_MUL_X, Headless24bitEngine.C_HEIGHT*Headless24bitEngine.C_MUL_Y }; - protected int[][] fgColorMatrixSs = new int[size[0]*size[1]][3]; - protected int[][] bgColorMatrixSs = new int[size[0]*size[1]][3]; - - - protected char[] charmatrix = new char[Headless24bitEngine.C_WIDTH*Headless24bitEngine.C_HEIGHT]; - protected int[][] fgColorMatrix = new int[Headless24bitEngine.C_WIDTH*Headless24bitEngine.C_HEIGHT][3]; - protected int[][] bgColorMatrix = new int[Headless24bitEngine.C_WIDTH*Headless24bitEngine.C_HEIGHT][3]; + public int[] size = new int[] { Headless24bitEngine.C_WIDTH * Headless24bitEngine.C_MUL_X, Headless24bitEngine.C_HEIGHT * Headless24bitEngine.C_MUL_Y }; + protected int[][] fgColorMatrixSs = new int[size[0] * size[1]][3]; + protected int[][] bgColorMatrixSs = new int[size[0] * size[1]][3]; + + protected char[] charmatrix = new char[Headless24bitEngine.C_WIDTH * Headless24bitEngine.C_HEIGHT]; + protected int[][] fgColorMatrix = new int[Headless24bitEngine.C_WIDTH * Headless24bitEngine.C_HEIGHT][3]; + protected int[][] bgColorMatrix = new int[Headless24bitEngine.C_WIDTH * Headless24bitEngine.C_HEIGHT][3]; protected int[] clearColor = rgbToIntArray(0xc5, 0xc2, 0xaf); - protected int[] curColor = new int[] {clearColor[0], clearColor[1], clearColor[2]}; + protected int[] curColor = new int[] { clearColor[0], clearColor[1], clearColor[2] }; public Headless24bitSkin currentSkin; public static final String ANSI_PREFIX = "\u001B["; public static final String ansiFgColorPrefix = "38;2;"; public static final String ansiBgColorPrefix = "48;2;"; public static final String ansiColorSuffix = "m"; - + public static final String ANSI_RESET = "\u001B[0m"; public static final char FILL = 0xDB; - public static final int[] TRANSPARENT = new int[] {0,0,0, 1}; + public static final int[] TRANSPARENT = new int[] { 0, 0, 0, 1 }; - public static int[] rgbToIntArray(int r_U, int g_U, int b_U) { - return new int[] {r_U, g_U, b_U}; + return new int[] { r_U, g_U, b_U }; } - + @Override public void glColor3i(int r, int gg, int b) { curColor = rgbToIntArray(r, gg, b); @@ -48,12 +46,12 @@ public class Headless24bitRenderer implements Renderer { @Override public void glColor3f(float red, float green, float blue) { - curColor = rgbToIntArray((int)(red*255), (int)(green*255), (int)(blue*255)); + curColor = rgbToIntArray((int) (red * 255), (int) (green * 255), (int) (blue * 255)); } @Override public void glColor4f(float red, float green, float blue, float alpha) { - curColor = rgbToIntArray((int)(red*255), (int)(green*255), (int)(blue*255)); + curColor = rgbToIntArray((int) (red * 255), (int) (green * 255), (int) (blue * 255)); } @Override @@ -63,7 +61,7 @@ public class Headless24bitRenderer implements Renderer { @Override public void glClearColor4f(float red, float green, float blue, float alpha) { - clearColor = rgbToIntArray((int)(red*255), (int)(green*255), (int)(blue*255)); + clearColor = rgbToIntArray((int) (red * 255), (int) (green * 255), (int) (blue * 255)); } @Override @@ -83,7 +81,7 @@ public class Headless24bitRenderer implements Renderer { @Override public void glDrawLine(float x1, float y1, float x2, float y2) { - + int dx = (int) Math.abs(x2 - x1); int dy = (int) Math.abs(y2 - y1); @@ -93,33 +91,33 @@ public class Headless24bitRenderer implements Renderer { int err = dx - dy; while (true) { - if (((int)x1) >= size[0] || ((int)y1) >= size[1] || - ((int)x2) >= size[0] || ((int)y2) >= size[1]) { + if (((int) x1) >= size[0] || ((int) y1) >= size[1] || ((int) x2) >= size[0] || ((int) y2) >= size[1]) { break; } - bgColorMatrixSs[((int)x1) + ((int)y1) * size[0]] = curColor; - charmatrix[((int)x1/Headless24bitEngine.C_MUL_X) + ((int)y1/Headless24bitEngine.C_MUL_Y) * Headless24bitEngine.C_WIDTH] = ' '; + bgColorMatrixSs[((int) x1) + ((int) y1) * size[0]] = curColor; + charmatrix[((int) x1 / Headless24bitEngine.C_MUL_X) + ((int) y1 / Headless24bitEngine.C_MUL_Y) * Headless24bitEngine.C_WIDTH] = ' '; - if (x1 == x2 && y1 == y2) { - break; - } + if (x1 == x2 && y1 == y2) { + break; + } - int e2 = 2 * err; + int e2 = 2 * err; - if (e2 > -dy) { - err = err - dy; - x1 = x1 + sx; - } + if (e2 > -dy) { + err = err - dy; + x1 = x1 + sx; + } - if (e2 < dx) { - err = err + dx; - y1 = y1 + sy; - } + if (e2 < dx) { + err = err + dx; + y1 = y1 + sy; + } } } @Override - public void glFillRect(float x, float y, float width, float height, float uvX, float uvY, float uvWidth, float uvHeight) { + 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) (uvX), (int) (uvY), (int) ((uvWidth + uvX)), (int) ((uvHeight + uvY)), true); } else { @@ -150,11 +148,10 @@ public class Headless24bitRenderer implements Renderer { for (int py = iy; py < y1; py++) { drawPixelAt(' ', curColor, px, py); bgColorMatrixSs[(px) + (py) * sizeW] = curColor; - charmatrix[(px/Headless24bitEngine.C_MUL_X) + (py/Headless24bitEngine.C_MUL_Y) * sizeW/Headless24bitEngine.C_MUL_X] = ' '; + charmatrix[(px / Headless24bitEngine.C_MUL_X) + (py / Headless24bitEngine.C_MUL_Y) * sizeW / Headless24bitEngine.C_MUL_X] = ' '; } } } - @Override public void glDrawCharLeft(int x, int y, char ch) { @@ -163,52 +160,52 @@ public class Headless24bitRenderer implements Renderer { if (cx >= size[0] || cy >= size[1]) { return; } - charmatrix[cx/Headless24bitEngine.C_MUL_X+cy/Headless24bitEngine.C_MUL_Y*Headless24bitEngine.C_WIDTH] = ch; - fgColorMatrixSs[cx+cy*size[0]] = curColor; + charmatrix[cx / Headless24bitEngine.C_MUL_X + cy / Headless24bitEngine.C_MUL_Y * Headless24bitEngine.C_WIDTH] = ch; + fgColorMatrixSs[cx + cy * size[0]] = curColor; } @Override public void glDrawCharCenter(int x, int y, char ch) { - glDrawCharLeft(x,y,ch); + glDrawCharLeft(x, y, ch); } @Override public void glDrawCharRight(int x, int y, char ch) { - final int cx = x-1*Headless24bitEngine.C_MUL_X; + final int cx = x - 1 * Headless24bitEngine.C_MUL_X; final int cy = y; if (cx >= size[0] || cy >= size[1]) { return; } - charmatrix[cx/Headless24bitEngine.C_MUL_X+cy/Headless24bitEngine.C_MUL_Y*Headless24bitEngine.C_WIDTH] = ch; - fgColorMatrixSs[cx+cy*size[0]] = curColor; + charmatrix[cx / Headless24bitEngine.C_MUL_X + cy / Headless24bitEngine.C_MUL_Y * Headless24bitEngine.C_WIDTH] = ch; + fgColorMatrixSs[cx + cy * size[0]] = curColor; } @Override public void glDrawStringLeft(float x, float y, String text) { - final int cx = (int)x; - final int cy = (int)y; + final int cx = (int) x; + final int cy = (int) y; int i = 0; for (char c : text.toCharArray()) { - if (cx+i >= size[0] || cy >= size[1]) { + if (cx + i >= size[0] || cy >= size[1]) { break; } - charmatrix[cx/Headless24bitEngine.C_MUL_X+i+cy/Headless24bitEngine.C_MUL_Y*Headless24bitEngine.C_WIDTH] = c; - fgColorMatrixSs[cx+i+cy*size[0]] = curColor; + charmatrix[cx / Headless24bitEngine.C_MUL_X + i + cy / Headless24bitEngine.C_MUL_Y * Headless24bitEngine.C_WIDTH] = c; + fgColorMatrixSs[cx + i + cy * size[0]] = curColor; i++; } } @Override public void glDrawStringCenter(float x, float y, String text) { - final int cx = ((int)x)-(text.length()/2)*Headless24bitEngine.C_MUL_X; - final int cy = ((int)y); + final int cx = ((int) x) - (text.length() / 2) * Headless24bitEngine.C_MUL_X; + final int cy = ((int) y); int i = 0; for (char c : text.toCharArray()) { - if (cx+i >= size[0] || cy >= size[1]) { + if (cx + i >= size[0] || cy >= size[1]) { break; } - charmatrix[cx/Headless24bitEngine.C_MUL_X+i+cy/Headless24bitEngine.C_MUL_Y*Headless24bitEngine.C_WIDTH] = c; - fgColorMatrixSs[cx+i+cy*size[0]] = curColor; + charmatrix[cx / Headless24bitEngine.C_MUL_X + i + cy / Headless24bitEngine.C_MUL_Y * Headless24bitEngine.C_WIDTH] = c; + fgColorMatrixSs[cx + i + cy * size[0]] = curColor; i++; } } @@ -216,9 +213,8 @@ public class Headless24bitRenderer implements Renderer { @Override public void glDrawStringRight(float x, float y, String text) { // TODO Auto-generated method stub - + } - private void glDrawSkin(int x0, int y0, int s0, int t0, int s1, int t1, boolean transparent) { int[] newColor; @@ -276,7 +272,7 @@ public class Headless24bitRenderer implements Renderer { newColor = currentSkin.skinData[(s0 + texx) + (t0 + texy) * currentSkin.skinSize[0]]; if (transparent) { if (newColor.length == 3 || (newColor.length == 4 && newColor[3] != 1)) { - charmatrix[pixelX/Headless24bitEngine.C_MUL_X + pixelY/Headless24bitEngine.C_MUL_Y * Headless24bitEngine.C_WIDTH] = ' '; + charmatrix[pixelX / Headless24bitEngine.C_MUL_X + pixelY / Headless24bitEngine.C_MUL_Y * Headless24bitEngine.C_WIDTH] = ' '; bgColorMatrixSs[pixelX + pixelY * size[0]] = newColor; } } @@ -285,23 +281,23 @@ public class Headless24bitRenderer implements Renderer { } } } - + private void drawPixelAt(char ch, int[] color, double x, double y) { - + } @Override public void glClearSkin() { currentSkin = null; } - + protected void clearAll() { - for (int i = 0; i < Headless24bitEngine.C_WIDTH*Headless24bitEngine.C_HEIGHT; i++) { - charmatrix[i]=' '; + for (int i = 0; i < Headless24bitEngine.C_WIDTH * Headless24bitEngine.C_HEIGHT; i++) { + charmatrix[i] = ' '; } - for (int i = 0; i < size[0]*size[1]; i++) { + for (int i = 0; i < size[0] * size[1]; i++) { bgColorMatrixSs[i] = clearColor; - fgColorMatrixSs[i] = new int[] {0,0,0}; + fgColorMatrixSs[i] = new int[] { 0, 0, 0 }; } } @@ -309,5 +305,5 @@ public class Headless24bitRenderer implements Renderer { public Headless24bitFont getCurrentFont() { return currentFont; } - + } diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/headless24bit/Headless24bitSkin.java b/src/main/java/org/warp/picalculator/gui/graphicengine/headless24bit/Headless24bitSkin.java index 60aace43..33b1aa9a 100644 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/headless24bit/Headless24bitSkin.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/headless24bit/Headless24bitSkin.java @@ -1,7 +1,5 @@ package org.warp.picalculator.gui.graphicengine.headless24bit; -import java.awt.geom.AffineTransform; -import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; import java.io.IOException; @@ -27,20 +25,19 @@ public class Headless24bitSkin implements Skin { } public static int[][] getMatrixOfImage(BufferedImage bufferedImage) { - - + final int width = bufferedImage.getWidth(null); final int height = bufferedImage.getHeight(null); final int[][] pixels = new int[width * height][]; for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) { int rgb = bufferedImage.getRGB(i, j); - int r = (rgb >> 16) &0xFF; - int g = (rgb >> 8) &0xFF; - int b = rgb &0xFF; + int r = (rgb >> 16) & 0xFF; + int g = (rgb >> 8) & 0xFF; + int b = rgb & 0xFF; boolean transparent = ((rgb >> 24) & 0xFF) <= 128; int[] curCol = Headless24bitRenderer.rgbToIntArray(r, g, b); - pixels[i + j * width] = new int[] {curCol[0], curCol[1], curCol[2], transparent?1:0}; + pixels[i + j * width] = new int[] { curCol[0], curCol[1], curCol[2], transparent ? 1 : 0 }; } } @@ -49,7 +46,7 @@ public class Headless24bitSkin implements Skin { @Override public void initialize(GraphicEngine d) { - + } @Override @@ -62,5 +59,4 @@ public class Headless24bitSkin implements Skin { return true; } - } diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/headless256/Headless256Engine.java b/src/main/java/org/warp/picalculator/gui/graphicengine/headless256/Headless256Engine.java index 0e2a5fc7..fa5ebffa 100755 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/headless256/Headless256Engine.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/headless256/Headless256Engine.java @@ -1,7 +1,6 @@ package org.warp.picalculator.gui.graphicengine.headless256; import java.io.IOException; -import java.util.ArrayList; import java.util.logging.ConsoleHandler; import org.fusesource.jansi.AnsiConsole; @@ -10,7 +9,6 @@ import org.warp.picalculator.Main; import org.warp.picalculator.Utils; import org.warp.picalculator.device.Keyboard; import org.warp.picalculator.device.Keyboard.Key; -import org.warp.picalculator.gui.graphicengine.BinaryFont; import org.warp.picalculator.gui.graphicengine.Renderer; import org.warp.picalculator.gui.graphicengine.RenderingLoop; import org.warp.picalculator.gui.graphicengine.headless24bit.Headless24bitRenderer; @@ -22,16 +20,16 @@ public class Headless256Engine implements org.warp.picalculator.gui.graphicengin private RenderingLoop renderLoop; public static final int C_MUL_X = 4;//8; public static final int C_MUL_Y = 8;//8; - protected static final int C_WIDTH = Main.screenSize[0]/C_MUL_X;//Main.screenSize[0]/2;//;60; - protected static final int C_HEIGHT = Main.screenSize[1]/C_MUL_Y;//Main.screenSize[1]/3;//;40; + protected static final int C_WIDTH = Main.screenSize[0] / C_MUL_X;//Main.screenSize[0]/2;//;60; + protected static final int C_HEIGHT = Main.screenSize[1] / C_MUL_Y;//Main.screenSize[1]/3;//;40; private String title = Main.calculatorName; private boolean win = false; private Key precKey = null; - + @Override public int[] getSize() { new ConsoleHandler(); - return new int[]{C_WIDTH, C_HEIGHT}; + return new int[] { C_WIDTH, C_HEIGHT }; } @Override @@ -47,85 +45,85 @@ public class Headless256Engine implements org.warp.picalculator.gui.graphicengin @Override public void setResizable(boolean r) { // TODO Auto-generated method stub - + } @Override public void setDisplayMode(int ww, int wh) { // TODO Auto-generated method stub - + } @Override public void create() { this.create(null); } - + @Override public void create(Runnable onInitialized) { Utils.outputLevel = -1; AnsiConsole.systemInstall(); - if(Utils.isWindows() && !Utils.msDosMode){ + if (Utils.isWindows() && !Utils.msDosMode) { win = true; WindowsSupport.setConsoleMode(0x0200); - Thread t = new Thread(()-> { + Thread t = new Thread(() -> { int ch = -1; - while(true) { - if (precKey != null) { - Keyboard.keyReleased(precKey); - precKey = null; + while (true) { + if (precKey != null) { + Keyboard.keyReleased(precKey); + precKey = null; + } + ch = WindowsSupport.readByte(); + Key key = null; + switch (ch) { + case 72: { // UP + key = Key.UP; + break; } - ch = WindowsSupport.readByte(); - Key key = null; - switch(ch) { - case 72: { // UP - key = Key.UP; - break; - } - case 80: { // DOWN - key = Key.DOWN; - break; - } - case 77: { // RIGHT - key = Key.RIGHT; - break; - } - case 75: { // LEFT - key = Key.LEFT; - break; - } - case 49: { // 1 - key = Key.NUM1; - break; - } - case 50: { // 2 - key = Key.NUM2; - break; - } - case 51: { // 3 - key = Key.NUM3; - break; - } - case 52: { // 4 - key = Key.NUM4; - break; - } - case 53: { // 5 - key = Key.NUM5; - break; - } - case 54: { // 6 - key = Key.NUM6; - break; - } - default: { - key = Key.NONE; - break; - } + case 80: { // DOWN + key = Key.DOWN; + break; } - if (key != null) { - Keyboard.keyPressed(key); + case 77: { // RIGHT + key = Key.RIGHT; + break; } + case 75: { // LEFT + key = Key.LEFT; + break; + } + case 49: { // 1 + key = Key.NUM1; + break; + } + case 50: { // 2 + key = Key.NUM2; + break; + } + case 51: { // 3 + key = Key.NUM3; + break; + } + case 52: { // 4 + key = Key.NUM4; + break; + } + case 53: { // 5 + key = Key.NUM5; + break; + } + case 54: { // 6 + key = Key.NUM6; + break; + } + default: { + key = Key.NONE; + break; + } + } + if (key != null) { + Keyboard.keyPressed(key); + } } }); @@ -144,12 +142,12 @@ public class Headless256Engine implements org.warp.picalculator.gui.graphicengin @Override public int getWidth() { - return C_WIDTH*C_MUL_X; + return C_WIDTH * C_MUL_X; } @Override public int getHeight() { - return C_HEIGHT*C_MUL_Y; + return C_HEIGHT * C_MUL_Y; } @Override @@ -190,15 +188,15 @@ public class Headless256Engine implements org.warp.picalculator.gui.graphicengin public void repaint() { renderLoop.refresh(); r.curColor = 0x1C; - r.glDrawStringCenter((C_WIDTH*C_MUL_X)/2, 0, title); + r.glDrawStringCenter((C_WIDTH * C_MUL_X) / 2, 0, title); if (win) { - WindowsSupport.writeConsole(Headless24bitRenderer.ANSI_PREFIX+"0;0f"); - WindowsSupport.writeConsole(Headless24bitRenderer.ANSI_PREFIX+"?12l"); - WindowsSupport.writeConsole(Headless24bitRenderer.ANSI_PREFIX+"?25l"); + WindowsSupport.writeConsole(Headless24bitRenderer.ANSI_PREFIX + "0;0f"); + WindowsSupport.writeConsole(Headless24bitRenderer.ANSI_PREFIX + "?12l"); + WindowsSupport.writeConsole(Headless24bitRenderer.ANSI_PREFIX + "?25l"); } else { - AnsiConsole.out.print(Headless24bitRenderer.ANSI_PREFIX+"0;0f"); - AnsiConsole.out.print(Headless24bitRenderer.ANSI_PREFIX+"?12l"); - AnsiConsole.out.print(Headless24bitRenderer.ANSI_PREFIX+"?25l"); + AnsiConsole.out.print(Headless24bitRenderer.ANSI_PREFIX + "0;0f"); + AnsiConsole.out.print(Headless24bitRenderer.ANSI_PREFIX + "?12l"); + AnsiConsole.out.print(Headless24bitRenderer.ANSI_PREFIX + "?25l"); } for (int y = 0; y < C_HEIGHT; y++) { int precBgColor = -1; @@ -206,10 +204,10 @@ public class Headless256Engine implements org.warp.picalculator.gui.graphicengin int curBgColor = -1; int curFgColor = -1; for (int x = 0; x < C_WIDTH; x++) { - curBgColor = r.bgColorMatrix[x+y*C_WIDTH]; - curFgColor = r.fgColorMatrix[x+y*C_WIDTH]; + curBgColor = r.bgColorMatrix[x + y * C_WIDTH]; + curFgColor = r.fgColorMatrix[x + y * C_WIDTH]; if (precBgColor != curBgColor) { - String str = Headless256Renderer.ANSI_PREFIX+Headless256Renderer.ansiBgColorPrefix+curBgColor+Headless256Renderer.ansiColorSuffix; + String str = Headless256Renderer.ANSI_PREFIX + Headless256Renderer.ansiBgColorPrefix + curBgColor + Headless256Renderer.ansiColorSuffix; if (win) { WindowsSupport.writeConsole(str); } else { @@ -217,7 +215,7 @@ public class Headless256Engine implements org.warp.picalculator.gui.graphicengin } } if (precFgColor != curFgColor) { - String str = Headless256Renderer.ANSI_PREFIX+Headless256Renderer.ansiFgColorPrefix+curFgColor+Headless256Renderer.ansiColorSuffix; + String str = Headless256Renderer.ANSI_PREFIX + Headless256Renderer.ansiFgColorPrefix + curFgColor + Headless256Renderer.ansiColorSuffix; if (win) { WindowsSupport.writeConsole(str); } else { @@ -225,17 +223,17 @@ public class Headless256Engine implements org.warp.picalculator.gui.graphicengin } } - String stri = r.charmatrix[x+y*C_WIDTH]+""; + String stri = r.charmatrix[x + y * C_WIDTH] + ""; if (win) { WindowsSupport.writeConsole(stri); } else { AnsiConsole.out.print(stri); } - + precBgColor = curBgColor; precFgColor = curFgColor; } - + if (win) { WindowsSupport.writeConsole("\r\n"); } else { @@ -260,11 +258,11 @@ public class Headless256Engine implements org.warp.picalculator.gui.graphicengin } @Override - public void waitUntilExit() { + public void waitForExit() { try { do { Thread.sleep(500); - } while (stopped==false); + } while (stopped == false); } catch (final InterruptedException e) { } @@ -272,7 +270,8 @@ public class Headless256Engine implements org.warp.picalculator.gui.graphicengin @Override public boolean isSupported() { - if (Utils.msDosMode || (Utils.forceEngine != null && Utils.forceEngine != "console-256")) return false; + if (Utils.msDosMode || (Utils.forceEngine != null && Utils.forceEngine != "console-256")) + return false; return true; } diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/headless256/Headless256Font.java b/src/main/java/org/warp/picalculator/gui/graphicengine/headless256/Headless256Font.java index 3cc37393..74f93ba7 100644 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/headless256/Headless256Font.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/headless256/Headless256Font.java @@ -9,24 +9,24 @@ public class Headless256Font implements BinaryFont { @Override public void load(String file) throws IOException { - + } @Override public void initialize(GraphicEngine d) { // TODO Auto-generated method stub - + } @Override public void use(GraphicEngine d) { // TODO Auto-generated method stub - + } @Override public int getStringWidth(String text) { - return 5*text.length(); + return 5 * text.length(); } @Override diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/headless256/Headless256Renderer.java b/src/main/java/org/warp/picalculator/gui/graphicengine/headless256/Headless256Renderer.java index e2fde521..fc065907 100755 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/headless256/Headless256Renderer.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/headless256/Headless256Renderer.java @@ -5,9 +5,9 @@ import org.warp.picalculator.gui.graphicengine.Renderer; public class Headless256Renderer implements Renderer { Headless256Font currentFont; - protected char[] charmatrix = new char[Headless256Engine.C_WIDTH*Headless256Engine.C_HEIGHT]; - protected int[] fgColorMatrix = new int[Headless256Engine.C_WIDTH*Headless256Engine.C_HEIGHT]; - protected int[] bgColorMatrix = new int[Headless256Engine.C_WIDTH*Headless256Engine.C_HEIGHT]; + protected char[] charmatrix = new char[Headless256Engine.C_WIDTH * Headless256Engine.C_HEIGHT]; + protected int[] fgColorMatrix = new int[Headless256Engine.C_WIDTH * Headless256Engine.C_HEIGHT]; + protected int[] bgColorMatrix = new int[Headless256Engine.C_WIDTH * Headless256Engine.C_HEIGHT]; protected int clearColor = rgbToX256(0xc5, 0xc2, 0xaf); protected int curColor = clearColor; public Headless256Skin currentSkin; @@ -16,12 +16,11 @@ public class Headless256Renderer implements Renderer { public static final String ansiFgColorPrefix = "38;5;"; public static final String ansiBgColorPrefix = "48;5;"; public static final String ansiColorSuffix = "m"; - + public static final String ANSI_RESET = "\u001B[0m"; public static final char FILL = 0xDB; public static final int TRANSPARENT = 0xF0000; - public static int v2ci(int v_U) { return v_U < 48 ? 0 : v_U < 115 ? 1 : (v_U - 35) / 40; } @@ -37,7 +36,7 @@ public class Headless256Renderer implements Renderer { /** * Calculate the represented colors back from the index */ - public static int[] i2cv = {0, 0x5f, 0x87, 0xaf, 0xd7, 0xff}; + public static int[] i2cv = { 0, 0x5f, 0x87, 0xaf, 0xd7, 0xff }; public static int rgbToX256(int r_U, int g_U, int b_U) { // Calculate the nearest 0-based color index at 16 .. 231 @@ -58,7 +57,7 @@ public class Headless256Renderer implements Renderer { int grayErr = distSquare(gv, gv, gv, r_U, g_U, b_U); return colorErr <= grayErr ? 16 + colorIndex(ir, ig, ib) : 232 + grayIndex; } - + @Override public void glColor3i(int r, int gg, int b) { curColor = rgbToX256(r, gg, b); @@ -76,12 +75,12 @@ public class Headless256Renderer implements Renderer { @Override public void glColor3f(float red, float green, float blue) { - curColor = rgbToX256((int)(red*255), (int)(green*255), (int)(blue*255)); + curColor = rgbToX256((int) (red * 255), (int) (green * 255), (int) (blue * 255)); } @Override public void glColor4f(float red, float green, float blue, float alpha) { - curColor = rgbToX256((int)(red*255), (int)(green*255), (int)(blue*255)); + curColor = rgbToX256((int) (red * 255), (int) (green * 255), (int) (blue * 255)); } @Override @@ -91,7 +90,7 @@ public class Headless256Renderer implements Renderer { @Override public void glClearColor4f(float red, float green, float blue, float alpha) { - clearColor = rgbToX256((int)(red*255), (int)(green*255), (int)(blue*255)); + clearColor = rgbToX256((int) (red * 255), (int) (green * 255), (int) (blue * 255)); } @Override @@ -111,11 +110,11 @@ public class Headless256Renderer implements Renderer { @Override public void glDrawLine(float x1, float y1, float x2, float y2) { - x1/=Headless256Engine.C_MUL_X; - x2/=Headless256Engine.C_MUL_X; - y1/=Headless256Engine.C_MUL_Y; - y2/=Headless256Engine.C_MUL_Y; - + x1 /= Headless256Engine.C_MUL_X; + x2 /= Headless256Engine.C_MUL_X; + y1 /= Headless256Engine.C_MUL_Y; + y2 /= Headless256Engine.C_MUL_Y; + int dx = (int) Math.abs(x2 - x1); int dy = (int) Math.abs(y2 - y1); @@ -125,35 +124,35 @@ public class Headless256Renderer implements Renderer { int err = dx - dy; while (true) { - if (((int)x1) >= Headless256Engine.C_WIDTH || ((int)y1) >= Headless256Engine.C_HEIGHT || - ((int)x2) >= Headless256Engine.C_WIDTH || ((int)y2) >= Headless256Engine.C_HEIGHT) { + if (((int) x1) >= Headless256Engine.C_WIDTH || ((int) y1) >= Headless256Engine.C_HEIGHT || ((int) x2) >= Headless256Engine.C_WIDTH || ((int) y2) >= Headless256Engine.C_HEIGHT) { break; } - bgColorMatrix[((int)x1) + ((int)y1) * Headless256Engine.C_WIDTH] = curColor; - charmatrix[((int)x1) + ((int)y1) * Headless256Engine.C_WIDTH] = ' '; + bgColorMatrix[((int) x1) + ((int) y1) * Headless256Engine.C_WIDTH] = curColor; + charmatrix[((int) x1) + ((int) y1) * Headless256Engine.C_WIDTH] = ' '; - if (x1 == x2 && y1 == y2) { - break; - } + if (x1 == x2 && y1 == y2) { + break; + } - int e2 = 2 * err; + int e2 = 2 * err; - if (e2 > -dy) { - err = err - dy; - x1 = x1 + sx; - } + if (e2 > -dy) { + err = err - dy; + x1 = x1 + sx; + } - if (e2 < dx) { - err = err + dx; - y1 = y1 + sy; - } + if (e2 < dx) { + err = err + dx; + y1 = y1 + sy; + } } } @Override - public void glFillRect(float x, float y, float width, float height, float uvX, float uvY, float uvWidth, float uvHeight) { + 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/Headless256Engine.C_MUL_X), (int) (y/Headless256Engine.C_MUL_Y), (int) (uvX/Headless256Engine.C_MUL_X), (int) (uvY/Headless256Engine.C_MUL_Y), (int) ((uvWidth + uvX)/Headless256Engine.C_MUL_X), (int) ((uvHeight + uvY)/Headless256Engine.C_MUL_Y), true); + glDrawSkin((int) (x / Headless256Engine.C_MUL_X), (int) (y / Headless256Engine.C_MUL_Y), (int) (uvX / Headless256Engine.C_MUL_X), (int) (uvY / Headless256Engine.C_MUL_Y), (int) ((uvWidth + uvX) / Headless256Engine.C_MUL_X), (int) ((uvHeight + uvY) / Headless256Engine.C_MUL_Y), true); } else { glFillColor(x, y, width, height); } @@ -161,10 +160,10 @@ public class Headless256Renderer implements Renderer { @Override public void glFillColor(float x, float y, float width, float height) { - final int ix = (int) x/Headless256Engine.C_MUL_X; - final int iy = (int) y/Headless256Engine.C_MUL_Y; - final int iw = (int) width/Headless256Engine.C_MUL_X; - final int ih = (int) height/Headless256Engine.C_MUL_Y; + final int ix = (int) x / Headless256Engine.C_MUL_X; + final int iy = (int) y / Headless256Engine.C_MUL_Y; + final int iw = (int) width / Headless256Engine.C_MUL_X; + final int ih = (int) height / Headless256Engine.C_MUL_Y; int x1 = ix + iw; int y1 = iy + ih; @@ -185,61 +184,60 @@ public class Headless256Renderer implements Renderer { } } } - @Override public void glDrawCharLeft(int x, int y, char ch) { - final int cx = ((int)x)/Headless256Engine.C_MUL_X; - final int cy = ((int)y)/Headless256Engine.C_MUL_Y; + final int cx = ((int) x) / Headless256Engine.C_MUL_X; + final int cy = ((int) y) / Headless256Engine.C_MUL_Y; if (cx >= Headless256Engine.C_WIDTH || cy >= Headless256Engine.C_HEIGHT) { return; } - charmatrix[cx+cy*Headless256Engine.C_WIDTH] = ch; - fgColorMatrix[cx+cy*Headless256Engine.C_WIDTH] = curColor; + charmatrix[cx + cy * Headless256Engine.C_WIDTH] = ch; + fgColorMatrix[cx + cy * Headless256Engine.C_WIDTH] = curColor; } @Override public void glDrawCharCenter(int x, int y, char ch) { - glDrawCharLeft(x,y,ch); + glDrawCharLeft(x, y, ch); } @Override public void glDrawCharRight(int x, int y, char ch) { - final int cx = ((int)x)/Headless256Engine.C_MUL_X-1; - final int cy = ((int)y)/Headless256Engine.C_MUL_Y; + final int cx = ((int) x) / Headless256Engine.C_MUL_X - 1; + final int cy = ((int) y) / Headless256Engine.C_MUL_Y; if (cx >= Headless256Engine.C_WIDTH || cy >= Headless256Engine.C_HEIGHT) { return; } - charmatrix[cx+cy*Headless256Engine.C_WIDTH] = ch; - fgColorMatrix[cx+cy*Headless256Engine.C_WIDTH] = curColor; + charmatrix[cx + cy * Headless256Engine.C_WIDTH] = ch; + fgColorMatrix[cx + cy * Headless256Engine.C_WIDTH] = curColor; } @Override public void glDrawStringLeft(float x, float y, String text) { - final int cx = ((int)x)/Headless256Engine.C_MUL_X; - final int cy = ((int)y)/Headless256Engine.C_MUL_Y; + final int cx = ((int) x) / Headless256Engine.C_MUL_X; + final int cy = ((int) y) / Headless256Engine.C_MUL_Y; int i = 0; for (char c : text.toCharArray()) { - if (cx+i >= Headless256Engine.C_WIDTH || cy >= Headless256Engine.C_HEIGHT) { + if (cx + i >= Headless256Engine.C_WIDTH || cy >= Headless256Engine.C_HEIGHT) { break; } - charmatrix[cx+i+cy*Headless256Engine.C_WIDTH] = c; - fgColorMatrix[cx+i+cy*Headless256Engine.C_WIDTH] = curColor; + charmatrix[cx + i + cy * Headless256Engine.C_WIDTH] = c; + fgColorMatrix[cx + i + cy * Headless256Engine.C_WIDTH] = curColor; i++; } } @Override public void glDrawStringCenter(float x, float y, String text) { - final int cx = ((int)x)/Headless256Engine.C_MUL_X-text.length()/2; - final int cy = ((int)y)/Headless256Engine.C_MUL_Y; + final int cx = ((int) x) / Headless256Engine.C_MUL_X - text.length() / 2; + final int cy = ((int) y) / Headless256Engine.C_MUL_Y; int i = 0; for (char c : text.toCharArray()) { - if (cx+i >= Headless256Engine.C_WIDTH || cy >= Headless256Engine.C_HEIGHT) { + if (cx + i >= Headless256Engine.C_WIDTH || cy >= Headless256Engine.C_HEIGHT) { break; } - charmatrix[cx+i+cy*Headless256Engine.C_WIDTH] = c; - fgColorMatrix[cx+i+cy*Headless256Engine.C_WIDTH] = curColor; + charmatrix[cx + i + cy * Headless256Engine.C_WIDTH] = c; + fgColorMatrix[cx + i + cy * Headless256Engine.C_WIDTH] = curColor; i++; } } @@ -247,9 +245,8 @@ public class Headless256Renderer implements Renderer { @Override public void glDrawStringRight(float x, float y, String text) { // TODO Auto-generated method stub - + } - private void glDrawSkin(int x0, int y0, int s0, int t0, int s1, int t1, boolean transparent) { int newColor; @@ -305,7 +302,7 @@ public class Headless256Renderer implements Renderer { if (pixelY < Headless256Engine.C_HEIGHT) { if (pixelX - (pixelX % Headless256Engine.C_WIDTH) == 0) { newColor = currentSkin.skinData[(s0 + texx) + (t0 + texy) * currentSkin.skinSize[0]]; - if (transparent && !((newColor&TRANSPARENT) == TRANSPARENT)) { + if (transparent && !((newColor & TRANSPARENT) == TRANSPARENT)) { charmatrix[pixelX + pixelY * Headless256Engine.C_WIDTH] = ' '; bgColorMatrix[pixelX + pixelY * Headless256Engine.C_WIDTH] = newColor; } @@ -313,16 +310,16 @@ public class Headless256Renderer implements Renderer { } } } - } + } @Override public void glClearSkin() { currentSkin = null; } - + protected void clearAll() { - for (int i = 0; i < Headless256Engine.C_WIDTH*Headless256Engine.C_HEIGHT; i++) { - charmatrix[i]=' '; + for (int i = 0; i < Headless256Engine.C_WIDTH * Headless256Engine.C_HEIGHT; i++) { + charmatrix[i] = ' '; bgColorMatrix[i] = clearColor; fgColorMatrix[i] = 0; } @@ -332,5 +329,5 @@ public class Headless256Renderer implements Renderer { public Headless256Font getCurrentFont() { return currentFont; } - + } diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/headless256/Headless256Skin.java b/src/main/java/org/warp/picalculator/gui/graphicengine/headless256/Headless256Skin.java index 6ba51593..cbe67303 100644 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/headless256/Headless256Skin.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/headless256/Headless256Skin.java @@ -29,22 +29,21 @@ public class Headless256Skin implements Skin { public static int[] getMatrixOfImage(BufferedImage bufferedImage) { BufferedImage after = new BufferedImage(bufferedImage.getWidth(null), bufferedImage.getHeight(null), BufferedImage.TYPE_INT_ARGB); AffineTransform at = new AffineTransform(); - at.scale(1f/((float)Headless256Engine.C_MUL_X), 1f/((float)Headless256Engine.C_MUL_Y)); + at.scale(1f / ((float) Headless256Engine.C_MUL_X), 1f / ((float) Headless256Engine.C_MUL_Y)); AffineTransformOp scaleOp = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR); after = scaleOp.filter(bufferedImage, after); - - + final int width = after.getWidth(null); final int height = after.getHeight(null); final int[] pixels = new int[width * height]; for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) { int rgb = after.getRGB(i, j); - int r = (rgb >> 16) &0xFF; - int g = (rgb >> 8) &0xFF; - int b = rgb &0xFF; + int r = (rgb >> 16) & 0xFF; + int g = (rgb >> 8) & 0xFF; + int b = rgb & 0xFF; boolean transparent = ((rgb >> 24) & 0xFF) <= 128; - pixels[i + j * width] = Headless256Renderer.rgbToX256(r, g, b)|(transparent?Headless256Renderer.TRANSPARENT:0); + pixels[i + j * width] = Headless256Renderer.rgbToX256(r, g, b) | (transparent ? Headless256Renderer.TRANSPARENT : 0); } } @@ -53,7 +52,7 @@ public class Headless256Skin implements Skin { @Override public void initialize(GraphicEngine d) { - + } @Override @@ -66,5 +65,4 @@ public class Headless256Skin implements Skin { return true; } - } diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/headless8/Headless8Engine.java b/src/main/java/org/warp/picalculator/gui/graphicengine/headless8/Headless8Engine.java index eab4a02b..f4f9297e 100644 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/headless8/Headless8Engine.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/headless8/Headless8Engine.java @@ -1,7 +1,6 @@ package org.warp.picalculator.gui.graphicengine.headless8; import java.io.IOException; -import java.util.ArrayList; import java.util.logging.ConsoleHandler; import org.fusesource.jansi.AnsiConsole; @@ -10,8 +9,6 @@ import org.warp.picalculator.Main; import org.warp.picalculator.Utils; import org.warp.picalculator.device.Keyboard; import org.warp.picalculator.device.Keyboard.Key; -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.headless24bit.Headless24bitRenderer; @@ -23,16 +20,16 @@ public class Headless8Engine implements org.warp.picalculator.gui.graphicengine. private RenderingLoop renderLoop; public static final int C_MUL_X = 4;//8; public static final int C_MUL_Y = 8;//8; - protected static final int C_WIDTH = Main.screenSize[0]/C_MUL_X;//Main.screenSize[0]/2;//;60; - protected static final int C_HEIGHT = Main.screenSize[1]/C_MUL_Y;//Main.screenSize[1]/3;//;40; + protected static final int C_WIDTH = Main.screenSize[0] / C_MUL_X;//Main.screenSize[0]/2;//;60; + protected static final int C_HEIGHT = Main.screenSize[1] / C_MUL_Y;//Main.screenSize[1]/3;//;40; private String title = Main.calculatorName; private boolean win = false; private Key precKey = null; - + @Override public int[] getSize() { new ConsoleHandler(); - return new int[]{C_WIDTH, C_HEIGHT}; + return new int[] { C_WIDTH, C_HEIGHT }; } @Override @@ -48,85 +45,85 @@ public class Headless8Engine implements org.warp.picalculator.gui.graphicengine. @Override public void setResizable(boolean r) { // TODO Auto-generated method stub - + } @Override public void setDisplayMode(int ww, int wh) { // TODO Auto-generated method stub - + } @Override public void create() { this.create(null); } - + @Override public void create(Runnable onInitialized) { Utils.outputLevel = -1; AnsiConsole.systemInstall(); - if(Utils.isWindows() && !Utils.msDosMode){ + if (Utils.isWindows() && !Utils.msDosMode) { win = true; WindowsSupport.setConsoleMode(0x0200); - Thread t = new Thread(()-> { + Thread t = new Thread(() -> { int ch = -1; - while(true) { - if (precKey != null) { - Keyboard.keyReleased(precKey); - precKey = null; + while (true) { + if (precKey != null) { + Keyboard.keyReleased(precKey); + precKey = null; + } + ch = WindowsSupport.readByte(); + Key key = null; + switch (ch) { + case 72: { // UP + key = Key.UP; + break; } - ch = WindowsSupport.readByte(); - Key key = null; - switch(ch) { - case 72: { // UP - key = Key.UP; - break; - } - case 80: { // DOWN - key = Key.DOWN; - break; - } - case 77: { // RIGHT - key = Key.RIGHT; - break; - } - case 75: { // LEFT - key = Key.LEFT; - break; - } - case 49: { // 1 - key = Key.NUM1; - break; - } - case 50: { // 2 - key = Key.NUM2; - break; - } - case 51: { // 3 - key = Key.NUM3; - break; - } - case 52: { // 4 - key = Key.NUM4; - break; - } - case 53: { // 5 - key = Key.NUM5; - break; - } - case 54: { // 6 - key = Key.NUM6; - break; - } - default: { - key = Key.NONE; - break; - } + case 80: { // DOWN + key = Key.DOWN; + break; } - if (key != null) { - Keyboard.keyPressed(key); + case 77: { // RIGHT + key = Key.RIGHT; + break; } + case 75: { // LEFT + key = Key.LEFT; + break; + } + case 49: { // 1 + key = Key.NUM1; + break; + } + case 50: { // 2 + key = Key.NUM2; + break; + } + case 51: { // 3 + key = Key.NUM3; + break; + } + case 52: { // 4 + key = Key.NUM4; + break; + } + case 53: { // 5 + key = Key.NUM5; + break; + } + case 54: { // 6 + key = Key.NUM6; + break; + } + default: { + key = Key.NONE; + break; + } + } + if (key != null) { + Keyboard.keyPressed(key); + } } }); @@ -145,12 +142,12 @@ public class Headless8Engine implements org.warp.picalculator.gui.graphicengine. @Override public int getWidth() { - return C_WIDTH*C_MUL_X; + return C_WIDTH * C_MUL_X; } @Override public int getHeight() { - return C_HEIGHT*C_MUL_Y; + return C_HEIGHT * C_MUL_Y; } @Override @@ -191,15 +188,15 @@ public class Headless8Engine implements org.warp.picalculator.gui.graphicengine. public void repaint() { renderLoop.refresh(); r.curColor = 0x1C; - r.glDrawStringCenter((C_WIDTH*C_MUL_X)/2, 0, title); + r.glDrawStringCenter((C_WIDTH * C_MUL_X) / 2, 0, title); if (win) { - WindowsSupport.writeConsole(Headless24bitRenderer.ANSI_PREFIX+"0;0f"); - WindowsSupport.writeConsole(Headless24bitRenderer.ANSI_PREFIX+"?12l"); - WindowsSupport.writeConsole(Headless24bitRenderer.ANSI_PREFIX+"?25l"); + WindowsSupport.writeConsole(Headless24bitRenderer.ANSI_PREFIX + "0;0f"); + WindowsSupport.writeConsole(Headless24bitRenderer.ANSI_PREFIX + "?12l"); + WindowsSupport.writeConsole(Headless24bitRenderer.ANSI_PREFIX + "?25l"); } else { - AnsiConsole.out.print(Headless24bitRenderer.ANSI_PREFIX+"0;0f"); - AnsiConsole.out.print(Headless24bitRenderer.ANSI_PREFIX+"?12l"); - AnsiConsole.out.print(Headless24bitRenderer.ANSI_PREFIX+"?25l"); + AnsiConsole.out.print(Headless24bitRenderer.ANSI_PREFIX + "0;0f"); + AnsiConsole.out.print(Headless24bitRenderer.ANSI_PREFIX + "?12l"); + AnsiConsole.out.print(Headless24bitRenderer.ANSI_PREFIX + "?25l"); } for (int y = 0; y < C_HEIGHT; y++) { int precBgColor = -1; @@ -207,10 +204,10 @@ public class Headless8Engine implements org.warp.picalculator.gui.graphicengine. int curBgColor = -1; int curFgColor = -1; for (int x = 0; x < C_WIDTH; x++) { - curBgColor = (r.colorMatrix[x+y*C_WIDTH]&0xF0)>>4; - curFgColor = r.colorMatrix[x+y*C_WIDTH]&0x0F; + curBgColor = (r.colorMatrix[x + y * C_WIDTH] & 0xF0) >> 4; + curFgColor = r.colorMatrix[x + y * C_WIDTH] & 0x0F; if (precBgColor != curBgColor) { - String str = Headless8Renderer.ANSI_PREFIX+Headless8Renderer.ansiBgColorPrefix+Headless8Renderer.colorANSI[curBgColor]+Headless8Renderer.ansiColorSuffix; + String str = Headless8Renderer.ANSI_PREFIX + Headless8Renderer.ansiBgColorPrefix + Headless8Renderer.colorANSI[curBgColor] + Headless8Renderer.ansiColorSuffix; if (win) { WindowsSupport.writeConsole(str); } else { @@ -218,25 +215,25 @@ public class Headless8Engine implements org.warp.picalculator.gui.graphicengine. } } if (precFgColor != curFgColor) { - String str = Headless8Renderer.ANSI_PREFIX+Headless8Renderer.ansiFgColorPrefix+Headless8Renderer.colorANSI[curFgColor]+Headless8Renderer.ansiColorSuffix; + String str = Headless8Renderer.ANSI_PREFIX + Headless8Renderer.ansiFgColorPrefix + Headless8Renderer.colorANSI[curFgColor] + Headless8Renderer.ansiColorSuffix; if (win) { WindowsSupport.writeConsole(str); } else { AnsiConsole.out.print(str); } } - - String stri = r.charmatrix[x+y*C_WIDTH]+""; + + String stri = r.charmatrix[x + y * C_WIDTH] + ""; if (win) { WindowsSupport.writeConsole(stri); } else { AnsiConsole.out.print(stri); } - + precBgColor = curBgColor; precFgColor = curFgColor; } - + if (win) { WindowsSupport.writeConsole("\r\n"); } else { @@ -261,11 +258,11 @@ public class Headless8Engine implements org.warp.picalculator.gui.graphicengine. } @Override - public void waitUntilExit() { + public void waitForExit() { try { do { Thread.sleep(500); - } while (stopped==false); + } while (stopped == false); } catch (final InterruptedException e) { } @@ -273,7 +270,8 @@ public class Headless8Engine implements org.warp.picalculator.gui.graphicengine. @Override public boolean isSupported() { - if (Utils.forceEngine != null && Utils.forceEngine != "console-8") return false; + if (Utils.forceEngine != null && Utils.forceEngine != "console-8") + return false; return true; } diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/headless8/Headless8Font.java b/src/main/java/org/warp/picalculator/gui/graphicengine/headless8/Headless8Font.java index bbb77f81..3c30618f 100644 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/headless8/Headless8Font.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/headless8/Headless8Font.java @@ -9,24 +9,24 @@ public class Headless8Font implements BinaryFont { @Override public void load(String file) throws IOException { - + } @Override public void initialize(GraphicEngine d) { // TODO Auto-generated method stub - + } @Override public void use(GraphicEngine d) { // TODO Auto-generated method stub - + } @Override public int getStringWidth(String text) { - return 5*text.length(); + return 5 * text.length(); } @Override diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/headless8/Headless8Renderer.java b/src/main/java/org/warp/picalculator/gui/graphicengine/headless8/Headless8Renderer.java index 9c83f4a5..540cc3d1 100644 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/headless8/Headless8Renderer.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/headless8/Headless8Renderer.java @@ -6,8 +6,8 @@ import org.warp.picalculator.gui.graphicengine.Renderer; public class Headless8Renderer implements Renderer { Headless8Font currentFont; - protected char[] charmatrix = new char[Headless8Engine.C_WIDTH*Headless8Engine.C_HEIGHT]; - protected int[] colorMatrix = new int[Headless8Engine.C_WIDTH*Headless8Engine.C_HEIGHT]; + protected char[] charmatrix = new char[Headless8Engine.C_WIDTH * Headless8Engine.C_HEIGHT]; + protected int[] colorMatrix = new int[Headless8Engine.C_WIDTH * Headless8Engine.C_HEIGHT]; protected int clearColor = hexColor(0xc5, 0xc2, 0xaf); protected int curColor = clearColor; public Headless8Skin currentSkin; @@ -16,165 +16,164 @@ public class Headless8Renderer implements Renderer { public static final String ansiFgColorPrefix = "3"; public static final String ansiBgColorPrefix = "4"; public static final String ansiColorSuffix = "m"; - public static final String[] colorANSI = new String[]{"0", "1", "2", "3", "4", "5", "6", "7", "0;1", "1;1", "2;1", "3;1", "4;1", "5;1", "6;1", "7;1"}; - + public static final String[] colorANSI = new String[] { "0", "1", "2", "3", "4", "5", "6", "7", "0;1", "1;1", "2;1", "3;1", "4;1", "5;1", "6;1", "7;1" }; + public static final String ANSI_RESET = "\u001B[0m"; public static final char FILL = Utils.msDosMode ? 0xDB : '█'; - private int hexColor(int red, int green, int blue) { - int r1=red, r2, g1=green, g2, b1=blue, b2; - + int r1 = red, r2, g1 = green, g2, b1 = blue, b2; + float[] match = new float[16]; - + // COLOR r2 = 0; g2 = 0; b2 = 0; - match[0]=(r2-r1)*(r2-r1)+(g2-g1)*(g2-g1)+(b2-b1)*(b2-b1); - + match[0] = (r2 - r1) * (r2 - r1) + (g2 - g1) * (g2 - g1) + (b2 - b1) * (b2 - b1); + // COLOR r2 = 205; g2 = 0; b2 = 0; - match[1]=(r2-r1)*(r2-r1)+(g2-g1)*(g2-g1)+(b2-b1)*(b2-b1); - + match[1] = (r2 - r1) * (r2 - r1) + (g2 - g1) * (g2 - g1) + (b2 - b1) * (b2 - b1); + // COLOR r2 = 0; g2 = 205; b2 = 0; - match[2]=(r2-r1)*(r2-r1)+(g2-g1)*(g2-g1)+(b2-b1)*(b2-b1); - + match[2] = (r2 - r1) * (r2 - r1) + (g2 - g1) * (g2 - g1) + (b2 - b1) * (b2 - b1); + // COLOR r2 = 205; g2 = 205; b2 = 0; - match[3]=(r2-r1)*(r2-r1)+(g2-g1)*(g2-g1)+(b2-b1)*(b2-b1); - + match[3] = (r2 - r1) * (r2 - r1) + (g2 - g1) * (g2 - g1) + (b2 - b1) * (b2 - b1); + // COLOR r2 = 0; g2 = 0; b2 = 238; - match[4]=(r2-r1)*(r2-r1)+(g2-g1)*(g2-g1)+(b2-b1)*(b2-b1); - + match[4] = (r2 - r1) * (r2 - r1) + (g2 - g1) * (g2 - g1) + (b2 - b1) * (b2 - b1); + // COLOR r2 = 205; g2 = 0; b2 = 205; - match[5]=(r2-r1)*(r2-r1)+(g2-g1)*(g2-g1)+(b2-b1)*(b2-b1); - + match[5] = (r2 - r1) * (r2 - r1) + (g2 - g1) * (g2 - g1) + (b2 - b1) * (b2 - b1); + // COLOR r2 = 0; g2 = 205; b2 = 205; - match[6]=(r2-r1)*(r2-r1)+(g2-g1)*(g2-g1)+(b2-b1)*(b2-b1); - + match[6] = (r2 - r1) * (r2 - r1) + (g2 - g1) * (g2 - g1) + (b2 - b1) * (b2 - b1); + // COLOR r2 = 229; g2 = 229; b2 = 229; - match[7]=(r2-r1)*(r2-r1)+(g2-g1)*(g2-g1)+(b2-b1)*(b2-b1); - + match[7] = (r2 - r1) * (r2 - r1) + (g2 - g1) * (g2 - g1) + (b2 - b1) * (b2 - b1); + // COLOR r2 = 127; g2 = 127; b2 = 127; - match[8]=(r2-r1)*(r2-r1)+(g2-g1)*(g2-g1)+(b2-b1)*(b2-b1); - + match[8] = (r2 - r1) * (r2 - r1) + (g2 - g1) * (g2 - g1) + (b2 - b1) * (b2 - b1); + // COLOR r2 = 255; g2 = 0; b2 = 0; - match[9]=(r2-r1)*(r2-r1)+(g2-g1)*(g2-g1)+(b2-b1)*(b2-b1); - + match[9] = (r2 - r1) * (r2 - r1) + (g2 - g1) * (g2 - g1) + (b2 - b1) * (b2 - b1); + // COLOR r2 = 0; g2 = 255; b2 = 0; - match[0xa]=(r2-r1)*(r2-r1)+(g2-g1)*(g2-g1)+(b2-b1)*(b2-b1); - + match[0xa] = (r2 - r1) * (r2 - r1) + (g2 - g1) * (g2 - g1) + (b2 - b1) * (b2 - b1); + // COLOR r2 = 255; g2 = 255; b2 = 0; - match[0xb]=(r2-r1)*(r2-r1)+(g2-g1)*(g2-g1)+(b2-b1)*(b2-b1); - + match[0xb] = (r2 - r1) * (r2 - r1) + (g2 - g1) * (g2 - g1) + (b2 - b1) * (b2 - b1); + // COLOR r2 = 92; g2 = 92; b2 = 255; - match[0xc]=(r2-r1)*(r2-r1)+(g2-g1)*(g2-g1)+(b2-b1)*(b2-b1); - + match[0xc] = (r2 - r1) * (r2 - r1) + (g2 - g1) * (g2 - g1) + (b2 - b1) * (b2 - b1); + // COLOR r2 = 255; g2 = 0; b2 = 255; - match[0xd]=(r2-r1)*(r2-r1)+(g2-g1)*(g2-g1)+(b2-b1)*(b2-b1); - + match[0xd] = (r2 - r1) * (r2 - r1) + (g2 - g1) * (g2 - g1) + (b2 - b1) * (b2 - b1); + // COLOR r2 = 0; g2 = 255; b2 = 255; - match[0xe]=(r2-r1)*(r2-r1)+(g2-g1)*(g2-g1)+(b2-b1)*(b2-b1); - + match[0xe] = (r2 - r1) * (r2 - r1) + (g2 - g1) * (g2 - g1) + (b2 - b1) * (b2 - b1); + // COLOR r2 = 255; g2 = 255; b2 = 255; - match[0xf]=(r2-r1)*(r2-r1)+(g2-g1)*(g2-g1)+(b2-b1)*(b2-b1); - + match[0xf] = (r2 - r1) * (r2 - r1) + (g2 - g1) * (g2 - g1) + (b2 - b1) * (b2 - b1); + int minIndex = 0; - for (int i = 1; i < match.length; i++) { - float newnumber = match[i]; - if ((newnumber < match[minIndex])) { - minIndex = i; - } - } - - return minIndex; + for (int i = 1; i < match.length; i++) { + float newnumber = match[i]; + if ((newnumber < match[minIndex])) { + minIndex = i; + } + } + + return minIndex; } private int[] hexColorReverse(int i) { switch (i) { case 0x0: - return new int[]{0,0,0}; + return new int[] { 0, 0, 0 }; case 0x1: - return new int[]{205,0,0}; + return new int[] { 205, 0, 0 }; case 0x2: - return new int[]{0,205,0}; + return new int[] { 0, 205, 0 }; case 0x3: - return new int[]{205,205,0}; + return new int[] { 205, 205, 0 }; case 0x4: - return new int[]{0,0,238}; + return new int[] { 0, 0, 238 }; case 0x5: - return new int[]{205,0,205}; + return new int[] { 205, 0, 205 }; case 0x6: - return new int[]{0,205,205}; + return new int[] { 0, 205, 205 }; case 0x7: - return new int[]{229,229,229}; + return new int[] { 229, 229, 229 }; case 0x8: - return new int[]{127,127,127}; + return new int[] { 127, 127, 127 }; case 0x9: - return new int[]{255,0,0}; + return new int[] { 255, 0, 0 }; case 0xa: - return new int[]{0,255,0}; + return new int[] { 0, 255, 0 }; case 0xb: - return new int[]{255,255,0}; + return new int[] { 255, 255, 0 }; case 0xc: - return new int[]{92,92,255}; + return new int[] { 92, 92, 255 }; case 0xd: - return new int[]{255,0,255}; + return new int[] { 255, 0, 255 }; case 0xe: - return new int[]{0,255,255}; + return new int[] { 0, 255, 255 }; default: - return new int[]{255,255,255}; + return new int[] { 255, 255, 255 }; } } - + private int colorUnion(int[] col) { - return 0xFF<<24|col[0]<<16|col[1]<<8|col[2]; + return 0xFF << 24 | col[0] << 16 | col[1] << 8 | col[2]; } - + @Override public void glColor3i(int r, int gg, int b) { curColor = hexColor(r, gg, b); @@ -192,12 +191,12 @@ public class Headless8Renderer implements Renderer { @Override public void glColor3f(float red, float green, float blue) { - curColor = hexColor((int)(red*255), (int)(green*255), (int)(blue*255)); + curColor = hexColor((int) (red * 255), (int) (green * 255), (int) (blue * 255)); } @Override public void glColor4f(float red, float green, float blue, float alpha) { - curColor = hexColor((int)(red*255), (int)(green*255), (int)(blue*255)); + curColor = hexColor((int) (red * 255), (int) (green * 255), (int) (blue * 255)); } @Override @@ -207,7 +206,7 @@ public class Headless8Renderer implements Renderer { @Override public void glClearColor4f(float red, float green, float blue, float alpha) { - clearColor = hexColor((int)(red*255), (int)(green*255), (int)(blue*255)); + clearColor = hexColor((int) (red * 255), (int) (green * 255), (int) (blue * 255)); } @Override @@ -227,11 +226,11 @@ public class Headless8Renderer implements Renderer { @Override public void glDrawLine(float x1, float y1, float x2, float y2) { - x1/=Headless8Engine.C_MUL_X; - x2/=Headless8Engine.C_MUL_X; - y1/=Headless8Engine.C_MUL_Y; - y2/=Headless8Engine.C_MUL_Y; - + x1 /= Headless8Engine.C_MUL_X; + x2 /= Headless8Engine.C_MUL_X; + y1 /= Headless8Engine.C_MUL_Y; + y2 /= Headless8Engine.C_MUL_Y; + int dx = (int) Math.abs(x2 - x1); int dy = (int) Math.abs(y2 - y1); @@ -241,36 +240,36 @@ public class Headless8Renderer implements Renderer { int err = dx - dy; while (true) { - if (((int)x1) >= Headless8Engine.C_WIDTH || ((int)y1) >= Headless8Engine.C_HEIGHT || - ((int)x2) >= Headless8Engine.C_WIDTH || ((int)y2) >= Headless8Engine.C_HEIGHT) { + if (((int) x1) >= Headless8Engine.C_WIDTH || ((int) y1) >= Headless8Engine.C_HEIGHT || ((int) x2) >= Headless8Engine.C_WIDTH || ((int) y2) >= Headless8Engine.C_HEIGHT) { break; } - int precBG = colorMatrix[((int)x1) + ((int)y1) * Headless8Engine.C_WIDTH]&0xF0; - colorMatrix[((int)x1) + ((int)y1) * Headless8Engine.C_WIDTH] = precBG|curColor; - charmatrix[((int)x1) + ((int)y1) * Headless8Engine.C_WIDTH] = FILL; + int precBG = colorMatrix[((int) x1) + ((int) y1) * Headless8Engine.C_WIDTH] & 0xF0; + colorMatrix[((int) x1) + ((int) y1) * Headless8Engine.C_WIDTH] = precBG | curColor; + charmatrix[((int) x1) + ((int) y1) * Headless8Engine.C_WIDTH] = FILL; - if (x1 == x2 && y1 == y2) { - break; - } + if (x1 == x2 && y1 == y2) { + break; + } - int e2 = 2 * err; + int e2 = 2 * err; - if (e2 > -dy) { - err = err - dy; - x1 = x1 + sx; - } + if (e2 > -dy) { + err = err - dy; + x1 = x1 + sx; + } - if (e2 < dx) { - err = err + dx; - y1 = y1 + sy; - } + if (e2 < dx) { + err = err + dx; + y1 = y1 + sy; + } } } @Override - public void glFillRect(float x, float y, float width, float height, float uvX, float uvY, float uvWidth, float uvHeight) { + 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/Headless8Engine.C_MUL_X), (int) (y/Headless8Engine.C_MUL_Y), (int) (uvX/Headless8Engine.C_MUL_X), (int) (uvY/Headless8Engine.C_MUL_Y), (int) ((uvWidth + uvX)/Headless8Engine.C_MUL_X), (int) ((uvHeight + uvY)/Headless8Engine.C_MUL_Y), true); + glDrawSkin((int) (x / Headless8Engine.C_MUL_X), (int) (y / Headless8Engine.C_MUL_Y), (int) (uvX / Headless8Engine.C_MUL_X), (int) (uvY / Headless8Engine.C_MUL_Y), (int) ((uvWidth + uvX) / Headless8Engine.C_MUL_X), (int) ((uvHeight + uvY) / Headless8Engine.C_MUL_Y), true); } else { glFillColor(x, y, width, height); } @@ -280,12 +279,12 @@ public class Headless8Renderer implements Renderer { public void glFillColor(float x, float y, float width, float height) { glFillColor(x, y, width, height, FILL, curColor); } - + private void glFillColor(float x, float y, float width, float height, char character, int color) { - final int ix = (int) x/Headless8Engine.C_MUL_X; - final int iy = (int) y/Headless8Engine.C_MUL_Y; - final int iw = (int) width/Headless8Engine.C_MUL_X; - final int ih = (int) height/Headless8Engine.C_MUL_Y; + final int ix = (int) x / Headless8Engine.C_MUL_X; + final int iy = (int) y / Headless8Engine.C_MUL_Y; + final int iw = (int) width / Headless8Engine.C_MUL_X; + final int ih = (int) height / Headless8Engine.C_MUL_Y; int x1 = ix + iw; int y1 = iy + ih; @@ -301,71 +300,70 @@ public class Headless8Renderer implements Renderer { final int sizeW = Headless8Engine.C_WIDTH; for (int px = ix; px < x1; px++) { for (int py = iy; py < y1; py++) { - int precBG = colorMatrix[(px) + (py) * sizeW]&0xF0; - colorMatrix[(px) + (py) * sizeW] = precBG|color; + int precBG = colorMatrix[(px) + (py) * sizeW] & 0xF0; + colorMatrix[(px) + (py) * sizeW] = precBG | color; charmatrix[(px) + (py) * sizeW] = character; } } } - @Override public void glDrawCharLeft(int x, int y, char ch) { - final int cx = ((int)x)/Headless8Engine.C_MUL_X; - final int cy = ((int)y)/Headless8Engine.C_MUL_Y; + final int cx = ((int) x) / Headless8Engine.C_MUL_X; + final int cy = ((int) y) / Headless8Engine.C_MUL_Y; if (cx >= Headless8Engine.C_WIDTH || cy >= Headless8Engine.C_HEIGHT) { return; } - charmatrix[cx+cy*Headless8Engine.C_WIDTH] = ch; - int precBG = colorMatrix[cx+cy*Headless8Engine.C_WIDTH]&0xF0; - colorMatrix[cx+cy*Headless8Engine.C_WIDTH] = precBG|curColor; + charmatrix[cx + cy * Headless8Engine.C_WIDTH] = ch; + int precBG = colorMatrix[cx + cy * Headless8Engine.C_WIDTH] & 0xF0; + colorMatrix[cx + cy * Headless8Engine.C_WIDTH] = precBG | curColor; } @Override public void glDrawCharCenter(int x, int y, char ch) { - glDrawCharLeft(x,y,ch); + glDrawCharLeft(x, y, ch); } @Override public void glDrawCharRight(int x, int y, char ch) { - final int cx = ((int)x)/Headless8Engine.C_MUL_X-1; - final int cy = ((int)y)/Headless8Engine.C_MUL_Y; + final int cx = ((int) x) / Headless8Engine.C_MUL_X - 1; + final int cy = ((int) y) / Headless8Engine.C_MUL_Y; if (cx >= Headless8Engine.C_WIDTH || cy >= Headless8Engine.C_HEIGHT) { return; } - charmatrix[cx+cy*Headless8Engine.C_WIDTH] = ch; - int precBG = colorMatrix[cx+cy*Headless8Engine.C_WIDTH]&0xF0; - colorMatrix[cx+cy*Headless8Engine.C_WIDTH] = precBG|curColor; + charmatrix[cx + cy * Headless8Engine.C_WIDTH] = ch; + int precBG = colorMatrix[cx + cy * Headless8Engine.C_WIDTH] & 0xF0; + colorMatrix[cx + cy * Headless8Engine.C_WIDTH] = precBG | curColor; } @Override public void glDrawStringLeft(float x, float y, String text) { - final int cx = ((int)x)/Headless8Engine.C_MUL_X; - final int cy = ((int)y)/Headless8Engine.C_MUL_Y; + final int cx = ((int) x) / Headless8Engine.C_MUL_X; + final int cy = ((int) y) / Headless8Engine.C_MUL_Y; int i = 0; for (char c : text.toCharArray()) { - if (cx+i >= Headless8Engine.C_WIDTH || cy >= Headless8Engine.C_HEIGHT) { + if (cx + i >= Headless8Engine.C_WIDTH || cy >= Headless8Engine.C_HEIGHT) { break; } - charmatrix[cx+i+cy*Headless8Engine.C_WIDTH] = c; - int precBG = colorMatrix[cx+i+cy*Headless8Engine.C_WIDTH]&0xF0; - colorMatrix[cx+i+cy*Headless8Engine.C_WIDTH] = precBG|curColor; + charmatrix[cx + i + cy * Headless8Engine.C_WIDTH] = c; + int precBG = colorMatrix[cx + i + cy * Headless8Engine.C_WIDTH] & 0xF0; + colorMatrix[cx + i + cy * Headless8Engine.C_WIDTH] = precBG | curColor; i++; } } @Override public void glDrawStringCenter(float x, float y, String text) { - final int cx = ((int)x)/Headless8Engine.C_MUL_X-text.length()/2; - final int cy = ((int)y)/Headless8Engine.C_MUL_Y; + final int cx = ((int) x) / Headless8Engine.C_MUL_X - text.length() / 2; + final int cy = ((int) y) / Headless8Engine.C_MUL_Y; int i = 0; for (char c : text.toCharArray()) { - if (cx+i >= Headless8Engine.C_WIDTH || cy >= Headless8Engine.C_HEIGHT) { + if (cx + i >= Headless8Engine.C_WIDTH || cy >= Headless8Engine.C_HEIGHT) { break; } - charmatrix[cx+i+cy*Headless8Engine.C_WIDTH] = c; - int precBG = colorMatrix[cx+i+cy*Headless8Engine.C_WIDTH]&0xF0; - colorMatrix[cx+i+cy*Headless8Engine.C_WIDTH] = precBG|curColor; + charmatrix[cx + i + cy * Headless8Engine.C_WIDTH] = c; + int precBG = colorMatrix[cx + i + cy * Headless8Engine.C_WIDTH] & 0xF0; + colorMatrix[cx + i + cy * Headless8Engine.C_WIDTH] = precBG | curColor; i++; } } @@ -373,9 +371,8 @@ public class Headless8Renderer implements Renderer { @Override public void glDrawStringRight(float x, float y, String text) { // TODO Auto-generated method stub - + } - private void glDrawSkin(int x0, int y0, int s0, int t0, int s1, int t1, boolean transparent) { int oldColor; @@ -433,7 +430,7 @@ public class Headless8Renderer implements Renderer { if (pixelX - (pixelX % Headless8Engine.C_WIDTH) == 0) { newColor = currentSkin.skinData[(s0 + texx) + (t0 + texy) * currentSkin.skinSize[0]]; if (transparent) { - oldColor = colorUnion(hexColorReverse((colorMatrix[pixelX + pixelY * Headless8Engine.C_WIDTH]&0xF0)>>4)); + oldColor = colorUnion(hexColorReverse((colorMatrix[pixelX + pixelY * Headless8Engine.C_WIDTH] & 0xF0) >> 4)); final float a2 = (newColor >> 24 & 0xFF) / 255f; final float a1 = 1f - a2; final int r = (int) ((oldColor >> 16 & 0xFF) * a1 + (newColor >> 16 & 0xFF) * a2); @@ -442,23 +439,23 @@ public class Headless8Renderer implements Renderer { newColor = 0xFF000000 | r << 16 | g << 8 | b; } int bgColor = colorMatrix[pixelX + pixelY * Headless8Engine.C_WIDTH] & 0xF0; - colorMatrix[pixelX + pixelY * Headless8Engine.C_WIDTH] = bgColor|hexColor(newColor >> 16 & 0xFF, newColor >> 8 & 0xFF, newColor & 0xFF); + colorMatrix[pixelX + pixelY * Headless8Engine.C_WIDTH] = bgColor | hexColor(newColor >> 16 & 0xFF, newColor >> 8 & 0xFF, newColor & 0xFF); charmatrix[pixelX + pixelY * Headless8Engine.C_WIDTH] = FILL; } } } } - } + } @Override public void glClearSkin() { currentSkin = null; } - + protected void clearAll() { - for (int i = 0; i < Headless8Engine.C_WIDTH*Headless8Engine.C_HEIGHT; i++) { - charmatrix[i]=' '; - colorMatrix[i] = clearColor<<4; + for (int i = 0; i < Headless8Engine.C_WIDTH * Headless8Engine.C_HEIGHT; i++) { + charmatrix[i] = ' '; + colorMatrix[i] = clearColor << 4; } } @@ -466,5 +463,5 @@ public class Headless8Renderer implements Renderer { public Headless8Font getCurrentFont() { return currentFont; } - + } diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/headless8/Headless8Skin.java b/src/main/java/org/warp/picalculator/gui/graphicengine/headless8/Headless8Skin.java index 8c218af1..257639d5 100644 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/headless8/Headless8Skin.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/headless8/Headless8Skin.java @@ -29,11 +29,10 @@ public class Headless8Skin implements Skin { public static int[] getMatrixOfImage(BufferedImage bufferedImage) { BufferedImage after = new BufferedImage(bufferedImage.getWidth(null), bufferedImage.getHeight(null), BufferedImage.TYPE_INT_ARGB); AffineTransform at = new AffineTransform(); - at.scale(1f/((float)Headless8Engine.C_MUL_X), 1f/((float)Headless8Engine.C_MUL_Y)); + at.scale(1f / ((float) Headless8Engine.C_MUL_X), 1f / ((float) Headless8Engine.C_MUL_Y)); AffineTransformOp scaleOp = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR); after = scaleOp.filter(bufferedImage, after); - - + final int width = after.getWidth(null); final int height = after.getHeight(null); final int[] pixels = new int[width * height]; @@ -48,7 +47,7 @@ public class Headless8Skin implements Skin { @Override public void initialize(GraphicEngine d) { - + } @Override @@ -61,5 +60,4 @@ public class Headless8Skin implements Skin { return true; } - } diff --git a/src/main/java/org/warp/picalculator/gui/screens/ChooseVariableValueScreen.java b/src/main/java/org/warp/picalculator/gui/screens/ChooseVariableValueScreen.java index 014282fe..1c36d509 100755 --- a/src/main/java/org/warp/picalculator/gui/screens/ChooseVariableValueScreen.java +++ b/src/main/java/org/warp/picalculator/gui/screens/ChooseVariableValueScreen.java @@ -28,21 +28,21 @@ public class ChooseVariableValueScreen extends Screen { @Override public void render() { - Utils.getFont(false, true).use(DisplayManager.engine); - DisplayManager.renderer.glColor4i(0, 0, 0, 64); - DisplayManager.renderer.glDrawStringCenter(Main.screenSize[0] / 2 + 1, Main.screenSize[1] / 2 - 20, "WORK IN PROGRESS."); - DisplayManager.renderer.glDrawStringCenter(Main.screenSize[0] / 2, Main.screenSize[1] / 2 - 20 + 1, "WORK IN PROGRESS."); - DisplayManager.renderer.glDrawStringCenter(Main.screenSize[0] / 2 + 1, Main.screenSize[1] / 2 - 20 + 1, "WORK IN PROGRESS."); - DisplayManager.renderer.glColor3i(255, 0, 0); - DisplayManager.renderer.glDrawStringCenter(Main.screenSize[0] / 2, Main.screenSize[1] / 2 - 20, "WORK IN PROGRESS."); + Utils.getFont(false, true).use(DisplayManager.INSTANCE.engine); + DisplayManager.INSTANCE.renderer.glColor4i(0, 0, 0, 64); + DisplayManager.INSTANCE.renderer.glDrawStringCenter(Main.screenSize[0] / 2 + 1, Main.screenSize[1] / 2 - 20, "WORK IN PROGRESS."); + DisplayManager.INSTANCE.renderer.glDrawStringCenter(Main.screenSize[0] / 2, Main.screenSize[1] / 2 - 20 + 1, "WORK IN PROGRESS."); + DisplayManager.INSTANCE.renderer.glDrawStringCenter(Main.screenSize[0] / 2 + 1, Main.screenSize[1] / 2 - 20 + 1, "WORK IN PROGRESS."); + DisplayManager.INSTANCE.renderer.glColor3i(255, 0, 0); + DisplayManager.INSTANCE.renderer.glDrawStringCenter(Main.screenSize[0] / 2, Main.screenSize[1] / 2 - 20, "WORK IN PROGRESS."); - Utils.getFont(false, false).use(DisplayManager.engine); - DisplayManager.renderer.glColor4i(0, 0, 0, 64); - DisplayManager.renderer.glDrawStringCenter(Main.screenSize[0] / 2 + 1, Main.screenSize[1] / 2, "THIS SCREEN MUST HAVE A GUI TO SELECT THE VARIABLE TO SOLVE."); - DisplayManager.renderer.glDrawStringCenter(Main.screenSize[0] / 2, Main.screenSize[1] / 2 + 1, "THIS SCREEN MUST HAVE A GUI TO SELECT THE VARIABLE TO SOLVE."); - DisplayManager.renderer.glDrawStringCenter(Main.screenSize[0] / 2 + 1, Main.screenSize[1] / 2 + 1, "THIS SCREEN MUST HAVE A GUI TO SELECT THE VARIABLE TO SOLVE."); - DisplayManager.renderer.glColor3i(255, 0, 0); - DisplayManager.renderer.glDrawStringCenter(Main.screenSize[0] / 2, Main.screenSize[1] / 2, "THIS SCREEN MUST HAVE A GUI TO SELECT THE VARIABLE TO SOLVE."); + Utils.getFont(false, false).use(DisplayManager.INSTANCE.engine); + DisplayManager.INSTANCE.renderer.glColor4i(0, 0, 0, 64); + DisplayManager.INSTANCE.renderer.glDrawStringCenter(Main.screenSize[0] / 2 + 1, Main.screenSize[1] / 2, "THIS SCREEN MUST HAVE A GUI TO SELECT THE VARIABLE TO SOLVE."); + DisplayManager.INSTANCE.renderer.glDrawStringCenter(Main.screenSize[0] / 2, Main.screenSize[1] / 2 + 1, "THIS SCREEN MUST HAVE A GUI TO SELECT THE VARIABLE TO SOLVE."); + DisplayManager.INSTANCE.renderer.glDrawStringCenter(Main.screenSize[0] / 2 + 1, Main.screenSize[1] / 2 + 1, "THIS SCREEN MUST HAVE A GUI TO SELECT THE VARIABLE TO SOLVE."); + DisplayManager.INSTANCE.renderer.glColor3i(255, 0, 0); + DisplayManager.INSTANCE.renderer.glDrawStringCenter(Main.screenSize[0] / 2, Main.screenSize[1] / 2, "THIS SCREEN MUST HAVE A GUI TO SELECT THE VARIABLE TO SOLVE."); } @Override diff --git a/src/main/java/org/warp/picalculator/gui/screens/KeyboardDebugScreen.java b/src/main/java/org/warp/picalculator/gui/screens/KeyboardDebugScreen.java index 1ace33e3..0bdff8be 100755 --- a/src/main/java/org/warp/picalculator/gui/screens/KeyboardDebugScreen.java +++ b/src/main/java/org/warp/picalculator/gui/screens/KeyboardDebugScreen.java @@ -1,7 +1,5 @@ package org.warp.picalculator.gui.screens; -import static org.warp.picalculator.gui.DisplayManager.fonts; - import org.warp.picalculator.Main; import org.warp.picalculator.device.Keyboard.Key; import org.warp.picalculator.gui.DisplayManager; @@ -29,19 +27,19 @@ public class KeyboardDebugScreen extends Screen { @Override public void render() { - final Renderer renderer = DisplayManager.renderer; - fonts[2].use(DisplayManager.engine); + final Renderer renderer = DisplayManager.INSTANCE.renderer; + DisplayManager.INSTANCE.fonts[2].use(DisplayManager.INSTANCE.engine); renderer.glColor4f(0.75f, 0.0f, 0.0f, 1.0f); renderer.glDrawStringRight(Main.screenSize[0] - 10, 30, "-" + keyevent.toUpperCase() + "-"); if (keyevent != "NONE") { - fonts[2].use(DisplayManager.engine); + DisplayManager.INSTANCE.fonts[2].use(DisplayManager.INSTANCE.engine); renderer.glColor4f(0.0f, 0.0f, 0.0f, 1.0f); renderer.glDrawStringLeft(10, 30, "Key position"); renderer.glDrawStringLeft(10, 45, "X: " + keyX + ", Y:" + keyY); renderer.glDrawStringLeft(10, 65, "Key value"); renderer.glDrawStringLeft(10, 80, key); } - fonts[3].use(DisplayManager.engine); + DisplayManager.INSTANCE.fonts[3].use(DisplayManager.INSTANCE.engine); renderer.glColor4f(0.0f, 0.0f, 0.0f, 1.0f); for (int i = 0; i < 5; i++) { if (log[i] != null) { @@ -53,10 +51,10 @@ public class KeyboardDebugScreen extends Screen { renderer.glColor4f(0.0f, 0.0f, 0.0f, 1.0f); renderer.glFillColor(-80 + 100 + 200, 90, 5, 5); renderer.glFillColor(-80 + 100, 100, 200, 70); - fonts[2].use(DisplayManager.engine); + DisplayManager.INSTANCE.fonts[2].use(DisplayManager.INSTANCE.engine); renderer.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); renderer.glDrawStringCenter(-80 + 100 + 200 / 2, 100 + 70 / 2 - (renderer.getCurrentFont().getCharacterHeight() / 2), "FROM SERIAL"); - fonts[3].use(DisplayManager.engine); + DisplayManager.INSTANCE.fonts[3].use(DisplayManager.INSTANCE.engine); renderer.glColor4f(0.0f, 0.0f, 1.0f, 1.0f); for (int i = 0; i < 8; i++) { if (pinsA[i] == 1) { @@ -99,10 +97,10 @@ public class KeyboardDebugScreen extends Screen { renderer.glColor4f(0.0f, 0.0f, 0.0f, 1.0f); renderer.glFillColor(150 + 90, 200, 5, 5); renderer.glFillColor(150 + 100, 100, 200, 70); - fonts[2].use(DisplayManager.engine); + DisplayManager.INSTANCE.fonts[2].use(DisplayManager.INSTANCE.engine); renderer.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); renderer.glDrawStringCenter(150 + 100 + 200 / 2, 100 + 70 / 2 - (renderer.getCurrentFont().getCharacterHeight() / 2), "TO SERIAL"); - fonts[3].use(DisplayManager.engine); + DisplayManager.INSTANCE.fonts[3].use(DisplayManager.INSTANCE.engine); renderer.glColor4f(0.0f, 0.0f, 1.0f, 1.0f); for (int i = 15; i >= 8; i--) { if (pinsB[i] == 1) { diff --git a/src/main/java/org/warp/picalculator/gui/screens/LoadingScreen.java b/src/main/java/org/warp/picalculator/gui/screens/LoadingScreen.java index d25ce2d1..4db46765 100755 --- a/src/main/java/org/warp/picalculator/gui/screens/LoadingScreen.java +++ b/src/main/java/org/warp/picalculator/gui/screens/LoadingScreen.java @@ -37,13 +37,13 @@ public class LoadingScreen extends Screen { @Override public void render() { - DisplayManager.guiSkin.use(DisplayManager.engine); - DisplayManager.renderer.glColor3i(255, 255, 255); - DisplayManager.renderer.glFillRect(Main.screenSize[0] / 2f - 80, Main.screenSize[1] / 2f - 64, 160, 48, 0, 32, 160, 48); - DisplayManager.renderer.glFillRect(Main.screenSize[0] / 2f - 24, Main.screenSize[1] / 2f - loadingTextTranslation, 48, 48, 160, 32, 48, 48); + DisplayManager.INSTANCE.guiSkin.use(DisplayManager.INSTANCE.engine); + DisplayManager.INSTANCE.renderer.glColor3i(255, 255, 255); + DisplayManager.INSTANCE.renderer.glFillRect(Main.screenSize[0] / 2f - 80, Main.screenSize[1] / 2f - 64, 160, 48, 0, 32, 160, 48); + DisplayManager.INSTANCE.renderer.glFillRect(Main.screenSize[0] / 2f - 24, Main.screenSize[1] / 2f - loadingTextTranslation, 48, 48, 160, 32, 48, 48); - DisplayManager.renderer.glFillRect(Main.screenSize[0] - 224, Main.screenSize[1] - 48, 224, 48, 0, 80, 224, 48); - DisplayManager.renderer.glFillRect(Main.screenSize[0] - 160 - 24 - 224, Main.screenSize[1] - 48, 160, 48, 224, 80, 160, 48); + DisplayManager.INSTANCE.renderer.glFillRect(Main.screenSize[0] - 224, Main.screenSize[1] - 48, 224, 48, 0, 80, 224, 48); + DisplayManager.INSTANCE.renderer.glFillRect(Main.screenSize[0] - 160 - 24 - 224, Main.screenSize[1] - 48, 160, 48, 224, 80, 160, 48); } diff --git a/src/main/java/org/warp/picalculator/gui/screens/MarioScreen.java b/src/main/java/org/warp/picalculator/gui/screens/MarioScreen.java index cb0c3055..269099cf 100755 --- a/src/main/java/org/warp/picalculator/gui/screens/MarioScreen.java +++ b/src/main/java/org/warp/picalculator/gui/screens/MarioScreen.java @@ -2,15 +2,21 @@ package org.warp.picalculator.gui.screens; import java.io.IOException; +import org.warp.picalculator.Main; import org.warp.picalculator.device.Keyboard; import org.warp.picalculator.device.Keyboard.Key; import org.warp.picalculator.gui.DisplayManager; +import org.warp.picalculator.gui.graphicengine.BinaryFont; import org.warp.picalculator.gui.graphicengine.Skin; public class MarioScreen extends Screen { - private Skin skin; - private Skin groundskin; + private static Skin skin; + private static Skin groundskin; + private static BinaryFont easterfont; + private static Skin easterskin; + private int easterNum = 0; + private int easterMax = 21; private boolean errored; public float[] marioPos = new float[] { 30, 0 }; public float[] marioForces = new float[] { 0, 0 }; @@ -31,8 +37,18 @@ public class MarioScreen extends Screen { @Override public void init() { try { - skin = DisplayManager.engine.loadSkin("marioskin.png"); - groundskin = DisplayManager.engine.loadSkin("marioground.png"); + if (skin == null) + skin = DisplayManager.INSTANCE.engine.loadSkin("marioskin.png"); + if (groundskin == null) + groundskin = DisplayManager.INSTANCE.engine.loadSkin("marioground.png"); + if (easterfont == null) + try { + easterfont = DisplayManager.INSTANCE.engine.loadFont("easter"); + } catch (Exception ex) {} + if (easterskin == null) + try { + easterskin = DisplayManager.INSTANCE.engine.loadSkin("font_easter.png"); + } catch (Exception ex) {} } catch (final IOException e) { e.printStackTrace(); } @@ -112,57 +128,63 @@ public class MarioScreen extends Screen { } marioForces[0] *= 0.75; - DisplayManager.renderer.glClearColor(0xff9290ff); + DisplayManager.INSTANCE.renderer.glClearColor(0xff9290ff); } } @Override public void render() { if (errored) { - DisplayManager.renderer.glDrawStringLeft(0, 20, "ERROR"); + DisplayManager.INSTANCE.renderer.glDrawStringLeft(0, 20, "ERROR"); } else { - DisplayManager.fonts[0].use(DisplayManager.engine); - groundskin.use(DisplayManager.engine); - DisplayManager.renderer.glFillRect(16 * 0, 25 + 25, 16, 16, 0, 0, 16, 16); - DisplayManager.renderer.glFillRect(16 * 1, 25 + 25, 16, 16, 0, 0, 16, 16); - DisplayManager.renderer.glFillRect(16 * 2, 25 + 25, 16, 16, 0, 0, 16, 16); - DisplayManager.renderer.glFillRect(16 * 3, 25 + 25, 16, 16, 0, 0, 16, 16); - DisplayManager.renderer.glFillRect(16 * 4, 25 + 25, 16, 16, 0, 0, 16, 16); - DisplayManager.renderer.glFillRect(16 * 5, 25 + 25, 16, 16, 0, 0, 16, 16); - DisplayManager.renderer.glFillRect(16 * 6, 25 + 25, 16, 16, 0, 0, 16, 16); - DisplayManager.renderer.glFillRect(16 * 7, 25 + 25, 16, 16, 0, 0, 16, 16); - DisplayManager.renderer.glFillRect(16 * 8, 25 + 25, 16, 16, 0, 0, 16, 16); + groundskin.use(DisplayManager.INSTANCE.engine); + DisplayManager.INSTANCE.renderer.glFillRect(16 * 0, 25 + 25, 16, 16, 0, 0, 16, 16); + DisplayManager.INSTANCE.renderer.glFillRect(16 * 1, 25 + 25, 16, 16, 0, 0, 16, 16); + DisplayManager.INSTANCE.renderer.glFillRect(16 * 2, 25 + 25, 16, 16, 0, 0, 16, 16); + DisplayManager.INSTANCE.renderer.glFillRect(16 * 3, 25 + 25, 16, 16, 0, 0, 16, 16); + DisplayManager.INSTANCE.renderer.glFillRect(16 * 4, 25 + 25, 16, 16, 0, 0, 16, 16); + DisplayManager.INSTANCE.renderer.glFillRect(16 * 5, 25 + 25, 16, 16, 0, 0, 16, 16); + DisplayManager.INSTANCE.renderer.glFillRect(16 * 6, 25 + 25, 16, 16, 0, 0, 16, 16); + DisplayManager.INSTANCE.renderer.glFillRect(16 * 7, 25 + 25, 16, 16, 0, 0, 16, 16); + DisplayManager.INSTANCE.renderer.glFillRect(16 * 8, 25 + 25, 16, 16, 0, 0, 16, 16); - DisplayManager.renderer.glFillRect(16 * 0, 25 + 25 + 16 * 1, 16, 16, 0, 0, 16, 16); - DisplayManager.renderer.glFillRect(16 * 1, 25 + 25 + 16 * 1, 16, 16, 0, 0, 16, 16); - DisplayManager.renderer.glFillRect(16 * 2, 25 + 25 + 16 * 1, 16, 16, 0, 0, 16, 16); - DisplayManager.renderer.glFillRect(16 * 3, 25 + 25 + 16 * 1, 16, 16, 0, 0, 16, 16); - DisplayManager.renderer.glFillRect(16 * 4, 25 + 25 + 16 * 1, 16, 16, 0, 0, 16, 16); - DisplayManager.renderer.glFillRect(16 * 5, 25 + 25 + 16 * 1, 16, 16, 0, 0, 16, 16); - DisplayManager.renderer.glFillRect(16 * 6, 25 + 25 + 16 * 1, 16, 16, 0, 0, 16, 16); - DisplayManager.renderer.glFillRect(16 * 7, 25 + 25 + 16 * 1, 16, 16, 0, 0, 16, 16); - DisplayManager.renderer.glFillRect(16 * 8, 25 + 25 + 16 * 1, 16, 16, 0, 0, 16, 16); + DisplayManager.INSTANCE.renderer.glFillRect(16 * 0, 25 + 25 + 16 * 1, 16, 16, 0, 0, 16, 16); + DisplayManager.INSTANCE.renderer.glFillRect(16 * 1, 25 + 25 + 16 * 1, 16, 16, 0, 0, 16, 16); + DisplayManager.INSTANCE.renderer.glFillRect(16 * 2, 25 + 25 + 16 * 1, 16, 16, 0, 0, 16, 16); + DisplayManager.INSTANCE.renderer.glFillRect(16 * 3, 25 + 25 + 16 * 1, 16, 16, 0, 0, 16, 16); + DisplayManager.INSTANCE.renderer.glFillRect(16 * 4, 25 + 25 + 16 * 1, 16, 16, 0, 0, 16, 16); + DisplayManager.INSTANCE.renderer.glFillRect(16 * 5, 25 + 25 + 16 * 1, 16, 16, 0, 0, 16, 16); + DisplayManager.INSTANCE.renderer.glFillRect(16 * 6, 25 + 25 + 16 * 1, 16, 16, 0, 0, 16, 16); + DisplayManager.INSTANCE.renderer.glFillRect(16 * 7, 25 + 25 + 16 * 1, 16, 16, 0, 0, 16, 16); + DisplayManager.INSTANCE.renderer.glFillRect(16 * 8, 25 + 25 + 16 * 1, 16, 16, 0, 0, 16, 16); // EASTER EGG -// glSetFont(PIDisplay.fonts[4]); -// glColor(0xFF000000); -// glDrawStringRight(0, Main.screenSize[1]-glGetCurrentFontHeight(), "A"); -// glColor(0xFF800000); -// glDrawStringRight(0, Main.screenSize[1]-glGetCurrentFontHeight(), "B"); -// glColor(0xFFeea28e); -// glDrawStringRight(0, Main.screenSize[1]-glGetCurrentFontHeight(), "C"); -// glColor(0xFFee7255); -// glDrawStringRight(0, Main.screenSize[1]-glGetCurrentFontHeight(), "D"); -// glColor(0xFFeac0b0); -// glDrawStringRight(0, Main.screenSize[1]-glGetCurrentFontHeight(), "E"); -// glColor(0xFFf3d8ce); -// glDrawStringRight(0, Main.screenSize[1]-glGetCurrentFontHeight(), "F"); -// glColor(0xffede7); -// glDrawStringRight(0, Main.screenSize[1]-glGetCurrentFontHeight(), "G"); + if (easterfont != null) { + easterfont.use(DisplayManager.INSTANCE.engine); + DisplayManager.INSTANCE.renderer.glColor(0xFF000000); + DisplayManager.INSTANCE.renderer.glDrawStringRight(Main.screenSize[0], DisplayManager.INSTANCE.engine.getHeight() - easterfont.getCharacterHeight(), "A"); + DisplayManager.INSTANCE.renderer.glColor(0xFF800000); + DisplayManager.INSTANCE.renderer.glDrawStringRight(Main.screenSize[0], DisplayManager.INSTANCE.engine.getHeight() - easterfont.getCharacterHeight(), "B"); + DisplayManager.INSTANCE.renderer.glColor(0xFFeea28e); + DisplayManager.INSTANCE.renderer.glDrawStringRight(Main.screenSize[0], DisplayManager.INSTANCE.engine.getHeight() - easterfont.getCharacterHeight(), "C"); + DisplayManager.INSTANCE.renderer.glColor(0xFFee7255); + DisplayManager.INSTANCE.renderer.glDrawStringRight(Main.screenSize[0], DisplayManager.INSTANCE.engine.getHeight() - easterfont.getCharacterHeight(), "D"); + DisplayManager.INSTANCE.renderer.glColor(0xFFeac0b0); + DisplayManager.INSTANCE.renderer.glDrawStringRight(Main.screenSize[0], DisplayManager.INSTANCE.engine.getHeight() - easterfont.getCharacterHeight(), "E"); + DisplayManager.INSTANCE.renderer.glColor(0xFFf3d8ce); + DisplayManager.INSTANCE.renderer.glDrawStringRight(Main.screenSize[0], DisplayManager.INSTANCE.engine.getHeight() - easterfont.getCharacterHeight(), "F"); + DisplayManager.INSTANCE.renderer.glColor(0xFFffede7); + DisplayManager.INSTANCE.renderer.glDrawStringRight(Main.screenSize[0], DisplayManager.INSTANCE.engine.getHeight() - easterfont.getCharacterHeight(), "G"); + } + if (easterskin != null) { + easterskin.use(DisplayManager.INSTANCE.engine); + DisplayManager.INSTANCE.renderer.glFillRect(0, Main.screenSize[1] - 128, 224, 128, easterNum * 224, 0, 224, 128); + easterNum = (easterNum < easterMax) ? easterNum + 1 : 0; + } //DRAW MARIO - skin.use(DisplayManager.engine); - DisplayManager.renderer.glFillRect(getPosX() - 18, 25 + getPosY(), 35, 27, 35 * (marioSkinPos[0] + 1), 27 * marioSkinPos[1], 35, 27); + skin.use(DisplayManager.INSTANCE.engine); + DisplayManager.INSTANCE.renderer.glFillRect(getPosX() - 18, 25 + getPosY(), 35, 27, 35 * (marioSkinPos[0] + 1), 27 * marioSkinPos[1], 35, 27); // PIDisplay.renderer.glDrawSkin(getPosX() - 18, 25 + getPosY(), 35 * (marioSkinPos[0] + (flipped ? 2 : 1)), 27 * marioSkinPos[1], 35 * (marioSkinPos[0] + (flipped ? 1 : 2)), 27 * (marioSkinPos[1] + 1), true); } } diff --git a/src/main/java/org/warp/picalculator/gui/screens/MathInputScreen.java b/src/main/java/org/warp/picalculator/gui/screens/MathInputScreen.java index 0ccd9986..9cbe5e90 100755 --- a/src/main/java/org/warp/picalculator/gui/screens/MathInputScreen.java +++ b/src/main/java/org/warp/picalculator/gui/screens/MathInputScreen.java @@ -3,10 +3,7 @@ package org.warp.picalculator.gui.screens; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; -import java.util.Collections; -import java.util.LinkedHashSet; import java.util.List; -import java.util.Set; import org.warp.picalculator.Error; import org.warp.picalculator.Errors; @@ -34,7 +31,6 @@ import org.warp.picalculator.math.functions.Expression; import org.warp.picalculator.math.functions.Number; import org.warp.picalculator.math.functions.Variable; import org.warp.picalculator.math.functions.Variable.VariableValue; -import org.warp.picalculator.math.functions.equations.Equation; import org.warp.picalculator.math.parser.MathParser; import it.unimi.dsi.fastutil.objects.ObjectArrayList; @@ -59,7 +55,7 @@ public class MathInputScreen extends Screen { calc = new MathContext(); try { - BlockContainer.initializeFonts(DisplayManager.engine.loadFont("ex"), DisplayManager.engine.loadFont("big")); + BlockContainer.initializeFonts(DisplayManager.INSTANCE.engine.loadFont("ex"), DisplayManager.INSTANCE.engine.loadFont("big")); } catch (final IOException e) { e.printStackTrace(); System.exit(1); @@ -79,10 +75,10 @@ public class MathInputScreen extends Screen { @Override public void beforeRender(float dt) { - if (DisplayManager.error == null) { - DisplayManager.renderer.glClearColor(0xFFc5c2af); + if (DisplayManager.INSTANCE.error == null) { + DisplayManager.INSTANCE.renderer.glClearColor(0xFFc5c2af); } else { - DisplayManager.renderer.glClearColor(0xFFDC3C32); + DisplayManager.INSTANCE.renderer.glClearColor(0xFFDC3C32); } if (userInput.beforeRender(dt)) { mustRefresh = true; @@ -93,7 +89,7 @@ public class MathInputScreen extends Screen { @Override public void renderStatusbar() { - final Renderer renderer = DisplayManager.renderer; + final Renderer renderer = DisplayManager.INSTANCE.renderer; renderer.glColor3f(1, 1, 1); final int pos = 2; final int spacersNumb = 1; @@ -108,15 +104,15 @@ public class MathInputScreen extends Screen { @Override public void render() { - fontBig.use(DisplayManager.engine); + fontBig.use(DisplayManager.INSTANCE.engine); final int textColor = 0xFF000000; final int padding = 4; - DisplayManager.renderer.glColor(textColor); + DisplayManager.INSTANCE.renderer.glColor(textColor); - userInput.draw(DisplayManager.engine, DisplayManager.renderer, padding, padding + 20); + userInput.draw(DisplayManager.INSTANCE.engine, DisplayManager.INSTANCE.renderer, padding, padding + 20); if (!result.isContentEmpty()) { - result.draw(DisplayManager.engine, DisplayManager.renderer, DisplayManager.engine.getWidth() - result.getWidth() - 2, DisplayManager.engine.getHeight() - result.getHeight() - 2); + result.draw(DisplayManager.INSTANCE.engine, DisplayManager.INSTANCE.renderer, DisplayManager.INSTANCE.engine.getWidth() - result.getWidth() - 2, DisplayManager.INSTANCE.engine.getHeight() - result.getHeight() - 2); } } @@ -151,41 +147,41 @@ public class MathInputScreen extends Screen { switch (k) { case STEP: - // if (newExpression.length() > 0) { - // if (firstStep) { - // try { - // try { - // interpreta(true); - // showVariablesDialog(() -> { - // currentExpression = newExpression; - // calc.f2 = calc.f; - // firstStep = false; - // step(); - // }); - // } catch (final Exception ex) { - // if (Utils.debugOn) { - // ex.printStackTrace(); - // } - // throw new Error(Errors.SYNTAX_ERROR); - // } - // } catch (final Error e) { - // final StringWriter sw = new StringWriter(); - // final PrintWriter pw = new PrintWriter(sw); - // e.printStackTrace(pw); - // d.errorStackTrace = sw.toString().toUpperCase().replace("\t", " ").replace("\r", "").split("\n"); - // DisplayManager.error = e.id.toString(); - // System.err.println(e.id); - // } - // } else { - // step(); - // } - // } - // return true; + // if (newExpression.length() > 0) { + // if (firstStep) { + // try { + // try { + // interpreta(true); + // showVariablesDialog(() -> { + // currentExpression = newExpression; + // calc.f2 = calc.f; + // firstStep = false; + // step(); + // }); + // } catch (final Exception ex) { + // if (Utils.debugOn) { + // ex.printStackTrace(); + // } + // throw new Error(Errors.SYNTAX_ERROR); + // } + // } catch (final Error e) { + // final StringWriter sw = new StringWriter(); + // final PrintWriter pw = new PrintWriter(sw); + // e.printStackTrace(pw); + // d.errorStackTrace = sw.toString().toUpperCase().replace("\t", " ").replace("\r", "").split("\n"); + // DisplayManager.INSTANCE.error = e.id.toString(); + // System.err.println(e.id); + // } + // } else { + // step(); + // } + // } + // return true; case SIMPLIFY: - if (DisplayManager.error != null) { + if (DisplayManager.INSTANCE.error != null) { //TODO: make the error management a global API rather than being relegated to this screen. Utils.out.println(1, "Resetting after error..."); - DisplayManager.error = null; + DisplayManager.INSTANCE.error = null; calc.f = null; calc.f2 = null; calc.resultsCount = 0; @@ -215,7 +211,7 @@ public class MathInputScreen extends Screen { if (f.isSimplified() == false) { done = false; if (f instanceof Expression) { - ObjectArrayList fncResult = ((Expression)f).solve(); + ObjectArrayList fncResult = ((Expression) f).solve(); for (Function resultItem : fncResult) { newResultExpressions.add(resultItem); } @@ -235,16 +231,16 @@ public class MathInputScreen extends Screen { resultExpressions = newResultExpressions; stop++; } - Utils.out.println(2, "INPUT: "+expr); + Utils.out.println(2, "INPUT: " + expr); for (Function rr : resultExpressions) { Utils.out.println(1, "RESULT: " + rr.toString()); } ObjectArrayList> resultBlocks = MathParser.parseOutput(calc, resultExpressions); result.setContentAsMultipleGroups(resultBlocks); - // showVariablesDialog(() -> { - // currentExpression = newExpression; - // simplify(); - // }); + // showVariablesDialog(() -> { + // currentExpression = newExpression; + // simplify(); + // }); } } catch (final Exception ex) { if (Utils.debugOn) { @@ -257,7 +253,7 @@ public class MathInputScreen extends Screen { final PrintWriter pw = new PrintWriter(sw); e.printStackTrace(pw); d.errorStackTrace = sw.toString().toUpperCase().replace("\t", " ").replace("\r", "").split("\n"); - DisplayManager.error = e.id.toString(); + DisplayManager.INSTANCE.error = e.id.toString(); System.err.println(e.id); } return true; @@ -373,9 +369,9 @@ public class MathInputScreen extends Screen { case RESET: userInput.clear(); result.clear(); - if (DisplayManager.error != null) { + if (DisplayManager.INSTANCE.error != null) { Utils.out.println(1, "Resetting after error..."); - DisplayManager.error = null; + DisplayManager.INSTANCE.error = null; } return true; case SURD_MODE: @@ -387,24 +383,24 @@ public class MathInputScreen extends Screen { DisplayManager.INSTANCE.setScreen(new EmptyScreen()); return true; case HISTORY_BACK: - // if (DisplayManager.INSTANCE.canGoBack()) { - // if (currentExpression != null && currentExpression.length() > 0 & DisplayManager.sessions[DisplayManager.currentSession + 1] instanceof MathInputScreen) { - // newExpression = currentExpression; - // try { - // interpreta(true); - // } catch (final Error e) {} - // } - // } + // if (DisplayManager.INSTANCE.canGoBack()) { + // if (currentExpression != null && currentExpression.length() > 0 & DisplayManager.INSTANCE.sessions[DisplayManager.INSTANCE.currentSession + 1] instanceof MathInputScreen) { + // newExpression = currentExpression; + // try { + // interpreta(true); + // } catch (final Error e) {} + // } + // } return false; case HISTORY_FORWARD: - // if (DisplayManager.INSTANCE.canGoForward()) { - // if (currentExpression != null && currentExpression.length() > 0 & DisplayManager.sessions[DisplayManager.currentSession - 1] instanceof MathInputScreen) { - // newExpression = currentExpression; - // try { - // interpreta(true); - // } catch (final Error e) {} - // } - // } + // if (DisplayManager.INSTANCE.canGoForward()) { + // if (currentExpression != null && currentExpression.length() > 0 & DisplayManager.INSTANCE.sessions[DisplayManager.INSTANCE.currentSession - 1] instanceof MathInputScreen) { + // newExpression = currentExpression; + // try { + // interpreta(true); + // } catch (final Error e) {} + // } + // } return false; case debug_DEG: if (calc.angleMode.equals(AngleMode.DEG) == false) { @@ -459,7 +455,7 @@ public class MathInputScreen extends Screen { final PrintWriter pw = new PrintWriter(sw); e.printStackTrace(pw); d.errorStackTrace = sw.toString().toUpperCase().replace("\t", " ").replace("\r", "").split("\n"); - DisplayManager.error = e.id.toString(); + DisplayManager.INSTANCE.error = e.id.toString(); System.err.println(e.id); } return null; @@ -491,7 +487,7 @@ public class MathInputScreen extends Screen { partialResults.clear(); } } - + if (results.size() == 0) { calc.resultsCount = 0; } else { @@ -516,7 +512,7 @@ public class MathInputScreen extends Screen { final PrintWriter pw = new PrintWriter(sw); e.printStackTrace(pw); d.errorStackTrace = sw.toString().toUpperCase().replace("\t", " ").replace("\r", "").split("\n"); - DisplayManager.error = e.id.toString(); + DisplayManager.INSTANCE.error = e.id.toString(); System.err.println(e.id); } */ @@ -533,7 +529,7 @@ public class MathInputScreen extends Screen { return; } } - + final ObjectArrayList results = solveExpression(calc.f); if (results.size() == 0) { calc.resultsCount = 0; @@ -558,7 +554,7 @@ public class MathInputScreen extends Screen { final PrintWriter pw = new PrintWriter(sw); e.printStackTrace(pw); d.errorStackTrace = sw.toString().toUpperCase().replace("\t", " ").replace("\r", "").split("\n"); - DisplayManager.error = e.id.toString(); + DisplayManager.INSTANCE.error = e.id.toString(); System.err.println(e.id); } */ @@ -618,7 +614,7 @@ public class MathInputScreen extends Screen { final ChooseVariableValueScreen cvs = new ChooseVariableValueScreen(this, new VariableValue((Variable) f, new Number(calc, 0))); DisplayManager.INSTANCE.setScreen(cvs); try { - DisplayManager.screenChange.acquire(); + DisplayManager.INSTANCE.screenChange.acquire(); } catch (final InterruptedException e) {} if (cvs.resultNumberValue == null) { cancelled = true; diff --git a/src/main/java/org/warp/picalculator/gui/screens/SolveEquationScreen.java b/src/main/java/org/warp/picalculator/gui/screens/SolveEquationScreen.java index 4eb1fa16..b0dab2ac 100755 --- a/src/main/java/org/warp/picalculator/gui/screens/SolveEquationScreen.java +++ b/src/main/java/org/warp/picalculator/gui/screens/SolveEquationScreen.java @@ -24,12 +24,12 @@ public class SolveEquationScreen extends Screen { @Override public void render() { - DisplayManager.renderer.glColor4i(0, 0, 0, 64); - DisplayManager.renderer.glDrawStringCenter(Main.screenSize[0] / 2 + 1, Main.screenSize[1] / 4, "WORK IN PROGRESS. THIS SCREEN MUST HAVE A GUI TO SELECT THE VARIABLE TO SOLVE."); - DisplayManager.renderer.glDrawStringCenter(Main.screenSize[0] / 2, Main.screenSize[1] / 4 + 1, "WORK IN PROGRESS. THIS SCREEN MUST HAVE A GUI TO SELECT THE VARIABLE TO SOLVE."); - DisplayManager.renderer.glDrawStringCenter(Main.screenSize[0] / 2 + 1, Main.screenSize[1] / 4 + 1, "WORK IN PROGRESS. THIS SCREEN MUST HAVE A GUI TO SELECT THE VARIABLE TO SOLVE."); - DisplayManager.renderer.glColor3i(255, 0, 0); - DisplayManager.renderer.glDrawStringCenter(Main.screenSize[0] / 2, Main.screenSize[1] / 4, "WORK IN PROGRESS. THIS SCREEN MUST HAVE A GUI TO SELECT THE VARIABLE TO SOLVE."); + DisplayManager.INSTANCE.renderer.glColor4i(0, 0, 0, 64); + DisplayManager.INSTANCE.renderer.glDrawStringCenter(Main.screenSize[0] / 2 + 1, Main.screenSize[1] / 4, "WORK IN PROGRESS. THIS SCREEN MUST HAVE A GUI TO SELECT THE VARIABLE TO SOLVE."); + DisplayManager.INSTANCE.renderer.glDrawStringCenter(Main.screenSize[0] / 2, Main.screenSize[1] / 4 + 1, "WORK IN PROGRESS. THIS SCREEN MUST HAVE A GUI TO SELECT THE VARIABLE TO SOLVE."); + DisplayManager.INSTANCE.renderer.glDrawStringCenter(Main.screenSize[0] / 2 + 1, Main.screenSize[1] / 4 + 1, "WORK IN PROGRESS. THIS SCREEN MUST HAVE A GUI TO SELECT THE VARIABLE TO SOLVE."); + DisplayManager.INSTANCE.renderer.glColor3i(255, 0, 0); + DisplayManager.INSTANCE.renderer.glDrawStringCenter(Main.screenSize[0] / 2, Main.screenSize[1] / 4, "WORK IN PROGRESS. THIS SCREEN MUST HAVE A GUI TO SELECT THE VARIABLE TO SOLVE."); } @Override diff --git a/src/main/java/org/warp/picalculator/math/Function.java b/src/main/java/org/warp/picalculator/math/Function.java index 2ded9d18..d75ab172 100755 --- a/src/main/java/org/warp/picalculator/math/Function.java +++ b/src/main/java/org/warp/picalculator/math/Function.java @@ -68,9 +68,10 @@ public interface Function { /** * - * @param context Mathematical Context + * @param context + * Mathematical Context * @return An ArrayList of parsed Blocks - * @throws Error + * @throws Error */ public ObjectArrayList toBlock(MathContext context) throws Error; } diff --git a/src/main/java/org/warp/picalculator/math/FunctionOperator.java b/src/main/java/org/warp/picalculator/math/FunctionOperator.java index 3a0cb3b6..ede9e7e4 100755 --- a/src/main/java/org/warp/picalculator/math/FunctionOperator.java +++ b/src/main/java/org/warp/picalculator/math/FunctionOperator.java @@ -177,9 +177,9 @@ public abstract class FunctionOperator implements Function { @Override public abstract boolean equals(Object o); - + @Override public String toString() { - return this.getClass().getSimpleName()+"("+this.getParameter1()+","+this.getParameter2()+")"; + return this.getClass().getSimpleName() + "(" + this.getParameter1() + "," + this.getParameter2() + ")"; } } diff --git a/src/main/java/org/warp/picalculator/math/MathContext.java b/src/main/java/org/warp/picalculator/math/MathContext.java index ab9a4154..cd03fd54 100755 --- a/src/main/java/org/warp/picalculator/math/MathContext.java +++ b/src/main/java/org/warp/picalculator/math/MathContext.java @@ -1,16 +1,7 @@ package org.warp.picalculator.math; -import java.math.BigInteger; -import java.util.List; - import org.warp.picalculator.Error; -import org.warp.picalculator.Errors; -import org.warp.picalculator.Utils; -import org.warp.picalculator.math.functions.Expression; -import org.warp.picalculator.math.functions.Number; import org.warp.picalculator.math.functions.Variable.VariableValue; -import org.warp.picalculator.math.functions.equations.Equation; -import org.warp.picalculator.math.functions.equations.EquationsSystem; import it.unimi.dsi.fastutil.objects.ObjectArrayList; diff --git a/src/main/java/org/warp/picalculator/math/functions/Division.java b/src/main/java/org/warp/picalculator/math/functions/Division.java index 9470a3b5..fcd835c1 100755 --- a/src/main/java/org/warp/picalculator/math/functions/Division.java +++ b/src/main/java/org/warp/picalculator/math/functions/Division.java @@ -3,16 +3,13 @@ package org.warp.picalculator.math.functions; import java.math.BigInteger; import java.util.LinkedList; -import org.nevec.rjm.BigIntegerMath; import org.warp.picalculator.Error; import org.warp.picalculator.gui.expression.blocks.Block; -import org.warp.picalculator.gui.expression.blocks.BlockChar; import org.warp.picalculator.gui.expression.blocks.BlockContainer; import org.warp.picalculator.gui.expression.blocks.BlockDivision; import org.warp.picalculator.math.Function; import org.warp.picalculator.math.FunctionOperator; import org.warp.picalculator.math.MathContext; -import org.warp.picalculator.math.MathematicalSymbols; import org.warp.picalculator.math.rules.FractionsRule1; import org.warp.picalculator.math.rules.FractionsRule11; import org.warp.picalculator.math.rules.FractionsRule12; diff --git a/src/main/java/org/warp/picalculator/math/functions/Expression.java b/src/main/java/org/warp/picalculator/math/functions/Expression.java index 506022b9..ae407cd4 100755 --- a/src/main/java/org/warp/picalculator/math/functions/Expression.java +++ b/src/main/java/org/warp/picalculator/math/functions/Expression.java @@ -1,25 +1,14 @@ package org.warp.picalculator.math.functions; -import static org.warp.picalculator.Utils.ArrayToRegex; -import static org.warp.picalculator.Utils.concat; - -import java.math.BigDecimal; import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import org.warp.picalculator.Error; -import org.warp.picalculator.Errors; -import org.warp.picalculator.Utils; import org.warp.picalculator.gui.expression.blocks.Block; import org.warp.picalculator.gui.expression.blocks.BlockContainer; import org.warp.picalculator.gui.expression.blocks.BlockParenthesis; import org.warp.picalculator.math.Function; -import org.warp.picalculator.math.FunctionDynamic; -import org.warp.picalculator.math.FunctionOperator; import org.warp.picalculator.math.FunctionSingle; import org.warp.picalculator.math.MathContext; -import org.warp.picalculator.math.MathematicalSymbols; import org.warp.picalculator.math.functions.trigonometry.ArcCosine; import org.warp.picalculator.math.functions.trigonometry.ArcSine; import org.warp.picalculator.math.functions.trigonometry.ArcTangent; @@ -49,12 +38,12 @@ public class Expression extends FunctionSingle { @Deprecated public Expression(MathContext root, String string, String debugSpaces, boolean initialParenthesis) throws Error { super(root); - + /* super(root); this.initialParenthesis = initialParenthesis; boolean isNumber = false; - + // Determine if the expression is already a number: // Determina se l'espressione è già un numero: try { @@ -63,12 +52,12 @@ public class Expression extends FunctionSingle { } catch (final NumberFormatException ex) { isNumber = false; } - + String processExpression = string; Utils.debug.println(debugSpaces + "•Analyzing expression:" + processExpression); - + isNumber = false; //TODO: rimuovere isNumber, alcune semplificazione come la divisione per zero altrimenti verrebbero saltate. - + if (isNumber) { // If the expression is already a number: // Se l'espressione è già un numero: @@ -79,10 +68,10 @@ public class Expression extends FunctionSingle { // Else prepare the expression: // Altrimenti prepara l'espressione: debugSpaces += " "; - + // IF the expression is not a number: // Se l'espressione non è già un numero: - + // Check if there are more than one equal symbol (=) // Controlla se ci sono più di un uguale (=) int equationsFound = 0; @@ -102,7 +91,7 @@ public class Expression extends FunctionSingle { if (equationsFound != systemsFound) { throw new Error(Errors.SYNTAX_ERROR); } - + //Solve the exceeding symbols ++ and -- // Correggi i segni ++ e -- in eccesso Pattern pattern = Pattern.compile("\\+\\++?|\\-\\-+?"); @@ -114,7 +103,7 @@ public class Expression extends FunctionSingle { processExpression = processExpression.substring(0, matcher.start(0)) + correzione + processExpression.substring(matcher.start(0) + matcher.group(0).length(), processExpression.length()); matcher = pattern.matcher(processExpression); } - + // Correct the exceeding symbols +- and -+ // Correggi i segni +- e -+ in eccesso pattern = Pattern.compile("\\+\\-|\\-\\+"); @@ -125,25 +114,25 @@ public class Expression extends FunctionSingle { processExpression = processExpression.substring(0, matcher.start(0)) + correzione + processExpression.substring(matcher.start(0) + matcher.group(0).length(), processExpression.length()); matcher = pattern.matcher(processExpression); } - + // Rimuovi i segni appena dopo le parentesi if (processExpression.contains("(+")) { symbolsChanged = true; processExpression = processExpression.replace("(+", "("); } - -// // Cambia i segni appena prima le parentesi -// if (processExpression.contains("-(")) { -// symbolsChanged = true; -// processExpression = processExpression.replace("-(", "-1*("); -// } - + + // // Cambia i segni appena prima le parentesi + // if (processExpression.contains("-(")) { + // symbolsChanged = true; + // processExpression = processExpression.replace("-(", "-1*("); + // } + // Rimuovi i segni appena dopo l'inizio if (processExpression.startsWith("+")) { symbolsChanged = true; processExpression = processExpression.substring(1, processExpression.length()); } - + // Rimuovi i + in eccesso pattern = Pattern.compile("[" + ArrayToRegex(Utils.add(concat(MathematicalSymbols.signums(true), MathematicalSymbols.functions), '(')) + "]\\+[^" + ArrayToRegex(concat(concat(MathematicalSymbols.signums(true), MathematicalSymbols.functions), new char[] { '(', ')' })) + "]+?[" + ArrayToRegex(concat(MathematicalSymbols.signums(true), MathematicalSymbols.functions)) + "]|[" + ArrayToRegex(concat(MathematicalSymbols.signums(true), MathematicalSymbols.functions)) + "]+?\\+[^" + ArrayToRegex(concat(concat(MathematicalSymbols.signums(true), MathematicalSymbols.functions), new char[] { '(', ')' })) + "]"); matcher = pattern.matcher(processExpression); @@ -154,10 +143,10 @@ public class Expression extends FunctionSingle { processExpression = processExpression.substring(0, matcher.start(0) + 1) + correzione + processExpression.substring(matcher.start(0) + matcher.group(0).length(), processExpression.length()); matcher = pattern.matcher(processExpression); } - + // Correggi i segni - in − processExpression = processExpression.replace('-', MathematicalSymbols.SUBTRACTION); - + // Correggi i segni − dopo di espressioni o funzioni SN in - pattern = Pattern.compile("[" + Utils.ArrayToRegex(concat(concat(MathematicalSymbols.functions, new char[] { MathematicalSymbols.PARENTHESIS_OPEN }), MathematicalSymbols.signums(true))) + "]" + MathematicalSymbols.SUBTRACTION); matcher = pattern.matcher(processExpression); @@ -167,30 +156,30 @@ public class Expression extends FunctionSingle { processExpression = processExpression.substring(0, matcher.start(0) + 1) + correzione + processExpression.substring(matcher.start(0) + 2, processExpression.length()); matcher = pattern.matcher(processExpression); } - + // Cambia il segno iniziale − in - if (processExpression.startsWith("−")) { symbolsChanged = true; processExpression = "-" + processExpression.substring(1, processExpression.length()); } - + if (symbolsChanged) { Utils.debug.println(debugSpaces + "•Resolved signs:" + processExpression); } - -// // Aggiungi le parentesi implicite per le potenze con una incognita -// pattern = Pattern.compile("(? oldFunctionsList = new ObjectArrayList<>(); for (int i = 0; i < oldFunctionsArray.length; i++) { @@ -437,10 +426,10 @@ public class Expression extends FunctionSingle { oldFunctionsList.add(funzione); } } - + if (oldFunctionsList.size() > 1) { Utils.debug.println(debugSpaces + " •Correcting classes:"); - + int before = 0; String step = "SN Functions"; int n = 0; @@ -457,9 +446,9 @@ public class Expression extends FunctionSingle { } else if (Utils.areThereEmptySums(oldFunctionsList)) { step = "sums"; // QUINTA FASE } else { -// fase = "errore"; + // fase = "errore"; System.out.println("WARN: ---> POSSIBILE ERRORE????? <---");// BOH -// throw new Errore(Errori.SYNTAX_ERROR); + // throw new Errore(Errori.SYNTAX_ERROR); while (oldFunctionsList.size() > 1) { oldFunctionsList.set(0, new Multiplication(root, oldFunctionsList.get(0), oldFunctionsList.remove(1))); } @@ -471,18 +460,18 @@ public class Expression extends FunctionSingle { if (step != "SN Functions") { if ((step == "sums" && (funzioneTMP instanceof Sum || funzioneTMP instanceof SumSubtraction || funzioneTMP instanceof Subtraction) == true && ((funzioneTMP instanceof FunctionSingle && ((FunctionSingle) funzioneTMP).getParameter() == null) || (funzioneTMP instanceof FunctionOperator && ((FunctionOperator) funzioneTMP).getParameter1() == null && ((FunctionOperator) funzioneTMP).getParameter2() == null) || (!(funzioneTMP instanceof FunctionSingle) && !(funzioneTMP instanceof FunctionOperator)))) || (step.equals("multiplications") && ((funzioneTMP instanceof Multiplication) || (funzioneTMP instanceof Division)) && ((FunctionOperator) funzioneTMP).getParameter1() == null && ((FunctionOperator) funzioneTMP).getParameter2() == null) || (step == "NSN Functions" && (funzioneTMP instanceof Sum) == false && (funzioneTMP instanceof SumSubtraction) == false && (funzioneTMP instanceof Subtraction) == false && (funzioneTMP instanceof Multiplication) == false && (funzioneTMP instanceof Division) == false && ((funzioneTMP instanceof FunctionSingle && ((FunctionSingle) funzioneTMP).getParameter() == null) || (funzioneTMP instanceof FunctionOperator && ((FunctionOperator) funzioneTMP).getParameter1() == null && ((FunctionOperator) funzioneTMP).getParameter2() == null) || (!(funzioneTMP instanceof FunctionSingle) && !(funzioneTMP instanceof FunctionOperator))))) { change = true; - + if (i + 1 < oldFunctionsList.size() && i - 1 >= 0) { funzioneTMP = ((FunctionOperator) funzioneTMP).setParameter1(oldFunctionsList.get(i - 1)); funzioneTMP = ((FunctionOperator) funzioneTMP).setParameter2(oldFunctionsList.get(i + 1)); oldFunctionsList.set(i, funzioneTMP); - + // è importante togliere prima gli elementi // in fondo e poi quelli davanti, perché gli // indici scalano da destra a sinistra. oldFunctionsList.remove(i + 1); oldFunctionsList.remove(i - 1); - + Utils.debug.println(debugSpaces + " •Set variable to expression:" + funzioneTMP.getClass().getSimpleName()); try { Utils.debug.println(debugSpaces + " " + "var1=" + ((FunctionOperator) funzioneTMP).getParameter1().toString()); @@ -493,7 +482,7 @@ public class Expression extends FunctionSingle { try { Utils.debug.println(debugSpaces + " " + "(result)=" + ((FunctionOperator) funzioneTMP).toString()); } catch (final NullPointerException ex2) {} - + } else { throw new Error(Errors.SYNTAX_ERROR); } @@ -504,17 +493,17 @@ public class Expression extends FunctionSingle { if (i + 1 < oldFunctionsList.size()) { final Function nextFunc = oldFunctionsList.get(i + 1); if (nextFunc instanceof FunctionSingle && ((FunctionSingle) nextFunc).getParameter() == null) { - + } else { change = true; funzioneTMP = ((FunctionSingle) funzioneTMP).setParameter(nextFunc); oldFunctionsList.set(i, funzioneTMP); - + // è importante togliere prima gli elementi in // fondo e poi quelli davanti, perché gli indici // scalano da destra a sinistra. oldFunctionsList.remove(i + 1); - + Utils.debug.println(debugSpaces + " •Set variable to expression:" + funzioneTMP.getClass().getSimpleName()); final Function var = ((FunctionSingle) funzioneTMP).getParameter(); if (var == null) { @@ -545,14 +534,14 @@ public class Expression extends FunctionSingle { } else { super.functions = oldFunctionsList.toArray(new Function[oldFunctionsList.size()]); } - + dsl = debugSpaces.length(); debugSpaces = ""; for (int i = 0; i < dsl - 2; i++) { debugSpaces += " "; } Utils.debug.println(debugSpaces + "•Finished correcting classes."); - + final String result = toString(); Utils.debug.println(debugSpaces + "•Result:" + result); } diff --git a/src/main/java/org/warp/picalculator/math/functions/Multiplication.java b/src/main/java/org/warp/picalculator/math/functions/Multiplication.java index a7c59522..948dd653 100755 --- a/src/main/java/org/warp/picalculator/math/functions/Multiplication.java +++ b/src/main/java/org/warp/picalculator/math/functions/Multiplication.java @@ -113,15 +113,15 @@ public class Multiplication extends FunctionOperator { Function par2 = getParameter2(); ObjectArrayList sub1 = par1.toBlock(context); ObjectArrayList sub2 = par2.toBlock(context); - Block nearLeft = sub1.get(sub1.size()-1); + Block nearLeft = sub1.get(sub1.size() - 1); Block nearRight = sub2.get(0); - - if (par1 instanceof Number && ((Number)par1).equals(new Number(context, -1))) { + + if (par1 instanceof Number && ((Number) par1).equals(new Number(context, -1))) { result.add(new BlockChar(MathematicalSymbols.MINUS)); if (new Expression(context, par2).parenthesisNeeded()) { BlockParenthesis par = new BlockParenthesis(); ObjectArrayList parBlocks = par2.toBlock(context); - for (Block b: parBlocks) { + for (Block b : parBlocks) { par.getNumberContainer().appendBlockUnsafe(b); // Skips recomputeDimension } par.recomputeDimensions(); // Recompute dimensions after appendBlockUnsafe @@ -133,7 +133,7 @@ public class Multiplication extends FunctionOperator { } else { result.addAll(sub1); if ((nearLeft instanceof BlockChar && nearRight instanceof BlockChar) && !(par2 instanceof Negative)) { - + } else { result.add(new BlockChar(MathematicalSymbols.MULTIPLICATION)); } diff --git a/src/main/java/org/warp/picalculator/math/functions/Negative.java b/src/main/java/org/warp/picalculator/math/functions/Negative.java index 63a8e69d..0fb966f9 100755 --- a/src/main/java/org/warp/picalculator/math/functions/Negative.java +++ b/src/main/java/org/warp/picalculator/math/functions/Negative.java @@ -73,7 +73,7 @@ public class Negative extends FunctionSingle { public Negative clone() { return new Negative(mathContext, parameter); } - + @Override public ObjectArrayList toBlock(MathContext context) throws Error { ObjectArrayList blocks = new ObjectArrayList(); @@ -81,7 +81,7 @@ public class Negative extends FunctionSingle { if (new Expression(context, getParameter()).parenthesisNeeded()) { BlockParenthesis par = new BlockParenthesis(); ObjectArrayList parBlocks = getParameter().toBlock(context); - for (Block b: parBlocks) { + for (Block b : parBlocks) { par.getNumberContainer().appendBlockUnsafe(b); // Skips recomputeDimension } par.recomputeDimensions(); // Recompute dimensions after appendBlockUnsafe diff --git a/src/main/java/org/warp/picalculator/math/functions/Number.java b/src/main/java/org/warp/picalculator/math/functions/Number.java index f45d6ab6..2264bf40 100755 --- a/src/main/java/org/warp/picalculator/math/functions/Number.java +++ b/src/main/java/org/warp/picalculator/math/functions/Number.java @@ -197,7 +197,7 @@ public class Number implements Function { } return false; } - + /** * @author programmingpraxis * @return @@ -222,9 +222,9 @@ public class Number implements Function { } } - if (n.compareTo(two) < 0) { - throw new IllegalArgumentException("must be greater than one"); - } + if (n.compareTo(two) < 0) { + throw new IllegalArgumentException("must be greater than one"); + } while (n.mod(two).equals(BigInteger.ZERO)) { fs.add(two); @@ -260,7 +260,7 @@ public class Number implements Function { } for (char c : numberParts[1].toCharArray()) { bpec.appendBlockUnsafe(new BlockChar(c)); - }; + } ; bpec.recomputeDimensions(); bp.recomputeDimensions(); result.add(bp); diff --git a/src/main/java/org/warp/picalculator/math/functions/Root.java b/src/main/java/org/warp/picalculator/math/functions/Root.java index d67bf005..3ee61746 100755 --- a/src/main/java/org/warp/picalculator/math/functions/Root.java +++ b/src/main/java/org/warp/picalculator/math/functions/Root.java @@ -75,7 +75,7 @@ public class Root extends FunctionOperator { public Root clone() { return new Root(mathContext, parameter1, parameter2); } - + @Override public ObjectArrayList toBlock(MathContext context) throws Error { // TODO Auto-generated method stub diff --git a/src/main/java/org/warp/picalculator/math/functions/trigonometry/Sine.java b/src/main/java/org/warp/picalculator/math/functions/trigonometry/Sine.java index ba5165fe..6e159630 100755 --- a/src/main/java/org/warp/picalculator/math/functions/trigonometry/Sine.java +++ b/src/main/java/org/warp/picalculator/math/functions/trigonometry/Sine.java @@ -4,7 +4,6 @@ import org.nevec.rjm.BigDecimalMath; import org.warp.picalculator.Error; import org.warp.picalculator.gui.expression.blocks.Block; import org.warp.picalculator.gui.expression.blocks.BlockContainer; -import org.warp.picalculator.gui.expression.blocks.BlockParenthesis; import org.warp.picalculator.gui.expression.blocks.BlockSine; import org.warp.picalculator.math.AngleMode; import org.warp.picalculator.math.Function; diff --git a/src/main/java/org/warp/picalculator/math/parser/MathParser.java b/src/main/java/org/warp/picalculator/math/parser/MathParser.java index b6da18dc..d5b30949 100755 --- a/src/main/java/org/warp/picalculator/math/parser/MathParser.java +++ b/src/main/java/org/warp/picalculator/math/parser/MathParser.java @@ -22,11 +22,11 @@ import org.warp.picalculator.math.parser.features.FeatureSum; import org.warp.picalculator.math.parser.features.FeatureSumSubtraction; import org.warp.picalculator.math.parser.features.FeatureVariable; import org.warp.picalculator.math.parser.features.interfaces.Feature; -import org.warp.picalculator.math.parser.steps.JoinNumberAndVariables; import org.warp.picalculator.math.parser.steps.AddImplicitMultiplications; import org.warp.picalculator.math.parser.steps.FixMultiplicationsAndDivisions; import org.warp.picalculator.math.parser.steps.FixSingleFunctionArgs; import org.warp.picalculator.math.parser.steps.FixSumsAndSubtractions; +import org.warp.picalculator.math.parser.steps.JoinNumberAndVariables; import it.unimi.dsi.fastutil.objects.ObjectArrayList; @@ -40,11 +40,13 @@ public class MathParser { return result; } - public static ObjectArrayList> parseOutput(MathContext context, ObjectArrayList resultExpressions) throws Error { + public static ObjectArrayList> parseOutput(MathContext context, + ObjectArrayList resultExpressions) throws Error { final ObjectArrayList> result = new ObjectArrayList<>(); for (Function resultExpression : resultExpressions) { ObjectArrayList resultBlocks = resultExpression.toBlock(context); - if (resultBlocks == null) throw new Error(Errors.NOT_IMPLEMENTED, "Unknown function " + resultExpression.getClass().getSimpleName()); + if (resultBlocks == null) + throw new Error(Errors.NOT_IMPLEMENTED, "Unknown function " + resultExpression.getClass().getSimpleName()); result.add(resultBlocks); } return result; @@ -55,13 +57,14 @@ public class MathParser { features = fixFeatures(context, features); ObjectArrayList process = new ObjectArrayList<>(); - + for (final Feature f : features) { Function fnc = f.toFunction(context); - if (fnc == null) throw new Error(Errors.SYNTAX_ERROR, "\"" + f.getClass().getSimpleName() + "\" can't be converted into a Function!"); + if (fnc == null) + throw new Error(Errors.SYNTAX_ERROR, "\"" + f.getClass().getSimpleName() + "\" can't be converted into a Function!"); process.add(fnc); } - + process = fixStack(context, process); if (process.size() > 1) { @@ -71,14 +74,9 @@ public class MathParser { return process.get(0); } - private static ObjectArrayList fixStack(MathContext context, ObjectArrayList functionsList) throws Error { - final MathParserStep[] steps = new MathParserStep[] { - new JoinNumberAndVariables(context), - new FixSingleFunctionArgs(), - new FixMultiplicationsAndDivisions(), - new FixSumsAndSubtractions(), - new AddImplicitMultiplications(context), - }; + private static ObjectArrayList fixStack(MathContext context, ObjectArrayList functionsList) + throws Error { + final MathParserStep[] steps = new MathParserStep[] { new JoinNumberAndVariables(context), new FixSingleFunctionArgs(), new FixMultiplicationsAndDivisions(), new FixSumsAndSubtractions(), new AddImplicitMultiplications(context), }; boolean lastLoopDidSomething; Function lastElement; @@ -89,29 +87,30 @@ public class MathParser { } Utils.out.println(Utils.OUTPUTLEVEL_DEBUG_MAX); } - + for (MathParserStep step : steps) { if (Utils.debugOn) { - Utils.out.println(2, "Stack fixing step \""+step.getStepName()+"\""); + Utils.out.println(2, "Stack fixing step \"" + step.getStepName() + "\""); } - int stepQty = step.requiresReversedIteration()?-1:1, initialIndex = step.requiresReversedIteration()?functionsList.size()-1:0; + int stepQty = step.requiresReversedIteration() ? -1 : 1, + initialIndex = step.requiresReversedIteration() ? functionsList.size() - 1 : 0; do { lastLoopDidSomething = false; lastElement = null; IntegerObj curIndex = new IntegerObj(initialIndex); - while(curIndex.i >= 0 && curIndex.i < functionsList.size()) { + while (curIndex.i >= 0 && curIndex.i < functionsList.size()) { final int i = curIndex.i; final Function f = functionsList.get(i); - + if (step.eval(curIndex, lastElement, f, functionsList)) { lastLoopDidSomething = true; } - + lastElement = (i >= functionsList.size()) ? null : functionsList.get(i); curIndex.i += stepQty; } } while (lastLoopDidSomething); - + if (Utils.debugOn) { Utils.out.print(Utils.OUTPUTLEVEL_DEBUG_MAX, "\tStatus: "); for (Function f : functionsList) { @@ -120,7 +119,7 @@ public class MathParser { Utils.out.println(Utils.OUTPUTLEVEL_DEBUG_MAX); } } - + // //Phase 4 // do { // lastLoopDidSomething = false; @@ -133,7 +132,7 @@ public class MathParser { // } // } // } while (lastLoopDidSomething); - + return functionsList; } @@ -145,7 +144,7 @@ public class MathParser { features = makeNumbers(context, features); features = makePowers(context, features); - + features = convertFunctionChars(context, features); return features; @@ -183,7 +182,7 @@ public class MathParser { result = new FeatureDivision(null, null); break; } - + for (char var : MathematicalSymbols.variables) { if (featureChar == var) { result = new FeatureVariable(featureChar, V_TYPE.VARIABLE); @@ -296,9 +295,10 @@ public class MathParser { * @param context * @param features * @return - * @throws Error + * @throws Error */ - private static ObjectArrayList makePowers(MathContext context, ObjectArrayList features) throws Error { + private static ObjectArrayList makePowers(MathContext context, ObjectArrayList features) + throws Error { final ObjectArrayList process = new ObjectArrayList<>(); Feature lastFeature = null; diff --git a/src/main/java/org/warp/picalculator/math/parser/MathParserStep.java b/src/main/java/org/warp/picalculator/math/parser/MathParserStep.java index dc8bddd5..a10e5b84 100644 --- a/src/main/java/org/warp/picalculator/math/parser/MathParserStep.java +++ b/src/main/java/org/warp/picalculator/math/parser/MathParserStep.java @@ -8,6 +8,7 @@ import it.unimi.dsi.fastutil.objects.ObjectArrayList; /** * Join number and variables together ([2][4][x] => [[24]*[x]]) + * * @author Andrea Cavalli * */ @@ -19,8 +20,9 @@ public interface MathParserStep { * @param process * @return true if something changed */ - public boolean eval(IntegerObj curIndex, Function lastFunction, Function currentFunction, ObjectArrayList functionsfunctionsList) throws Error; - + public boolean eval(IntegerObj curIndex, Function lastFunction, Function currentFunction, + ObjectArrayList functionsfunctionsList) throws Error; + public boolean requiresReversedIteration(); public String getStepName(); diff --git a/src/main/java/org/warp/picalculator/math/parser/features/FeatureDivision.java b/src/main/java/org/warp/picalculator/math/parser/features/FeatureDivision.java index 5a6c90e7..058f64b9 100755 --- a/src/main/java/org/warp/picalculator/math/parser/features/FeatureDivision.java +++ b/src/main/java/org/warp/picalculator/math/parser/features/FeatureDivision.java @@ -1,6 +1,5 @@ package org.warp.picalculator.math.parser.features; -import org.warp.picalculator.math.Function; import org.warp.picalculator.math.MathContext; import org.warp.picalculator.math.functions.Division; diff --git a/src/main/java/org/warp/picalculator/math/parser/features/FeatureDoubleImpl.java b/src/main/java/org/warp/picalculator/math/parser/features/FeatureDoubleImpl.java index 52af6c30..17094698 100755 --- a/src/main/java/org/warp/picalculator/math/parser/features/FeatureDoubleImpl.java +++ b/src/main/java/org/warp/picalculator/math/parser/features/FeatureDoubleImpl.java @@ -1,7 +1,7 @@ package org.warp.picalculator.math.parser.features; -import org.warp.picalculator.math.parser.features.interfaces.FeatureDouble; import org.warp.picalculator.math.Function; +import org.warp.picalculator.math.parser.features.interfaces.FeatureDouble; public abstract class FeatureDoubleImpl implements FeatureDouble { private Object child_1; @@ -31,11 +31,11 @@ public abstract class FeatureDoubleImpl implements FeatureDouble { public void setChild2(Object obj) { child_2 = obj; } - + protected Function getFunction1() { return (Function) child_1; } - + protected Function getFunction2() { return (Function) child_2; } diff --git a/src/main/java/org/warp/picalculator/math/parser/features/FeatureMultiplication.java b/src/main/java/org/warp/picalculator/math/parser/features/FeatureMultiplication.java index e05e378c..336a4334 100755 --- a/src/main/java/org/warp/picalculator/math/parser/features/FeatureMultiplication.java +++ b/src/main/java/org/warp/picalculator/math/parser/features/FeatureMultiplication.java @@ -1,6 +1,5 @@ package org.warp.picalculator.math.parser.features; -import org.warp.picalculator.math.Function; import org.warp.picalculator.math.MathContext; import org.warp.picalculator.math.functions.Multiplication; diff --git a/src/main/java/org/warp/picalculator/math/parser/features/FeatureNumber.java b/src/main/java/org/warp/picalculator/math/parser/features/FeatureNumber.java index 289482cf..75bd90b3 100755 --- a/src/main/java/org/warp/picalculator/math/parser/features/FeatureNumber.java +++ b/src/main/java/org/warp/picalculator/math/parser/features/FeatureNumber.java @@ -1,7 +1,6 @@ package org.warp.picalculator.math.parser.features; import org.warp.picalculator.Error; -import org.warp.picalculator.math.Function; import org.warp.picalculator.math.MathContext; import org.warp.picalculator.math.MathematicalSymbols; import org.warp.picalculator.math.functions.Number; diff --git a/src/main/java/org/warp/picalculator/math/parser/features/FeaturePowerChar.java b/src/main/java/org/warp/picalculator/math/parser/features/FeaturePowerChar.java index 1b205bff..732271f4 100755 --- a/src/main/java/org/warp/picalculator/math/parser/features/FeaturePowerChar.java +++ b/src/main/java/org/warp/picalculator/math/parser/features/FeaturePowerChar.java @@ -3,7 +3,6 @@ package org.warp.picalculator.math.parser.features; import org.warp.picalculator.Error; import org.warp.picalculator.math.Function; import org.warp.picalculator.math.MathContext; -import org.warp.picalculator.math.functions.Power; public class FeaturePowerChar extends FeatureSingleImpl { diff --git a/src/main/java/org/warp/picalculator/math/parser/features/FeatureSingleImpl.java b/src/main/java/org/warp/picalculator/math/parser/features/FeatureSingleImpl.java index fa61cc2f..67fca4b8 100755 --- a/src/main/java/org/warp/picalculator/math/parser/features/FeatureSingleImpl.java +++ b/src/main/java/org/warp/picalculator/math/parser/features/FeatureSingleImpl.java @@ -14,7 +14,7 @@ public abstract class FeatureSingleImpl implements FeatureSingle { public Object getChild() { return child; } - + protected Function getFunction1() { return (Function) child; } diff --git a/src/main/java/org/warp/picalculator/math/parser/features/FeatureSubtraction.java b/src/main/java/org/warp/picalculator/math/parser/features/FeatureSubtraction.java index cb3cd0a3..6e56b2f6 100644 --- a/src/main/java/org/warp/picalculator/math/parser/features/FeatureSubtraction.java +++ b/src/main/java/org/warp/picalculator/math/parser/features/FeatureSubtraction.java @@ -4,8 +4,6 @@ import org.warp.picalculator.Error; import org.warp.picalculator.math.Function; import org.warp.picalculator.math.MathContext; import org.warp.picalculator.math.functions.Subtraction; -import org.warp.picalculator.math.parser.features.interfaces.Feature; -import org.warp.picalculator.math.parser.features.interfaces.FeatureDouble; public class FeatureSubtraction extends FeatureDoubleImpl { diff --git a/src/main/java/org/warp/picalculator/math/parser/features/FeatureSumSubtraction.java b/src/main/java/org/warp/picalculator/math/parser/features/FeatureSumSubtraction.java index e91b4b3a..c6b22fe6 100644 --- a/src/main/java/org/warp/picalculator/math/parser/features/FeatureSumSubtraction.java +++ b/src/main/java/org/warp/picalculator/math/parser/features/FeatureSumSubtraction.java @@ -1,10 +1,8 @@ package org.warp.picalculator.math.parser.features; import org.warp.picalculator.Error; -import org.warp.picalculator.math.Function; import org.warp.picalculator.math.MathContext; import org.warp.picalculator.math.functions.SumSubtraction; -import org.warp.picalculator.math.parser.features.interfaces.Feature; public class FeatureSumSubtraction extends FeatureDoubleImpl { diff --git a/src/main/java/org/warp/picalculator/math/parser/steps/AddImplicitMultiplications.java b/src/main/java/org/warp/picalculator/math/parser/steps/AddImplicitMultiplications.java index c3283ec4..9e47f717 100644 --- a/src/main/java/org/warp/picalculator/math/parser/steps/AddImplicitMultiplications.java +++ b/src/main/java/org/warp/picalculator/math/parser/steps/AddImplicitMultiplications.java @@ -5,8 +5,6 @@ import org.warp.picalculator.math.Function; import org.warp.picalculator.math.FunctionSingle; import org.warp.picalculator.math.MathContext; import org.warp.picalculator.math.functions.Multiplication; -import org.warp.picalculator.math.functions.Number; -import org.warp.picalculator.math.functions.Variable; import org.warp.picalculator.math.parser.MathParserStep; import it.unimi.dsi.fastutil.objects.ObjectArrayList; @@ -14,13 +12,14 @@ import it.unimi.dsi.fastutil.objects.ObjectArrayList; public class AddImplicitMultiplications implements MathParserStep { private MathContext context; - + public AddImplicitMultiplications(MathContext context) { this.context = context; } - + @Override - public boolean eval(IntegerObj curIndex, Function lastFunction, Function currentFunction, ObjectArrayList functionsList) { + public boolean eval(IntegerObj curIndex, Function lastFunction, Function currentFunction, + ObjectArrayList functionsList) { if (currentFunction instanceof FunctionSingle) { if (lastFunction instanceof Function) { functionsList.set(curIndex.i, new Multiplication(context, currentFunction, lastFunction)); @@ -36,7 +35,7 @@ public class AddImplicitMultiplications implements MathParserStep { } return false; } - + @Override public boolean requiresReversedIteration() { return true; diff --git a/src/main/java/org/warp/picalculator/math/parser/steps/FixSingleFunctionArgs.java b/src/main/java/org/warp/picalculator/math/parser/steps/FixSingleFunctionArgs.java index d6e7fe32..b65d36f2 100644 --- a/src/main/java/org/warp/picalculator/math/parser/steps/FixSingleFunctionArgs.java +++ b/src/main/java/org/warp/picalculator/math/parser/steps/FixSingleFunctionArgs.java @@ -11,6 +11,7 @@ import it.unimi.dsi.fastutil.objects.ObjectArrayList; /** * Puts the argument of Single Functions inside them + * * @author Andrea Cavalli * */ @@ -25,7 +26,7 @@ public class FixSingleFunctionArgs implements MathParserStep { throw new Error(Errors.MISSING_ARGUMENTS, "There is a function at the end without any argument specified."); } else { ((FunctionSingle) currentFunction).setParameter(lastFunction); - functionsList.remove(curIndex.i+1); + functionsList.remove(curIndex.i + 1); } return true; } diff --git a/src/main/java/org/warp/picalculator/math/parser/steps/FixSumsAndSubtractions.java b/src/main/java/org/warp/picalculator/math/parser/steps/FixSumsAndSubtractions.java index d2223c45..3b9cd5f5 100644 --- a/src/main/java/org/warp/picalculator/math/parser/steps/FixSumsAndSubtractions.java +++ b/src/main/java/org/warp/picalculator/math/parser/steps/FixSumsAndSubtractions.java @@ -4,7 +4,6 @@ import org.warp.picalculator.Error; import org.warp.picalculator.Errors; import org.warp.picalculator.IntegerObj; import org.warp.picalculator.math.Function; -import org.warp.picalculator.math.functions.Multiplication; import org.warp.picalculator.math.functions.Subtraction; import org.warp.picalculator.math.functions.Sum; import org.warp.picalculator.math.functions.SumSubtraction; diff --git a/src/main/java/org/warp/picalculator/math/parser/steps/JoinNumberAndVariables.java b/src/main/java/org/warp/picalculator/math/parser/steps/JoinNumberAndVariables.java index 45f8f97f..87d5b770 100644 --- a/src/main/java/org/warp/picalculator/math/parser/steps/JoinNumberAndVariables.java +++ b/src/main/java/org/warp/picalculator/math/parser/steps/JoinNumberAndVariables.java @@ -1,7 +1,6 @@ package org.warp.picalculator.math.parser.steps; import org.warp.picalculator.IntegerObj; -import org.warp.picalculator.Utils; import org.warp.picalculator.math.Function; import org.warp.picalculator.math.MathContext; import org.warp.picalculator.math.functions.Division; @@ -15,15 +14,16 @@ import it.unimi.dsi.fastutil.objects.ObjectArrayList; public class JoinNumberAndVariables implements MathParserStep { private MathContext context; - + public JoinNumberAndVariables(MathContext context) { this.context = context; } - + @Override - public boolean eval(IntegerObj curIndex, Function lastFunction, Function currentFunction, ObjectArrayList functionsList) { + public boolean eval(IntegerObj curIndex, Function lastFunction, Function currentFunction, + ObjectArrayList functionsList) { if (currentFunction instanceof Number | currentFunction instanceof Variable | currentFunction instanceof Division) { - if (lastFunction instanceof Variable | lastFunction instanceof Number | (lastFunction instanceof Multiplication && ((Multiplication)lastFunction).getParameter2() != null)) { + if (lastFunction instanceof Variable | lastFunction instanceof Number | (lastFunction instanceof Multiplication && ((Multiplication) lastFunction).getParameter2() != null)) { final Function a = currentFunction; final Function b = lastFunction; functionsList.set(curIndex.i, new Multiplication(context, a, b)); @@ -33,7 +33,7 @@ public class JoinNumberAndVariables implements MathParserStep { } return false; } - + @Override public boolean requiresReversedIteration() { return true; diff --git a/src/main/java/org/warp/picalculator/math/rules/ExpandRule5.java b/src/main/java/org/warp/picalculator/math/rules/ExpandRule5.java index a7353f06..045f573c 100755 --- a/src/main/java/org/warp/picalculator/math/rules/ExpandRule5.java +++ b/src/main/java/org/warp/picalculator/math/rules/ExpandRule5.java @@ -36,7 +36,7 @@ public class ExpandRule5 { public static ObjectArrayList execute(Function f) throws Error { final ObjectArrayList result = new ObjectArrayList<>(); - + if (f instanceof Negative) { final Negative fnc = (Negative) f; result.add(((Negative) ((Expression) fnc.getParameter()).getParameter()).getParameter()); diff --git a/src/main/java/org/warp/picalculator/math/rules/methods/DivisionRule1.java b/src/main/java/org/warp/picalculator/math/rules/methods/DivisionRule1.java index 9f65b48a..d14975cf 100755 --- a/src/main/java/org/warp/picalculator/math/rules/methods/DivisionRule1.java +++ b/src/main/java/org/warp/picalculator/math/rules/methods/DivisionRule1.java @@ -40,9 +40,8 @@ public class DivisionRule1 { prec = new Multiplication(root, a, b); } }*/ - - final int[] size = new int[] {elements[0].size(), elements[1].size()}; + final int[] size = new int[] { elements[0].size(), elements[1].size() }; Function separatedDivision = new Division(root, elem1, elem2); Function[] resultDivisionArray = new Function[2]; @@ -90,12 +89,12 @@ public class DivisionRule1 { denomMult = ((Multiplication) denomMult).getParameter2(); } elementsDenominator.add(denomMult); - - return new ObjectArrayList[] {elementsNumerator, elementsDenominator}; + + return new ObjectArrayList[] { elementsNumerator, elementsDenominator }; } private static int[] getFirstWorkingDivisionCouple(ObjectArrayList[] elements) { - final int[] size = new int[] {elements[0].size(), elements[1].size()}; + final int[] size = new int[] { elements[0].size(), elements[1].size() }; Function a; Function b; if (elements[0].size() + elements[1].size() <= 2) {