Prevent flickering when multiple dialogs appear in quick succession

This commit is contained in:
drdev
2014-10-03 13:25:52 +00:00
parent 1d19df364f
commit 9f25b55cfb
6 changed files with 22 additions and 19 deletions

View File

@@ -81,7 +81,7 @@ public class ImageCache {
* and cannot be loaded from disk. pass -1 for width and/or height to avoid resizing in that dimension.
*/
public static BufferedImage getImage(final CardView card, final int width, final int height) {
final String key = card.getOriginal().getImageKey();
final String key = card.getOriginal().getImageKey(false);
return scaleImage(key, width, height, true);
}

View File

@@ -48,7 +48,7 @@ public final class FImageUtil {
* For flip cards, returns the un-flipped image.
*/
public static BufferedImage getImage(final CardStateView card) {
BufferedImage image = ImageCache.getOriginalImage(card.getImageKey(), true);
BufferedImage image = ImageCache.getOriginalImage(card.getImageKey(false), true);
final int foilIndex = card.getFoilIndex();
if (image != null && foilIndex > 0) {
image = getImageWithFoilEffect(image, foilIndex);

View File

@@ -80,7 +80,7 @@ public class ImageCache {
}
public static Texture getImage(CardView card) {
final String key = card.getOriginal().getImageKey();
final String key = card.getOriginal().getImageKey(false);
return getImage(key, true);
}

View File

@@ -83,7 +83,7 @@ public class CardRenderer {
float w = width - 2 * x;
float h = height - 2 * y;
final Texture image = ImageCache.getImage(card.getOriginal().getImageKey(), true);
final Texture image = ImageCache.getImage(card.getOriginal().getImageKey(false), true);
if (image == ImageCache.defaultImage) { //support drawing card image manually if card image not found
float ratio = h / w;
if (ratio > FCardPanel.ASPECT_RATIO) {
@@ -221,7 +221,7 @@ public class CardRenderer {
return getCardArt(ImageKeys.getImageKey(pc, false), pc.getRules().getSplitType() == CardSplitType.Split);
}
public static FImageComplex getCardArt(CardView card) {
return getCardArt(card.getOriginal().getImageKey(), card.isSplitCard());
return getCardArt(card.getOriginal().getImageKey(true), card.isSplitCard());
}
public static FImageComplex getCardArt(String imageKey, boolean isSplitCard) {
FImageComplex cardArt = cardArtCache.get(imageKey);

View File

@@ -1,5 +1,6 @@
package forge.toolbox;
import java.util.ArrayList;
import java.util.Stack;
import com.badlogic.gdx.Input.Keys;
@@ -52,6 +53,7 @@ public abstract class FOverlay extends FContainer {
@Override
public void run () {
tempOverlay.hide();
tempOverlay = null;
}
};
@@ -80,22 +82,14 @@ public abstract class FOverlay extends FContainer {
}
else if (!hidingAll) { //hiding all handles cleaning up overlay collection
if (overlays.get(overlays.size() - 1) == this) {
overlays.pop();
//after removing the top overlay, put up an empty overlay for a brief period
//after removing the top overlay, delay hiding overlay for a brief period
//to prevent back color flickering if another popup immediately follows
if (tempOverlay != this) {
if (tempOverlay == null) {
tempOverlay = new FOverlay() {
@Override
protected void doLayout(float width, float height) {
}
};
}
tempOverlay.backColor = backColor;
tempOverlay.show();
tempOverlay = this;
Timer.schedule(hideTempOverlayTask, 0.025f);
return;
}
overlays.pop();
}
else {
overlays.remove(this);
@@ -154,8 +148,17 @@ public abstract class FOverlay extends FContainer {
return true;
}
@Override
public void buildTouchListeners(float screenX, float screenY, ArrayList<FDisplayObject> listeners) {
if (tempOverlay == this) { return; } //suppress touch events if waiting to be hidden
super.buildTouchListeners(screenX, screenY, listeners);
}
@Override
public boolean keyDown(int keyCode) {
if (tempOverlay == this) { return false; } //suppress key events if waiting to be hidden
if (keyCode == Keys.ESCAPE || keyCode == Keys.BACK) {
if (Forge.endKeyInput()) { return true; }

View File

@@ -823,8 +823,8 @@ public class CardView extends GameEntityView {
/**
* @return the imageKey
*/
public String getImageKey() {
return mayBeShown ? imageKey : ImageKeys.HIDDEN_CARD;
public String getImageKey(boolean ignoreMayBeShown) {
return mayBeShown || ignoreMayBeShown ? imageKey : ImageKeys.HIDDEN_CARD;
}
/**