diff --git a/res/algebra.png b/res/algebra.png new file mode 100644 index 00000000..30276616 Binary files /dev/null and b/res/algebra.png differ diff --git a/res/decimal.png b/res/decimal.png index ecd88c74..0c655ab6 100644 Binary files a/res/decimal.png and b/res/decimal.png differ diff --git a/src/org/warp/picalculator/device/Keyboard.java b/src/org/warp/picalculator/device/Keyboard.java index 66d6590f..8675f340 100644 --- a/src/org/warp/picalculator/device/Keyboard.java +++ b/src/org/warp/picalculator/device/Keyboard.java @@ -233,8 +233,10 @@ public class Keyboard { case KeyEvent.VK_7: if (!Keyboard.shift && !Keyboard.alpha) { Keyboard.keyPressed(Key.NUM7); - } else { - Keyboard.keyPressed(Key.NONE); + } else if (Keyboard.shift) { + if (Utils.debugOn) { + Keyboard.keyPressed(Key.DIVIDE); + } } break; case KeyEvent.VK_8: @@ -740,12 +742,14 @@ public class Keyboard { default: break; } - if (k != Key.SHIFT && Keyboard.shift) { - Keyboard.shift = false; - refresh = true; - } else if (k != Key.ALPHA && Keyboard.alpha) { - Keyboard.alpha = false; - refresh = true; + if (Utils.debugOn == false) { + if (k != Key.SHIFT && Keyboard.shift) { + Keyboard.shift = false; + refresh = true; + } else if (k != Key.ALPHA && Keyboard.alpha) { + Keyboard.alpha = false; + refresh = true; + } } if (refresh) { // PIDisplay.display.repaint(); diff --git a/src/org/warp/picalculator/gui/DisplayManager.java b/src/org/warp/picalculator/gui/DisplayManager.java index e0ea029b..c69d1d09 100644 --- a/src/org/warp/picalculator/gui/DisplayManager.java +++ b/src/org/warp/picalculator/gui/DisplayManager.java @@ -446,7 +446,7 @@ public final class DisplayManager implements RenderingLoop { }); dbgthrd.setDaemon(true); dbgthrd.setName("Debug performance thread"); - dbgthrd.start(); + //dbgthrd.start(); engine.start(this); diff --git a/src/org/warp/picalculator/gui/graphicengine/cpu/SwingWindow.java b/src/org/warp/picalculator/gui/graphicengine/cpu/SwingWindow.java index 52acdcd7..61c3b310 100644 --- a/src/org/warp/picalculator/gui/graphicengine/cpu/SwingWindow.java +++ b/src/org/warp/picalculator/gui/graphicengine/cpu/SwingWindow.java @@ -55,7 +55,7 @@ public class SwingWindow extends JFrame { setResizable(false); } - setTitle("Raspberry PI Calculator by XDrake99 (Andrea Cavalli)"); + setTitle("WarpPI Calculator by Andrea Cavalli (XDrake99)"); addComponentListener(new ComponentListener() { @Override @@ -165,9 +165,17 @@ public class SwingWindow extends JFrame { break; case KeyEvent.VK_SHIFT: Keyboard.keyReleased(Key.SHIFT); + if (Keyboard.shift) { + Keyboard.keyPressed(Key.SHIFT); + Keyboard.keyReleased(Key.SHIFT); + } break; case KeyEvent.VK_A: Keyboard.keyReleased(Key.ALPHA); + if (Keyboard.alpha) { + Keyboard.keyPressed(Key.ALPHA); + Keyboard.keyReleased(Key.ALPHA); + } break; case KeyEvent.VK_M: Keyboard.keyPressed(Key.SURD_MODE); diff --git a/src/org/warp/picalculator/gui/graphicengine/gpu/GPUEngine.java b/src/org/warp/picalculator/gui/graphicengine/gpu/GPUEngine.java index 65fbeeb4..948fe947 100644 --- a/src/org/warp/picalculator/gui/graphicengine/gpu/GPUEngine.java +++ b/src/org/warp/picalculator/gui/graphicengine/gpu/GPUEngine.java @@ -126,6 +126,7 @@ public class GPUEngine implements org.warp.picalculator.gui.graphicengine.Graphi @Override public boolean isSupported() { + if (true) return false; return GLProfile.isAvailable(GLProfile.GL2ES1); } diff --git a/src/org/warp/picalculator/gui/graphicengine/gpu/NEWTWindow.java b/src/org/warp/picalculator/gui/graphicengine/gpu/NEWTWindow.java index 46330d0b..40202415 100644 --- a/src/org/warp/picalculator/gui/graphicengine/gpu/NEWTWindow.java +++ b/src/org/warp/picalculator/gui/graphicengine/gpu/NEWTWindow.java @@ -60,38 +60,9 @@ import org.warp.picalculator.gui.DisplayManager; import org.warp.picalculator.gui.graphicengine.GraphicEngine; /** - *
- * __ __|_ ___________________________________________________________________________ ___|__ __ - * // /\ _ /\ \\ - * //____/ \__ __ _____ _____ _____ _____ _____ | | __ _____ _____ __ __/ \____\\ - * \ \ / / __| | | __| _ | | _ | | | __| | | __| | /\ \ / / - * \____\/_/ | | | | | | | | | | | __| | | | | | | | | | |__ " \_\/____/ - * /\ \ |_____|_____|_____|__|__|_|_|_|__| | | |_____|_____|_____|_____| _ / /\ - * / \____\ http://jogamp.org |_| /____/ \ - * \ / "' _________________________________________________________________________ `" \ / - * \/____. .____\/ - *- * - *
- * JOGL2 OpenGL ES 2 demo to expose and learn what the RAW OpenGL ES 2 API looks - * like. - * - * Compile, run and enjoy: - * wget - * http://jogamp.org/deployment/jogamp-current/archive/jogamp-all-platforms.7z - * 7z x jogamp-all-platforms.7z - * cd jogamp-all-platforms - * mkdir -p demos/es2 - * cd demos/es2 - * wget - * https://raw.github.com/xranby/jogl-demos/master/src/demos/es2/RawGL2ES1demo.java - * cd ../.. - * javac -cp jar/jogl-all.jar:jar/gluegen-rt.jar demos/es2/RawGL2ES1demo.java - * java -cp jar/jogl-all.jar:jar/gluegen-rt.jar:. demos.es2.RawGL2ES1demo - *
- * * * @author Xerxes RĂ„nby (xranby) + * @author Andrea Cavalli (XDRake99) */ class NEWTWindow implements GLEventListener { @@ -107,19 +78,6 @@ class NEWTWindow implements GLEventListener { public GLWindow window; public void create() { - /* This demo are based on the GL2ES1 GLProfile that uses common hardware acceleration - * functionality of desktop OpenGL 3, 2 and mobile OpenGL ES 2 devices. - * JogAmp JOGL will probe all the installed libGL.so, libEGL.so and libGLESv2.so librarys on - * the system to find which one provide hardware acceleration for your GPU device. - * Its common to find more than one version of these librarys installed on a system. - * For example on a ARM Linux system JOGL may find - * Hardware accelerated Nvidia tegra GPU drivers in: /usr/lib/nvidia-tegra/libEGL.so - * Software rendered Mesa Gallium driver in: /usr/lib/arm-linux-gnueabi/mesa-egl/libEGL.so.1 - * Software rendered Mesa X11 in: /usr/lib/arm-linux-gnueabi/mesa/libGL.so - * Good news!: JOGL does all this probing for you all you have to do are to ask for - * the GLProfile you want to use. - */ - System.out.println("Loading OpenGL..."); System.out.println(GLProfile.glAvailabilityToString()); if (!GLProfile.isAvailable(GLProfile.GL2ES1)) { @@ -135,7 +93,7 @@ class NEWTWindow implements GLEventListener { final GLWindow glWindow = GLWindow.create(caps); window = glWindow; - glWindow.setTitle("Algebraic Calculator for Raspberry PI by Andrea Cavalli (XDrake99)"); + glWindow.setTitle("WarpPI Calculator by Andrea Cavalli (XDrake99)"); glWindow.addWindowListener(new WindowListener() { @@ -272,9 +230,17 @@ class NEWTWindow implements GLEventListener { case 0x15: case KeyEvent.VK_SHIFT: Keyboard.keyReleased(Key.SHIFT); + if (Keyboard.shift) { + Keyboard.keyPressed(Key.SHIFT); + Keyboard.keyReleased(Key.SHIFT); + } break; case KeyEvent.VK_A: Keyboard.keyReleased(Key.ALPHA); + if (Keyboard.alpha) { + Keyboard.keyPressed(Key.ALPHA); + Keyboard.keyReleased(Key.ALPHA); + } break; case KeyEvent.VK_M: Keyboard.keyPressed(Key.SURD_MODE); diff --git a/src/org/warp/picalculator/gui/screens/MathInputScreen.java b/src/org/warp/picalculator/gui/screens/MathInputScreen.java index 602d515c..0654d907 100644 --- a/src/org/warp/picalculator/gui/screens/MathInputScreen.java +++ b/src/org/warp/picalculator/gui/screens/MathInputScreen.java @@ -256,7 +256,7 @@ public class MathInputScreen extends Screen { equazioneCorrente = nuovaEquazione; calc.f2 = calc.f; afterDoNextStep = true; - simplify(MathInputScreen.this); + simplify(); }); } catch (final Exception ex) { if (Utils.debugOn) { @@ -273,7 +273,7 @@ public class MathInputScreen extends Screen { System.err.println(e.id); } } else { - simplify(this); + simplify(); } } return true; @@ -290,7 +290,7 @@ public class MathInputScreen extends Screen { try { try { if (afterDoNextStep) { - simplify(this); + simplify(); } else { if (nuovaEquazione != equazioneCorrente && nuovaEquazione.length() > 0) { changeEquationScreen(); @@ -457,7 +457,7 @@ public class MathInputScreen extends Screen { nuovaEquazione = ""; afterDoNextStep = false; if (calc.f != null) { - calc.f.clear(); + calc.f = new ArrayList<>(); } return true; } @@ -546,7 +546,7 @@ public class MathInputScreen extends Screen { return null; } - protected void simplify(MathInputScreen mathInputScreen) { + protected void simplify() { try { try { showVariablesDialog(); @@ -585,6 +585,7 @@ public class MathInputScreen extends Screen { rf.generateGraphics(); } } + Utils.debug.println(calc.f2.toString()); } catch (final Exception ex) { if (Utils.debugOn) { ex.printStackTrace(); @@ -718,7 +719,6 @@ public class MathInputScreen extends Screen { if (runnable != null) { runnable.run(); } - Utils.debug.println(calc.f.toString()); } }); ct.setName("Variables user-input queue thread"); diff --git a/src/org/warp/picalculator/math/functions/Division.java b/src/org/warp/picalculator/math/functions/Division.java index 91423e2d..3a18bcab 100644 --- a/src/org/warp/picalculator/math/functions/Division.java +++ b/src/org/warp/picalculator/math/functions/Division.java @@ -9,6 +9,8 @@ import org.warp.picalculator.gui.graphicengine.cpu.CPUEngine; import org.warp.picalculator.math.Calculator; 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; import org.warp.picalculator.math.rules.FractionsRule2; import org.warp.picalculator.math.rules.FractionsRule3; import org.warp.picalculator.math.rules.UndefinedRule2; @@ -40,11 +42,25 @@ public class Division extends FunctionTwoValues { if (FractionsRule3.compare(this)) { return true; } + if (FractionsRule11.compare(this)) { + return true; + } + if (FractionsRule12.compare(this)) { + return true; + } if (UndefinedRule2.compare(this)) { return true; } - if (variable1 instanceof Number && variable2 instanceof Number && root.exactMode == false) { - return true; + if (variable1 instanceof Number && variable2 instanceof Number) { + if (root.exactMode) { + try { + return ((Number)variable1).divide((Number)variable2).isInteger(); + } catch (Error e) { + return false; + } + } else { + return true; + } } return false; } @@ -58,9 +74,13 @@ public class Division extends FunctionTwoValues { result = FractionsRule2.execute(this); } else if (FractionsRule3.compare(this)) { result = FractionsRule3.execute(this); + } else if (FractionsRule11.compare(this)) { + result = FractionsRule11.execute(this); + } else if (FractionsRule12.compare(this)) { + result = FractionsRule12.execute(this); } else if (UndefinedRule2.compare(this)) { result = UndefinedRule2.execute(this); - } else if (variable1 instanceof Number && variable2 instanceof Number && root.exactMode == false) { + } else if (variable1 instanceof Number && variable2 instanceof Number) { result.add(((Number) variable1).divide((Number) variable2)); } return result; diff --git a/src/org/warp/picalculator/math/functions/Expression.java b/src/org/warp/picalculator/math/functions/Expression.java index 6f5e4eb3..15de8a67 100644 --- a/src/org/warp/picalculator/math/functions/Expression.java +++ b/src/org/warp/picalculator/math/functions/Expression.java @@ -32,6 +32,10 @@ public class Expression extends FunctionMultipleValues { super(root, values); } + public Expression(Calculator root, Function value) { + super(root, new Function[]{value}); + } + private boolean initialParenthesis = false; public Expression(Calculator root, String string) throws Error { @@ -616,7 +620,7 @@ public class Expression extends FunctionMultipleValues { } else { if (functions.length == 1) { final Function f = functions[0]; - if (f instanceof Number || f instanceof Variable || f instanceof Expression || f instanceof Division || f instanceof Joke || f instanceof Undefined || f instanceof Power || f instanceof Sine || f instanceof Cosine || f instanceof Tangent || f instanceof ArcSine || f instanceof ArcCosine || f instanceof ArcTangent) { + if (f instanceof Number || f instanceof Variable || f instanceof Expression || f instanceof Division || f instanceof Joke || f instanceof Undefined || f instanceof Power || f instanceof Sine || f instanceof Cosine || f instanceof Tangent || f instanceof ArcSine || f instanceof ArcCosine || f instanceof ArcTangent || f instanceof RootSquare) { parenthesisneeded = false; } if (f instanceof Multiplication) { diff --git a/src/org/warp/picalculator/math/functions/Multiplication.java b/src/org/warp/picalculator/math/functions/Multiplication.java index 0611e4d4..1356cd88 100644 --- a/src/org/warp/picalculator/math/functions/Multiplication.java +++ b/src/org/warp/picalculator/math/functions/Multiplication.java @@ -6,6 +6,7 @@ import org.warp.picalculator.Error; import org.warp.picalculator.math.Calculator; import org.warp.picalculator.math.MathematicalSymbols; import org.warp.picalculator.math.rules.ExponentRule15; +import org.warp.picalculator.math.rules.FractionsRule14; import org.warp.picalculator.math.rules.NumberRule1; import org.warp.picalculator.math.rules.NumberRule2; import org.warp.picalculator.math.rules.NumberRule6; @@ -52,6 +53,9 @@ public class Multiplication extends FunctionTwoValues { if (ExponentRule15.compare(this)) { return true; } + if (FractionsRule14.compare(this)) { + return true; + } if (MultiplicationMethod1.compare(this)) { return true; } @@ -71,6 +75,8 @@ public class Multiplication extends FunctionTwoValues { result = NumberRule6.execute(this); } else if (ExponentRule15.compare(this)) { result = ExponentRule15.execute(this); + } else if (FractionsRule14.compare(this)) { + result = FractionsRule14.execute(this); } else if (MultiplicationMethod1.compare(this)) { result = MultiplicationMethod1.execute(this); } else if (variable1.isSolved() & variable2.isSolved()) { @@ -122,8 +128,12 @@ public class Multiplication extends FunctionTwoValues { } ok[val] = true; } else if (tmpVar[val] instanceof Expression) { - ok[0] = true; - ok[1] = true; + if (((Expression)tmpVar[val]).parenthesisNeeded() == true) { + ok[0] = true; + ok[1] = true; + } else { + break; + } } else if (tmpVar[val] instanceof FunctionTwoValues) { if (val == 0) { tmpVar[val] = ((FunctionTwoValues) tmpVar[val]).variable2; diff --git a/src/org/warp/picalculator/math/functions/Number.java b/src/org/warp/picalculator/math/functions/Number.java index 7ad18b6a..f1f34f29 100644 --- a/src/org/warp/picalculator/math/functions/Number.java +++ b/src/org/warp/picalculator/math/functions/Number.java @@ -7,6 +7,7 @@ import java.util.LinkedList; import java.util.List; import org.nevec.rjm.BigDecimalMath; +import org.nevec.rjm.BigIntegerMath; import org.warp.picalculator.Error; import org.warp.picalculator.Utils; import org.warp.picalculator.gui.DisplayManager; @@ -228,15 +229,34 @@ public class Number implements Function { @Override public boolean isSolved() { - return true; + if (root.exactMode) { + return isInteger(); + } else { + return true; + } } @Override public List