From c906c43b8be6c4ca49aceac4c984793ddfc5c3ac Mon Sep 17 00:00:00 2001 From: Andrea Cavalli Date: Mon, 25 Feb 2019 13:12:22 +0100 Subject: [PATCH 1/2] Updated TeaVM to the latest snapshot and fixed panels history behaviour --- Flow | 2 +- bigdecimal-math | 2 +- core/.classpath | 2 +- core/pom.xml | 2 +- .../cavallium/warppi/gui/DisplayManager.java | 99 ++++++++++--------- desktop/.classpath | 2 +- desktop/.settings/org.eclipse.jdt.core.prefs | 8 +- engine-jogl/.classpath | 2 +- hardware/.classpath | 2 +- hardware/.settings/org.eclipse.jdt.core.prefs | 8 +- pom.xml | 21 ++-- rules/.classpath | 2 +- teavm/.classpath | 2 +- teavm/.settings/org.eclipse.jdt.core.prefs | 8 +- teavm/pom.xml | 4 +- util/.classpath | 2 +- 16 files changed, 90 insertions(+), 78 deletions(-) diff --git a/Flow b/Flow index 59b89e9d..92db616e 160000 --- a/Flow +++ b/Flow @@ -1 +1 @@ -Subproject commit 59b89e9d165c3fc615ca44aa742b531caf13fcb6 +Subproject commit 92db616ef508f16fe30e8e37d17d7d7a18f56f4a diff --git a/bigdecimal-math b/bigdecimal-math index b08a4a6a..40d89e53 160000 --- a/bigdecimal-math +++ b/bigdecimal-math @@ -1 +1 @@ -Subproject commit b08a4a6aca41fbc6bf0c4bd252f716d518d368a5 +Subproject commit 40d89e539223aaa9202326833a2c813bed3c6eef diff --git a/core/.classpath b/core/.classpath index 61560899..4328dab5 100644 --- a/core/.classpath +++ b/core/.classpath @@ -18,7 +18,7 @@ - + diff --git a/core/pom.xml b/core/pom.xml index 39c3ca38..ba81e79a 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -17,7 +17,7 @@ it.cavallium warppi-flow - 0.9.0a3 + 1.0.1 it.cavallium diff --git a/core/src/main/java/it/cavallium/warppi/gui/DisplayManager.java b/core/src/main/java/it/cavallium/warppi/gui/DisplayManager.java index cf913787..1efbabb6 100644 --- a/core/src/main/java/it/cavallium/warppi/gui/DisplayManager.java +++ b/core/src/main/java/it/cavallium/warppi/gui/DisplayManager.java @@ -92,32 +92,23 @@ public final class DisplayManager implements RenderingLoop { } /* - * private void load_skin() { - * try { - * skin_tex = glGenTextures(); - * glBindTexture(GL_TEXTURE_2D, skin_tex); - * glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + * private void load_skin() { try { skin_tex = glGenTextures(); + * glBindTexture(GL_TEXTURE_2D, skin_tex); glPixelStorei(GL_UNPACK_ALIGNMENT, + * 1); * - * InputStream in = new FileInputStream("skin.png"); - * PNGDecoder decoder = new PNGDecoder(in); + * InputStream in = new FileInputStream("skin.png"); PNGDecoder decoder = new + * PNGDecoder(in); * * System.out.println("width="+decoder.getWidth()); * System.out.println("height="+decoder.getHeight()); * * ByteBuffer buf = * ByteBuffer.allocateDirect(4*decoder.getWidth()*decoder.getHeight()); - * decoder.decode(buf, decoder.getWidth()*4, Format.RGBA); - * buf.flip(); + * decoder.decode(buf, decoder.getWidth()*4, Format.RGBA); buf.flip(); * - * skin = buf; - * skin_w = decoder.getWidth(); - * skin_h = decoder.getHeight(); - * glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, skin_w, - * skin_h, 0, GL_RGBA, GL_UNSIGNED_BYTE, skin); - * } catch (IOException ex) { - * ex.printStackTrace(); - * } - * } + * skin = buf; skin_w = decoder.getWidth(); skin_h = decoder.getHeight(); + * glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, skin_w, skin_h, 0, GL_RGBA, + * GL_UNSIGNED_BYTE, skin); } catch (IOException ex) { ex.printStackTrace(); } } */ private GraphicEngine chooseGraphicEngine() { @@ -139,7 +130,8 @@ public final class DisplayManager implements RenderingLoop { } d = Utils.getOrDefault(Engine.getPlatform().getEnginesList(), "headless 24 bit engine", null); if (d != null && d.isSupported()) { - System.err.println("Using Headless 24 bit Engine! This is a problem! No other graphic engines are available."); + System.err.println( + "Using Headless 24 bit Engine! This is a problem! No other graphic engines are available."); return d; } d = Utils.getOrDefault(Engine.getPlatform().getEnginesList(), "headless 256 colors engine", null); @@ -149,12 +141,14 @@ public final class DisplayManager implements RenderingLoop { } d = Utils.getOrDefault(Engine.getPlatform().getEnginesList(), "headless 8 colors engine", null); if (d != null && d.isSupported()) { - System.err.println("Using Headless basic Engine! This is a problem! No other graphic engines are available."); + System.err + .println("Using Headless basic Engine! This is a problem! No other graphic engines are available."); return d; } d = Utils.getOrDefault(Engine.getPlatform().getEnginesList(), "HTML5 engine", null); if (d != null && d.isSupported()) { - Engine.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_NODEBUG, "Using Html Graphic Engine"); + Engine.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_NODEBUG, + "Using Html Graphic Engine"); return d; } d = new NoGuiEngine(); @@ -165,8 +159,6 @@ public final class DisplayManager implements RenderingLoop { throw new UnsupportedOperationException("No graphic engines available."); } - - public void closeScreen() { boolean isLastSession = sessions[1] == null; if (!isLastSession) { @@ -186,10 +178,10 @@ public final class DisplayManager implements RenderingLoop { } else { currentSession = 0; } - updateCurrentScreen(sessions[currentSession]); + updateCurrentScreen(sessions[currentSession]); } } - + public void setScreen(final Screen screen) { boolean mustBeAddedToHistory = screen.initialized == false; if (!mustBeAddedToHistory) { @@ -200,34 +192,44 @@ public final class DisplayManager implements RenderingLoop { mustBeAddedToHistory |= !found; } if (mustBeAddedToHistory) { - if (screen.historyBehavior == HistoryBehavior.NORMAL || screen.historyBehavior == HistoryBehavior.ALWAYS_KEEP_IN_HISTORY) { + if (screen.historyBehavior == HistoryBehavior.NORMAL + || screen.historyBehavior == HistoryBehavior.ALWAYS_KEEP_IN_HISTORY) { if (currentSession > 0) { - final int sl = sessions.length; //TODO: I don't know why if i don't add +5 or more some items disappear + final int sl = sessions.length; // TODO: I don't know why if i don't add +5 or more some items + // disappear List newSessions = new LinkedList<>(); int i = 0; for (Screen s : sessions) { + if (i == currentSession) { + currentSession = newSessions.size(); + newSessions.add(screen); + } if (s != null) { if (i < currentSession) { - if (s.historyBehavior != HistoryBehavior.DONT_KEEP_IN_HISTORY) - newSessions.add(s); - } else { if (s.historyBehavior == HistoryBehavior.ALWAYS_KEEP_IN_HISTORY) { newSessions.add(s); } + } else { + if (s.historyBehavior != HistoryBehavior.DONT_KEEP_IN_HISTORY) + newSessions.add(s); } } i++; } - sessions = newSessions.toArray(new Screen[5]); - currentSession = newSessions.indexOf(screen); -// sessions = Arrays.copyOfRange(sessions, currentSession, sl); + for (int j = 0; j < sl; j++) { + if (j < newSessions.size()) { + sessions[j] = newSessions.get(j); + } else { + sessions[j] = null; + } + } } else { currentSession = 0; + for (int i = sessions.length - 1; i >= 1; i--) { + sessions[i] = sessions[i - 1]; + } + sessions[0] = screen; } - for (int i = sessions.length - 1; i >= 1; i--) { - sessions[i] = sessions[i - 1]; - } - sessions[0] = screen; } else { currentSession = -1; } @@ -254,7 +256,8 @@ public final class DisplayManager implements RenderingLoop { public void replaceScreen(final Screen screen) { if (screen.initialized == false) { - if (screen.historyBehavior == HistoryBehavior.NORMAL || screen.historyBehavior == HistoryBehavior.ALWAYS_KEEP_IN_HISTORY) { + if (screen.historyBehavior == HistoryBehavior.NORMAL + || screen.historyBehavior == HistoryBehavior.ALWAYS_KEEP_IN_HISTORY) { sessions[currentSession] = screen; } else { currentSession = -1; @@ -300,7 +303,8 @@ public final class DisplayManager implements RenderingLoop { public void goBack() { if (canGoBack()) { - if (currentSession >= 0 && screen != sessions[currentSession]) {} else { + if (currentSession >= 0 && screen != sessions[currentSession]) { + } else { currentSession += 1; } screen = sessions[currentSession]; @@ -359,8 +363,8 @@ public final class DisplayManager implements RenderingLoop { fonts[1] = engine.loadFont("smallest"); fonts[2] = engine.loadFont("norm"); fonts[3] = engine.loadFont("smal"); - //4 - //fonts[5] = engine.loadFont("square"); + // 4 + // fonts[5] = engine.loadFont("square"); } private void draw_init() { @@ -391,7 +395,9 @@ public final class DisplayManager implements RenderingLoop { fnt.use(engine); } renderer.glColor3i(129, 28, 22); - renderer.glDrawStringRight(StaticVars.screenSize[0] - 2, StaticVars.screenSize[1] - (fnt.getCharacterHeight() + 2), Engine.getPlatform().getSettings().getCalculatorNameUppercase() + " CALCULATOR"); + renderer.glDrawStringRight(StaticVars.screenSize[0] - 2, + StaticVars.screenSize[1] - (fnt.getCharacterHeight() + 2), + Engine.getPlatform().getSettings().getCalculatorNameUppercase() + " CALCULATOR"); renderer.glColor3i(149, 32, 26); renderer.glDrawStringCenter(StaticVars.screenSize[0] / 2, 22, error); renderer.glColor3i(164, 34, 28); @@ -409,14 +415,16 @@ public final class DisplayManager implements RenderingLoop { if (fonts[0] != null && fonts[0] != engine.getRenderer().getCurrentFont()) { fonts[0].use(engine); } - if (hud.visible) hud.renderBackground(); + if (hud.visible) + hud.renderBackground(); screen.render(); if (hud.visible) { hud.render(); hud.renderTopmostBackground(); } screen.renderTopmost(); - if (hud.visible) hud.renderTopmost(); + if (hud.visible) + hud.renderTopmost(); } } @@ -483,7 +491,8 @@ public final class DisplayManager implements RenderingLoop { engine.start(getDrawable()); } catch (final Exception ex) { ex.printStackTrace(); - } finally {} + } finally { + } } public void changeBrightness(final float change) { diff --git a/desktop/.classpath b/desktop/.classpath index e33daad6..d0ba9370 100644 --- a/desktop/.classpath +++ b/desktop/.classpath @@ -23,7 +23,7 @@ - + diff --git a/desktop/.settings/org.eclipse.jdt.core.prefs b/desktop/.settings/org.eclipse.jdt.core.prefs index b8947ec6..46855213 100644 --- a/desktop/.settings/org.eclipse.jdt.core.prefs +++ b/desktop/.settings/org.eclipse.jdt.core.prefs @@ -1,6 +1,6 @@ eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/engine-jogl/.classpath b/engine-jogl/.classpath index f3872e63..c9dea96e 100644 --- a/engine-jogl/.classpath +++ b/engine-jogl/.classpath @@ -18,7 +18,7 @@ - + diff --git a/hardware/.classpath b/hardware/.classpath index f3872e63..c9dea96e 100644 --- a/hardware/.classpath +++ b/hardware/.classpath @@ -18,7 +18,7 @@ - + diff --git a/hardware/.settings/org.eclipse.jdt.core.prefs b/hardware/.settings/org.eclipse.jdt.core.prefs index b8947ec6..46855213 100644 --- a/hardware/.settings/org.eclipse.jdt.core.prefs +++ b/hardware/.settings/org.eclipse.jdt.core.prefs @@ -1,6 +1,6 @@ eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/pom.xml b/pom.xml index c1f1acbf..1ef610bf 100755 --- a/pom.xml +++ b/pom.xml @@ -28,9 +28,10 @@ UTF-8 - 1.8 - 1.8 - 1.8 + 11 + 11 + 11 + 11 src/main/java src/main/java src/main/resources @@ -43,7 +44,7 @@ bigdecimal-math Flow rules - + desktop engine-jogl teavm @@ -138,10 +139,6 @@ org.apache.maven.plugins maven-compiler-plugin 3.8.0 - - ${maven.compiler.source} - ${maven.compiler.target} - org.apache.maven.plugins @@ -161,6 +158,12 @@ org.apache.maven.plugins maven-surefire-plugin 2.22.0 + + false + + --illegal-access=permit + + org.apache.felix @@ -212,7 +215,7 @@ - + diff --git a/rules/.classpath b/rules/.classpath index f3872e63..c9dea96e 100644 --- a/rules/.classpath +++ b/rules/.classpath @@ -18,7 +18,7 @@ - + diff --git a/teavm/.classpath b/teavm/.classpath index d0e5faff..19368e50 100644 --- a/teavm/.classpath +++ b/teavm/.classpath @@ -13,7 +13,7 @@ - + diff --git a/teavm/.settings/org.eclipse.jdt.core.prefs b/teavm/.settings/org.eclipse.jdt.core.prefs index b8947ec6..46855213 100644 --- a/teavm/.settings/org.eclipse.jdt.core.prefs +++ b/teavm/.settings/org.eclipse.jdt.core.prefs @@ -1,6 +1,6 @@ eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/teavm/pom.xml b/teavm/pom.xml index d3212794..6aaf5c92 100644 --- a/teavm/pom.xml +++ b/teavm/pom.xml @@ -27,7 +27,7 @@ org.teavm teavm-classlib - 0.6.0-dev-567 + 0.6.0-dev-682 provided @@ -86,7 +86,7 @@ org.teavm teavm-maven-plugin - 0.6.0-dev-567 + 0.6.0-dev-682 diff --git a/util/.classpath b/util/.classpath index 5e8a55fe..4559ca0b 100644 --- a/util/.classpath +++ b/util/.classpath @@ -13,7 +13,7 @@ - + From 17d1bddbf18e8607e86b34552ce438a5e0096013 Mon Sep 17 00:00:00 2001 From: Andrea Cavalli Date: Mon, 29 Apr 2019 23:07:24 +0200 Subject: [PATCH 2/2] Fixed picture bug --- core/src/main/resources/algebra_input.gif | Bin 6652 -> 30765 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/core/src/main/resources/algebra_input.gif b/core/src/main/resources/algebra_input.gif index fd788bb9540167eed7687b5597c7c41b5e7f3577..6aaebdfb84b8aac603bf95660c5c2730077b43da 100644 GIT binary patch literal 30765 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 WOKAUpn7Rw7JTsMlmj4}<*Z&8!y6g}D