diff --git a/forge-gui-mobile/src/forge/Forge.java b/forge-gui-mobile/src/forge/Forge.java index 4cbb9b327db..ef88c70b228 100644 --- a/forge-gui-mobile/src/forge/Forge.java +++ b/forge-gui-mobile/src/forge/Forge.java @@ -38,9 +38,10 @@ import forge.util.Utils; import java.io.File; import java.io.FileFilter; +import java.util.ArrayDeque; import java.util.ArrayList; +import java.util.Deque; import java.util.List; -import java.util.Stack; public class Forge implements ApplicationListener { public static final String CURRENT_VERSION = "1.6.33.001"; @@ -57,7 +58,7 @@ public class Forge implements ApplicationListener { private static KeyInputAdapter keyInputAdapter; private static boolean exited; private static int continuousRenderingCount = 1; //initialize to 1 since continuous rendering is the default - private static final Stack screens = new Stack<>(); + private static final Deque Dscreens = new ArrayDeque<>(); private static boolean textureFiltering = false; private static boolean destroyThis = false; public static String extrawide = "default"; @@ -259,13 +260,13 @@ public class Forge implements ApplicationListener { } public static boolean onHomeScreen() { - return screens.size() == 1; + return Dscreens.size() == 1; } public static void back() { if(destroyThis && isLandscapeMode()) return; - if (screens.size() < 2) { + if (Dscreens.size() < 2) { exit(false); //prompt to exit if attempting to go back from home screen return; } @@ -273,8 +274,8 @@ public class Forge implements ApplicationListener { @Override public void run(Boolean result) { if (result) { - screens.pop(); - setCurrentScreen(screens.lastElement()); + Dscreens.removeFirst(); + setCurrentScreen(Dscreens.getFirst()); } } }); @@ -282,12 +283,12 @@ public class Forge implements ApplicationListener { //set screen that will be gone to on pressing Back before going to current Back screen public static void setBackScreen(final FScreen screen0, boolean replace) { - screens.remove(screen0); //remove screen from previous position in navigation history - int index = screens.size() - 1; + Dscreens.remove(screen0); //remove screen from previous position in navigation history + int index = Dscreens.size() - 1; if (index > 0) { - screens.add(index, screen0); + Dscreens.addLast(screen0); if (replace) { //remove previous back screen if replacing back screen - screens.remove(index - 1); + Dscreens.removeFirst(); } } } @@ -349,7 +350,7 @@ public class Forge implements ApplicationListener { if (currentScreen == screen0) { return; } if (currentScreen == null) { - screens.push(screen0); + Dscreens.addFirst(screen0); setCurrentScreen(screen0); return; } @@ -358,11 +359,11 @@ public class Forge implements ApplicationListener { @Override public void run(Boolean result) { if (result) { - if (replaceBackScreen && !screens.isEmpty()) { - screens.pop(); + if (replaceBackScreen && !Dscreens.isEmpty()) { + Dscreens.removeFirst(); } - if (screens.peek() != screen0) { //prevent screen being its own back screen - screens.push(screen0); + if (Dscreens.peekFirst() != screen0) { //prevent screen being its own back screen + Dscreens.addFirst(screen0); } setCurrentScreen(screen0); } @@ -505,7 +506,7 @@ public class Forge implements ApplicationListener { currentScreen.onClose(null); currentScreen = null; } - screens.clear(); + Dscreens.clear(); graphics.dispose(); SoundSystem.instance.dispose(); try { diff --git a/forge-gui-mobile/src/forge/Graphics.java b/forge-gui-mobile/src/forge/Graphics.java index a5df4f53ca7..f339a8af981 100644 --- a/forge-gui-mobile/src/forge/Graphics.java +++ b/forge-gui-mobile/src/forge/Graphics.java @@ -19,7 +19,9 @@ import forge.assets.FSkinFont; import forge.toolbox.FDisplayObject; import forge.util.Utils; import forge.util.TextBounds; -import java.util.Stack; + +import java.util.ArrayDeque; +import java.util.Deque; public class Graphics { private static final int GL_BLEND = GL20.GL_BLEND; @@ -27,7 +29,7 @@ public class Graphics { private final SpriteBatch batch = new SpriteBatch(); private final ShapeRenderer shapeRenderer = new ShapeRenderer(); - private final Stack transforms = new Stack<>(); + private final Deque Dtransforms = new ArrayDeque<>(); private final Vector3 tmp = new Vector3(); private float regionHeight; private Rectangle bounds; @@ -70,7 +72,7 @@ public class Graphics { batch.flush(); //must flush batch to prevent other things not rendering Rectangle clip = new Rectangle(adjustX(x), adjustY(y, h), w, h); - if (!transforms.isEmpty()) { //transform position if needed + if (!Dtransforms.isEmpty()) { //transform position if needed tmp.set(clip.x, clip.y, 0); tmp.mul(batch.getTransformMatrix()); float minX = tmp.x; @@ -121,7 +123,7 @@ public class Graphics { final Rectangle parentBounds = bounds; bounds = new Rectangle(parentBounds.x + displayObj.getLeft(), parentBounds.y + displayObj.getTop(), displayObj.getWidth(), displayObj.getHeight()); - if (!transforms.isEmpty()) { //transform screen position if needed by applying transform matrix to rectangle + if (!Dtransforms.isEmpty()) { //transform screen position if needed by applying transform matrix to rectangle updateScreenPosForRotation(displayObj); } else { @@ -542,7 +544,7 @@ public class Graphics { } private void startShape(ShapeType shapeType) { - if (!transforms.isEmpty()) { + if (!Dtransforms.isEmpty()) { //must copy matrix before starting shape if transformed shapeRenderer.setTransformMatrix(batch.getTransformMatrix()); } @@ -624,7 +626,7 @@ public class Graphics { public void startRotateTransform(float originX, float originY, float rotation) { batch.end(); - transforms.add(0, new Matrix4(batch.getTransformMatrix().idt())); //startshape is using this above as reference + Dtransforms.addFirst(new Matrix4(batch.getTransformMatrix().idt())); //startshape is using this above as reference batch.getTransformMatrix().idt().translate(adjustX(originX), adjustY(originY, 0), 0).rotate(Vector3.Z, rotation).translate(-adjustX(originX), -adjustY(originY, 0), 0); batch.begin(); } @@ -632,7 +634,7 @@ public class Graphics { public void endTransform() { batch.end(); shapeRenderer.setTransformMatrix(batch.getTransformMatrix().idt()); - transforms.pop(); + Dtransforms.removeFirst(); batch.getTransformMatrix().idt(); //reset shapeRenderer.getTransformMatrix().idt(); //reset batch.begin();