diff --git a/.classpath b/.classpath index bd8efbd4..a76db42c 100644 --- a/.classpath +++ b/.classpath @@ -6,7 +6,7 @@ - + diff --git a/.gitignore b/.gitignore index d7714c43..cbdd4cd2 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ /target/ /backups/ +/Resources_and_Videos/ # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index 96cf561c..02433e90 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -1,6 +1,14 @@ eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning org.eclipse.jdt.core.compiler.source=1.8 org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter diff --git a/Algebra Cheat Sheet.rtf b/Algebra Cheat Sheet.rtf index dd0df088..068a8235 100644 Binary files a/Algebra Cheat Sheet.rtf and b/Algebra Cheat Sheet.rtf differ diff --git a/src/main/java/org/warp/picalculator/gui/DisplayManager.java b/src/main/java/org/warp/picalculator/gui/DisplayManager.java index bbcaf8ba..6e4c0e7d 100755 --- a/src/main/java/org/warp/picalculator/gui/DisplayManager.java +++ b/src/main/java/org/warp/picalculator/gui/DisplayManager.java @@ -1,6 +1,7 @@ package org.warp.picalculator.gui; import java.io.IOException; +import java.util.concurrent.Semaphore; import org.warp.picalculator.Main; import org.warp.picalculator.Utils; @@ -234,6 +235,13 @@ public final class DisplayManager implements RenderingLoop { } private void draw_init() { + if (engine.supportsFontRegistering()) { + for (BinaryFont f : engine.getRegisteredFonts()) { + if (!f.isInitialized()) { + f.initialize(engine); + } + } + } renderer.glClear(engine.getWidth(), engine.getHeight()); } @@ -375,11 +383,12 @@ public final class DisplayManager implements RenderingLoop { public void loop() { try { - load_skin(); - load_fonts(); engine.create(); renderer = engine.getRenderer(); + load_skin(); + load_fonts(); + try { screen.initialize(); } catch (final Exception e) { 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 c03d95c5..7a3156f0 100755 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/GraphicEngine.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/GraphicEngine.java @@ -1,6 +1,7 @@ package org.warp.picalculator.gui.graphicengine; import java.io.IOException; +import java.util.ArrayList; public interface GraphicEngine { @@ -15,6 +16,8 @@ public interface GraphicEngine { public void setDisplayMode(final int ww, final int wh); public void create(); + + public void create(Runnable object); public boolean wasResized(); @@ -39,4 +42,8 @@ public interface GraphicEngine { public boolean isSupported(); public boolean doesRefreshPauses(); + + public boolean supportsFontRegistering(); + + public ArrayList getRegisteredFonts(); } 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 3d8ed3c8..3b2d7574 100755 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/Skin.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/Skin.java @@ -7,6 +7,8 @@ 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 5366f40d..47be18b9 100755 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPUEngine.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPUEngine.java @@ -4,6 +4,7 @@ import java.awt.FontMetrics; import java.awt.GraphicsEnvironment; import java.awt.image.BufferedImage; import java.io.IOException; +import java.util.ArrayList; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; @@ -45,14 +46,21 @@ 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); setResizable(Utils.debugOn & !Utils.debugThirdScreen); setDisplayMode(Main.screenSize[0], Main.screenSize[1]); INSTANCE.setVisible(true); initialized = true; + if (onInitialized != null) + onInitialized.run(); } @Override @@ -185,4 +193,16 @@ public class CPUEngine implements GraphicEngine { public boolean doesRefreshPauses() { return true; } + + @Override + public boolean supportsFontRegistering() { + // TODO Auto-generated method stub + return false; + } + + @Override + public ArrayList getRegisteredFonts() { + // TODO Auto-generated method stub + return null; + } } 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 534a33a4..e421d4a0 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 @@ -149,8 +149,6 @@ public class CPUFont implements BinaryFont { @Override public void initialize(GraphicEngine d) { - // TODO Auto-generated method stub - } @Override @@ -178,4 +176,9 @@ public class CPUFont implements BinaryFont { return charH; } + @Override + public boolean isInitialized() { + return true; + } + } diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPUSkin.java b/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPUSkin.java index 0af2b829..df3fba4a 100755 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPUSkin.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPUSkin.java @@ -48,4 +48,9 @@ public class CPUSkin implements Skin { ((CPURenderer) d.getRenderer()).currentSkin = this; } + @Override + public boolean isInitialized() { + return true; + } + } 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 fdb87680..94eb14b9 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,12 @@ package org.warp.picalculator.gui.graphicengine.gpu; import java.io.IOException; +import java.util.ArrayList; import org.warp.picalculator.Main; import org.warp.picalculator.Utils; import org.warp.picalculator.gui.graphicengine.BinaryFont; +import org.warp.picalculator.gui.graphicengine.GraphicEngine; import org.warp.picalculator.gui.graphicengine.RenderingLoop; import org.warp.picalculator.gui.graphicengine.Skin; @@ -18,6 +20,7 @@ public class GPUEngine implements org.warp.picalculator.gui.graphicengine.Graphi private RenderingLoop d; private GPURenderer r; int[] size = new int[] { Main.screenSize[0], Main.screenSize[1] }; + private final ArrayList registeredFonts = new ArrayList(); @Override public int[] getSize() { @@ -53,6 +56,11 @@ public class GPUEngine implements org.warp.picalculator.gui.graphicengine.Graphi @Override public void create() { + create(null); + } + + @Override + public void create(Runnable onInitialized) { created = true; r = new GPURenderer(); wnd = new NEWTWindow(this); @@ -60,6 +68,7 @@ public class GPUEngine implements org.warp.picalculator.gui.graphicengine.Graphi setDisplayMode(Main.screenSize[0], Main.screenSize[1]); setResizable(Utils.debugOn & !Utils.debugThirdScreen); initialized = true; + wnd.onInitialized = onInitialized; } @Override @@ -104,12 +113,12 @@ public class GPUEngine implements org.warp.picalculator.gui.graphicengine.Graphi @Override public BinaryFont loadFont(String file) throws IOException { - return new GPUFont(file); + return new GPUFont(this, file); } @Override public Skin loadSkin(String file) throws IOException { - return new GPUSkin(file); + return new GPUSkin(this, file); } @Override @@ -145,5 +154,19 @@ public class GPUEngine implements org.warp.picalculator.gui.graphicengine.Graphi public boolean doesRefreshPauses() { return false; } + + public void registerFont(GPUFont gpuFont) { + registeredFonts.add(gpuFont); + } + + @Override + public boolean supportsFontRegistering() { + return true; + } + + @Override + public ArrayList getRegisteredFonts() { + return registeredFonts; + } } 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 34296233..780c2657 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 @@ -25,10 +25,11 @@ public class GPUFont implements BinaryFont { public int memoryWidthOfEachColumn; private boolean initialized = false; - private CPUFont tmpFont; + private BufferedImage tmpFont; - GPUFont(String file) throws IOException { + GPUFont(GraphicEngine g, String file) throws IOException { load(file); + ((GPUEngine) g).registerFont(this); } @Override @@ -38,7 +39,7 @@ public class GPUFont implements BinaryFont { charH = font.charH; minCharIndex = font.minBound; maxCharIndex = font.maxBound; - tmpFont = font; + pregenTexture(font.rawchars); font = null; } @@ -56,7 +57,7 @@ public class GPUFont implements BinaryFont { return (ch & 0xFFFF) - minCharIndex; } - private void genTexture(boolean[][] chars) { + private void pregenTexture(boolean[][] chars) { final double totalChars = maxCharIndex - minCharIndex; final int w = powerOf2((int) (Math.ceil(Math.sqrt(totalChars) * charW))); final int h = powerOf2((int) (Math.ceil(Math.sqrt(totalChars) * charH))); @@ -86,11 +87,17 @@ public class GPUFont implements BinaryFont { memoryWidth = w; memoryHeight = h; memoryWidthOfEachColumn = maxIndexW; - texture = GPURenderer.importTexture(bfi); textureW = bfi.getWidth(); textureH = bfi.getHeight(); - bfi.flush(); - bfi = null; + this.tmpFont = bfi; + } catch (GLException e) { + e.printStackTrace(); + } + } + + private void genTexture() { + try { + texture = GPURenderer.importTexture(tmpFont); } catch (GLException | IOException e) { e.printStackTrace(); } @@ -102,9 +109,7 @@ public class GPUFont implements BinaryFont { @Override public void initialize(GraphicEngine d) { - genTexture(tmpFont.rawchars); - tmpFont.chars32 = null; - tmpFont.rawchars = null; + genTexture(); tmpFont = null; initialized = true; } @@ -138,4 +143,9 @@ public class GPUFont implements BinaryFont { public int getCharacterHeight() { return charH; } + + @Override + public boolean isInitialized() { + return initialized; + } } \ No newline at end of file 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 98dbf818..a7c17ee0 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,6 +3,7 @@ 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; diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPUSkin.java b/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPUSkin.java index d9c26c1d..b7c1ce75 100755 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPUSkin.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPUSkin.java @@ -20,7 +20,7 @@ public class GPUSkin implements Skin { private String texturePath; private boolean initialized = false; - GPUSkin(String file) throws IOException { + GPUSkin(GraphicEngine d, String file) throws IOException { load(file); } @@ -57,4 +57,9 @@ public class GPUSkin implements Skin { r.useTexture(t, w, h); } + @Override + public boolean isInitialized() { + return initialized; + } + } 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 baac312d..e70cc838 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 @@ -60,6 +60,7 @@ class NEWTWindow implements GLEventListener { private final GPUEngine disp; private final GPURenderer renderer; + public Runnable onInitialized; public NEWTWindow(GPUEngine disp) { this.disp = disp; @@ -279,7 +280,7 @@ class NEWTWindow implements GLEventListener { @Override public void init(GLAutoDrawable drawable) { final GL2ES1 gl = drawable.getGL().getGL2ES1(); - + //Vsync gl.setSwapInterval(2); @@ -291,6 +292,10 @@ class NEWTWindow implements GLEventListener { gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA); gl.glShadeModel(GLLightingFunc.GL_FLAT); + if (onInitialized != null) { + onInitialized.run(); + onInitialized = null; + } try { renderer.currentTex = ((GPUSkin) disp.loadSkin("test.png")).t; } catch (final Exception e) { @@ -330,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 cd8beebc..9a776d09 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 @@ -6,6 +6,7 @@ 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; @@ -16,6 +17,7 @@ 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; @@ -64,6 +66,11 @@ public class Headless24bitEngine implements org.warp.picalculator.gui.graphiceng @Override public void create() { + this.create(null); + } + + @Override + public void create(Runnable onInitialized) { Utils.outputLevel = -1; AnsiConsole.systemInstall(); if(Utils.isWindows() && !Utils.msDosMode){ @@ -134,6 +141,8 @@ public class Headless24bitEngine implements org.warp.picalculator.gui.graphiceng t.start(); } stopped = false; + if (onInitialized != null) + onInitialized.run(); } @Override @@ -321,4 +330,14 @@ public class Headless24bitEngine implements org.warp.picalculator.gui.graphiceng public boolean doesRefreshPauses() { return true; } + + @Override + public boolean supportsFontRegistering() { + return false; + } + + @Override + public ArrayList getRegisteredFonts() { + return null; + } } 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 16e4fb5d..f8f97dc5 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 @@ -39,4 +39,9 @@ public class Headless24bitFont implements BinaryFont { return 5; } + @Override + public boolean isInitialized() { + return true; + } + } 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 3099296a..60aace43 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 @@ -57,5 +57,10 @@ public class Headless24bitSkin implements Skin { ((Headless24bitRenderer) d.getRenderer()).currentSkin = this; } + @Override + public boolean isInitialized() { + 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 b149d419..ff01392b 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,6 +1,7 @@ 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; @@ -9,6 +10,7 @@ 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; @@ -56,6 +58,11 @@ public class Headless256Engine implements org.warp.picalculator.gui.graphicengin @Override public void create() { + this.create(null); + } + + @Override + public void create(Runnable onInitialized) { Utils.outputLevel = -1; AnsiConsole.systemInstall(); if(Utils.isWindows() && !Utils.msDosMode){ @@ -126,6 +133,8 @@ public class Headless256Engine implements org.warp.picalculator.gui.graphicengin t.start(); } stopped = false; + if (onInitialized != null) + onInitialized.run(); } @Override @@ -271,4 +280,16 @@ public class Headless256Engine implements org.warp.picalculator.gui.graphicengin public boolean doesRefreshPauses() { return true; } + + @Override + public boolean supportsFontRegistering() { + // TODO Auto-generated method stub + return false; + } + + @Override + public ArrayList getRegisteredFonts() { + // TODO Auto-generated method stub + return null; + } } 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 13dd554e..3cc37393 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 @@ -39,4 +39,9 @@ public class Headless256Font implements BinaryFont { return 5; } + @Override + public boolean isInitialized() { + return true; + } + } 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 a0980491..6ba51593 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 @@ -61,5 +61,10 @@ public class Headless256Skin implements Skin { ((Headless256Renderer) d.getRenderer()).currentSkin = this; } + @Override + public boolean isInitialized() { + 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 576afaac..d6970ee0 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,6 +1,7 @@ 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; @@ -9,6 +10,8 @@ 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; @@ -56,6 +59,11 @@ public class Headless8Engine implements org.warp.picalculator.gui.graphicengine. @Override public void create() { + this.create(null); + } + + @Override + public void create(Runnable onInitialized) { Utils.outputLevel = -1; AnsiConsole.systemInstall(); if(Utils.isWindows() && !Utils.msDosMode){ @@ -126,6 +134,8 @@ public class Headless8Engine implements org.warp.picalculator.gui.graphicengine. t.start(); } stopped = false; + if (onInitialized != null) + onInitialized.run(); } @Override @@ -271,4 +281,16 @@ public class Headless8Engine implements org.warp.picalculator.gui.graphicengine. public boolean doesRefreshPauses() { return true; } + + @Override + public boolean supportsFontRegistering() { + // TODO Auto-generated method stub + return false; + } + + @Override + public ArrayList getRegisteredFonts() { + // TODO Auto-generated method stub + return null; + } } 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 e29d0bfa..bbb77f81 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 @@ -39,4 +39,9 @@ public class Headless8Font implements BinaryFont { return 5; } + @Override + public boolean isInitialized() { + return true; + } + } 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 5954f7a9..8c218af1 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 @@ -56,5 +56,10 @@ public class Headless8Skin implements Skin { ((Headless8Renderer) d.getRenderer()).currentSkin = this; } + @Override + public boolean isInitialized() { + return true; + } + } 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 f8b160f4..9470a3b5 100755 --- a/src/main/java/org/warp/picalculator/math/functions/Division.java +++ b/src/main/java/org/warp/picalculator/math/functions/Division.java @@ -60,7 +60,8 @@ public class Division extends FunctionOperator { if (((Number) variable1).isInteger() && ((Number) variable2).isInteger()) { LinkedList factors1 = ((Number) variable1).getFactors(); LinkedList factors2 = ((Number) variable2).getFactors(); - return factors1.retainAll(factors2) /* True If something changed in the factors list by keeping only the intersection of the two factor lists */ && factors1.size() > 0 /* true if there is at least one common factor */; + factors1.retainAll(factors2); + return factors1.size() > 0 /* true if there is at least one common factor */; } else if (((Number) variable1).divide((Number) variable2).isInteger()) { return true; } else { @@ -99,15 +100,14 @@ public class Division extends FunctionOperator { if (getMathContext().exactMode && (((Number) variable1).isInteger() && ((Number) variable2).isInteger())) { LinkedList factors1 = ((Number) variable1).getFactors(); LinkedList factors2 = ((Number) variable2).getFactors(); - if(factors1.retainAll(factors2)) { //True If something changed in the factors list by keeping only the intersection of the two factor lists. - BigInteger nmb1 = ((Number) this.getParameter1()).term.toBigIntegerExact(); - BigInteger nmb2 = ((Number) this.getParameter2()).term.toBigIntegerExact(); - for (BigInteger i : factors1) { - nmb1 = nmb1.divide(i); - nmb2 = nmb2.divide(i); - } - result.add(new Division(mathContext, new Number(mathContext, nmb1), new Number(mathContext, nmb2))); + factors1.retainAll(factors2); + BigInteger nmb1 = ((Number) this.getParameter1()).term.toBigIntegerExact(); + BigInteger nmb2 = ((Number) this.getParameter2()).term.toBigIntegerExact(); + for (BigInteger i : factors1) { + nmb1 = nmb1.divide(i); + nmb2 = nmb2.divide(i); } + result.add(new Division(mathContext, new Number(mathContext, nmb1), new Number(mathContext, nmb2))); } else { result.add(((Number) variable1).divide((Number) variable2)); } 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 bd600722..f45d6ab6 100755 --- a/src/main/java/org/warp/picalculator/math/functions/Number.java +++ b/src/main/java/org/warp/picalculator/math/functions/Number.java @@ -75,10 +75,13 @@ public class Number implements Function { public Number pow(Number f) throws Error { Number ret = new Number(root, BigDecimal.ONE); if (Utils.isIntegerValue(f.term)) { - final BigInteger bi = f.term.toBigInteger(); + final BigInteger bi = f.term.toBigInteger().abs(); for (BigInteger i = BigInteger.ZERO; i.compareTo(bi) < 0; i = i.add(BigInteger.ONE)) { ret = ret.multiply(new Number(root, getTerm())); } + if (f.term.signum() == -1) { + ret = new Number(root, 1).divide(ret); + } } else { ret.term = BigDecimalMath.pow(term, f.term); } diff --git a/src/main/resources/.gitignore b/src/main/resources/.gitignore new file mode 100644 index 00000000..063775e2 --- /dev/null +++ b/src/main/resources/.gitignore @@ -0,0 +1 @@ +/Thumbs.db