From 8337763f8ffe191b8325577ddacaf4fb19417259 Mon Sep 17 00:00:00 2001 From: drdev Date: Tue, 10 Mar 2015 14:38:53 +0000 Subject: [PATCH] Prevent continuous rendering getting stuck on or off --- forge-gui-mobile/src/forge/Forge.java | 18 +++++++++++++----- .../src/forge/animation/ForgeAnimation.java | 10 +++------- .../forge/screens/settings/GuiDownloader.java | 9 ++++----- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/forge-gui-mobile/src/forge/Forge.java b/forge-gui-mobile/src/forge/Forge.java index 604e5569a19..49604d54d39 100644 --- a/forge-gui-mobile/src/forge/Forge.java +++ b/forge-gui-mobile/src/forge/Forge.java @@ -49,7 +49,7 @@ public class Forge implements ApplicationListener { private static SplashScreen splashScreen; private static KeyInputAdapter keyInputAdapter; private static boolean exited; - private static boolean initialLoadFinished; + private static int continuousRenderingCount = 1; //initialize to 1 since continuous rendering is the default private static final Stack screens = new Stack(); public static HostedMatch hostedMatch; @@ -109,8 +109,7 @@ public class Forge implements ApplicationListener { } private void afterDbLoaded() { - initialLoadFinished = true; - Gdx.graphics.setContinuousRendering(false); //save power consumption by disabling continuous rendering once assets loaded + stopContinuousRendering(); //save power consumption by disabling continuous rendering once assets loaded FSkin.loadFull(splashScreen); @@ -130,8 +129,17 @@ public class Forge implements ApplicationListener { return deviceAdapter; } - public static boolean isInitialLoadFinished() { - return initialLoadFinished; + public static void startContinuousRendering() { + if (++continuousRenderingCount == 1) { + //only set continuous rendering to true if needed + Gdx.graphics.setContinuousRendering(true); + } + } + public static void stopContinuousRendering() { + if (continuousRenderingCount > 0 && --continuousRenderingCount == 0) { + //only set continuous rendering to false if all continuous rendering requests have been ended + Gdx.graphics.setContinuousRendering(false); + } } public static void showMenu() { diff --git a/forge-gui-mobile/src/forge/animation/ForgeAnimation.java b/forge-gui-mobile/src/forge/animation/ForgeAnimation.java index 7d5f9bb612f..0450e11ddcb 100644 --- a/forge-gui-mobile/src/forge/animation/ForgeAnimation.java +++ b/forge-gui-mobile/src/forge/animation/ForgeAnimation.java @@ -15,7 +15,7 @@ public abstract class ForgeAnimation { activeAnimations.add(this); if (activeAnimations.size() == 1) { //if first animation being started, ensure continuous rendering turned on - Gdx.graphics.setContinuousRendering(true); + Forge.startContinuousRendering(); } } @@ -31,9 +31,7 @@ public abstract class ForgeAnimation { } if (activeAnimations.isEmpty()) { //when all animations have ended, turn continuous rendering back off - if (Forge.isInitialLoadFinished()) { //don't turn back on continuous rendering if initial load isn't finished yet - Gdx.graphics.setContinuousRendering(false); - } + Forge.stopContinuousRendering(); } } @@ -44,9 +42,7 @@ public abstract class ForgeAnimation { animation.onEnd(true); } activeAnimations.clear(); - if (Forge.isInitialLoadFinished()) { //don't turn back on continuous rendering if initial load isn't finished yet - Gdx.graphics.setContinuousRendering(false); - } + Forge.stopContinuousRendering(); } //return true if animation should continue, false to stop the animation diff --git a/forge-gui-mobile/src/forge/screens/settings/GuiDownloader.java b/forge-gui-mobile/src/forge/screens/settings/GuiDownloader.java index 1a6eaeb8b52..2faee644ced 100644 --- a/forge-gui-mobile/src/forge/screens/settings/GuiDownloader.java +++ b/forge-gui-mobile/src/forge/screens/settings/GuiDownloader.java @@ -19,8 +19,7 @@ package forge.screens.settings; import java.net.Proxy; -import com.badlogic.gdx.Gdx; - +import forge.Forge; import forge.UiCommand; import forge.download.GuiDownloadService; import forge.download.GuiDownloadZipService; @@ -45,7 +44,7 @@ public class GuiDownloader extends FDialog { private final UiCommand cmdClose = new UiCommand() { @Override public void run() { - Gdx.graphics.setContinuousRendering(false); + Forge.stopContinuousRendering(); service.setCancel(true); hide(); if (callback != null) { @@ -91,7 +90,7 @@ public class GuiDownloader extends FDialog { progressBar.reset(); progressBar.setShowProgressTrail(true); progressBar.setDescription("Scanning for existing items..."); - Gdx.graphics.setContinuousRendering(true); + Forge.startContinuousRendering(); show(); @@ -99,7 +98,7 @@ public class GuiDownloader extends FDialog { @Override public void run() { if (!(service instanceof GuiDownloadZipService)) { //retain continuous rendering for zip service - Gdx.graphics.setContinuousRendering(false); + Forge.stopContinuousRendering(); } progressBar.setShowProgressTrail(false); }