From 8cabc244f7f250a204b599916da0c56ef55b4469 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Fri, 4 Jul 2025 19:32:50 +0800 Subject: [PATCH 1/8] fix rounded borders for tokens since it gets the full bordered image on scryfall by default now --- forge-gui-mobile/src/forge/card/CardRenderer.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/forge-gui-mobile/src/forge/card/CardRenderer.java b/forge-gui-mobile/src/forge/card/CardRenderer.java index ca9c0b79552..dd95ba34db8 100644 --- a/forge-gui-mobile/src/forge/card/CardRenderer.java +++ b/forge-gui-mobile/src/forge/card/CardRenderer.java @@ -609,7 +609,7 @@ public class CardRenderer { CardImageRenderer.drawCardImage(g, CardView.getCardForUi(pc), false, x, y, w, h, pos, true, true); } else { if (Forge.enableUIMask.equals("Full")) { - if (image.toString().contains(".fullborder.")) + if (image.toString().contains(".fullborder.") || image.toString().contains("tokens")) g.drawCardRoundRect(image, null, x, y, w, h, false, false); else { //tint the border @@ -663,7 +663,7 @@ public class CardRenderer { if (FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_ROTATE_PLANE_OR_PHENOMENON) && (card.getCurrentState().isPhenomenon() || card.getCurrentState().isPlane() || (card.getCurrentState().isBattle() && !showAltState) || (card.getAlternateState() != null && card.getAlternateState().isBattle() && showAltState)) && rotate) { if (Forge.enableUIMask.equals("Full")) { - if (image.toString().contains(".fullborder.")) + if (image.toString().contains(".fullborder.") || image.toString().contains("tokens")) g.drawCardRoundRect(image, x, y, w, h, x + w / 2, y + h / 2, -90); else { g.drawRotatedImage(FSkin.getBorders().get(0), x, y, w, h, x + w / 2, y + h / 2, -90); @@ -675,7 +675,7 @@ public class CardRenderer { g.drawRotatedImage(image, x, y, w, h, x + w / 2, y + h / 2, -90); } else { if (Forge.enableUIMask.equals("Full") && canshow) { - if (image.toString().contains(".fullborder.")) + if (image.toString().contains(".fullborder.") || image.toString().contains("tokens")) g.drawCardRoundRect(image, crack_overlay, x, y, w, h, drawGray(card), magnify ? false : card.getDamage() > 0); else { //boolean t = (card.getCurrentState().getOriginalColors() != card.getCurrentState().getColors()) || card.getCurrentState().hasChangeColors(); From e73e72d15054dd10bb66117c7ff3fc0935a5f096 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Fri, 4 Jul 2025 20:10:54 +0800 Subject: [PATCH 2/8] update view check --- .../main/java/forge/game/card/CardView.java | 7 +++++++ .../forge/trackable/TrackableProperty.java | 2 ++ .../src/forge/card/CardRenderer.java | 20 ++++++++++++++----- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/forge-game/src/main/java/forge/game/card/CardView.java b/forge-game/src/main/java/forge/game/card/CardView.java index 96547dac712..7b92388d9fb 100644 --- a/forge-game/src/main/java/forge/game/card/CardView.java +++ b/forge-game/src/main/java/forge/game/card/CardView.java @@ -102,6 +102,13 @@ public class CardView extends GameEntityView { set(TrackableProperty.ImageKey, imageKey); } + public int getCardViewMode() { + return get(TrackableProperty.CardViewMode); + } + + public void updateCardViewMode(final int mode) { + set(TrackableProperty.CardViewMode, mode); + } public PlayerView getOwner() { return get(TrackableProperty.Owner); } diff --git a/forge-game/src/main/java/forge/trackable/TrackableProperty.java b/forge-game/src/main/java/forge/trackable/TrackableProperty.java index a303fb14d2d..121b304f7be 100644 --- a/forge-game/src/main/java/forge/trackable/TrackableProperty.java +++ b/forge-game/src/main/java/forge/trackable/TrackableProperty.java @@ -18,6 +18,8 @@ public enum TrackableProperty { Counters(TrackableTypes.CounterMapType), CurrentPlane(TrackableTypes.StringType), PlanarPlayer(TrackableTypes.PlayerViewType), + //CardViewMode + CardViewMode(TrackableTypes.IntegerType, FreezeMode.IgnoresFreeze), //Card Owner(TrackableTypes.PlayerViewType), diff --git a/forge-gui-mobile/src/forge/card/CardRenderer.java b/forge-gui-mobile/src/forge/card/CardRenderer.java index dd95ba34db8..d4e2ead164c 100644 --- a/forge-gui-mobile/src/forge/card/CardRenderer.java +++ b/forge-gui-mobile/src/forge/card/CardRenderer.java @@ -597,6 +597,7 @@ public class CardRenderer { public static void drawCard(Graphics g, IPaperCard pc, float x, float y, float w, float h, CardStackPosition pos) { Texture image = new RendererCachedCardImage(pc, false).getImage(); + final CardView card = CardView.getCardForUi(pc); float radius = (h - w) / 8; float croppedArea = isModernFrame(pc) ? CROP_MULTIPLIER : 0.97f; float minusxy = isModernFrame(pc) ? 0.0f : 0.13f * radius; @@ -609,7 +610,7 @@ public class CardRenderer { CardImageRenderer.drawCardImage(g, CardView.getCardForUi(pc), false, x, y, w, h, pos, true, true); } else { if (Forge.enableUIMask.equals("Full")) { - if (image.toString().contains(".fullborder.") || image.toString().contains("tokens")) + if (isFullBorder(card, image.toString())) g.drawCardRoundRect(image, null, x, y, w, h, false, false); else { //tint the border @@ -622,7 +623,6 @@ public class CardRenderer { g.drawImage(image, x, y, w, h); } if (pc.isFoil()) { //draw foil effect if needed - final CardView card = CardView.getCardForUi(pc); if (card.getCurrentState().getFoilIndex() == 0) { //if foil finish not yet established, assign a random one card.getCurrentState().setFoilIndexOverride(-1); } @@ -630,7 +630,7 @@ public class CardRenderer { } } else { //if card has invalid or no texture due to sudden changes in ImageCache, draw CardImageRenderer instead and wait for it to refresh automatically - CardImageRenderer.drawCardImage(g, CardView.getCardForUi(pc), false, x, y, w, h, pos, true, true); + CardImageRenderer.drawCardImage(g, card, false, x, y, w, h, pos, true, true); } } @@ -663,7 +663,7 @@ public class CardRenderer { if (FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_ROTATE_PLANE_OR_PHENOMENON) && (card.getCurrentState().isPhenomenon() || card.getCurrentState().isPlane() || (card.getCurrentState().isBattle() && !showAltState) || (card.getAlternateState() != null && card.getAlternateState().isBattle() && showAltState)) && rotate) { if (Forge.enableUIMask.equals("Full")) { - if (image.toString().contains(".fullborder.") || image.toString().contains("tokens")) + if (isFullBorder(card, image.toString())) g.drawCardRoundRect(image, x, y, w, h, x + w / 2, y + h / 2, -90); else { g.drawRotatedImage(FSkin.getBorders().get(0), x, y, w, h, x + w / 2, y + h / 2, -90); @@ -675,7 +675,7 @@ public class CardRenderer { g.drawRotatedImage(image, x, y, w, h, x + w / 2, y + h / 2, -90); } else { if (Forge.enableUIMask.equals("Full") && canshow) { - if (image.toString().contains(".fullborder.") || image.toString().contains("tokens")) + if (isFullBorder(card, image.toString())) g.drawCardRoundRect(image, crack_overlay, x, y, w, h, drawGray(card), magnify ? false : card.getDamage() > 0); else { //boolean t = (card.getCurrentState().getOriginalColors() != card.getCurrentState().getColors()) || card.getCurrentState().hasChangeColors(); @@ -699,6 +699,16 @@ public class CardRenderer { } } + private static boolean isFullBorder(final CardView card, final String image) { + if (card.getCardViewMode() < 1) { + if (image.contains(".fullborder.") || image.contains("tokens")) + card.updateCardViewMode(1); + else + card.updateCardViewMode(2); + } + return card.getCardViewMode() == 1; + } + private static boolean drawGray(CardView c) { if (c == null) return false; From b98b322dfe9190ee60f67b25092d64fbf0e8c030 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Fri, 4 Jul 2025 20:33:57 +0800 Subject: [PATCH 3/8] move check --- .../src/main/java/forge/game/card/CardView.java | 11 +++++++++++ .../src/forge/card/CardRenderer.java | 16 +++------------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/forge-game/src/main/java/forge/game/card/CardView.java b/forge-game/src/main/java/forge/game/card/CardView.java index 7b92388d9fb..4ee57988e8c 100644 --- a/forge-game/src/main/java/forge/game/card/CardView.java +++ b/forge-game/src/main/java/forge/game/card/CardView.java @@ -109,6 +109,17 @@ public class CardView extends GameEntityView { public void updateCardViewMode(final int mode) { set(TrackableProperty.CardViewMode, mode); } + + public boolean isFullBorder(final String image) { + if (getCardViewMode() < 1) { + if (image.contains(".fullborder.") || image.contains("tokens")) + updateCardViewMode(1); + else + updateCardViewMode(2); + } + return getCardViewMode() == 1; + } + public PlayerView getOwner() { return get(TrackableProperty.Owner); } diff --git a/forge-gui-mobile/src/forge/card/CardRenderer.java b/forge-gui-mobile/src/forge/card/CardRenderer.java index d4e2ead164c..f4400e93e6e 100644 --- a/forge-gui-mobile/src/forge/card/CardRenderer.java +++ b/forge-gui-mobile/src/forge/card/CardRenderer.java @@ -610,7 +610,7 @@ public class CardRenderer { CardImageRenderer.drawCardImage(g, CardView.getCardForUi(pc), false, x, y, w, h, pos, true, true); } else { if (Forge.enableUIMask.equals("Full")) { - if (isFullBorder(card, image.toString())) + if (card.isFullBorder(image.toString())) g.drawCardRoundRect(image, null, x, y, w, h, false, false); else { //tint the border @@ -663,7 +663,7 @@ public class CardRenderer { if (FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_ROTATE_PLANE_OR_PHENOMENON) && (card.getCurrentState().isPhenomenon() || card.getCurrentState().isPlane() || (card.getCurrentState().isBattle() && !showAltState) || (card.getAlternateState() != null && card.getAlternateState().isBattle() && showAltState)) && rotate) { if (Forge.enableUIMask.equals("Full")) { - if (isFullBorder(card, image.toString())) + if (card.isFullBorder(image.toString())) g.drawCardRoundRect(image, x, y, w, h, x + w / 2, y + h / 2, -90); else { g.drawRotatedImage(FSkin.getBorders().get(0), x, y, w, h, x + w / 2, y + h / 2, -90); @@ -675,7 +675,7 @@ public class CardRenderer { g.drawRotatedImage(image, x, y, w, h, x + w / 2, y + h / 2, -90); } else { if (Forge.enableUIMask.equals("Full") && canshow) { - if (isFullBorder(card, image.toString())) + if (card.isFullBorder(image.toString())) g.drawCardRoundRect(image, crack_overlay, x, y, w, h, drawGray(card), magnify ? false : card.getDamage() > 0); else { //boolean t = (card.getCurrentState().getOriginalColors() != card.getCurrentState().getColors()) || card.getCurrentState().hasChangeColors(); @@ -699,16 +699,6 @@ public class CardRenderer { } } - private static boolean isFullBorder(final CardView card, final String image) { - if (card.getCardViewMode() < 1) { - if (image.contains(".fullborder.") || image.contains("tokens")) - card.updateCardViewMode(1); - else - card.updateCardViewMode(2); - } - return card.getCardViewMode() == 1; - } - private static boolean drawGray(CardView c) { if (c == null) return false; From d69d005ce006d00d0bd036fd8976e8b0c36c0c57 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Fri, 4 Jul 2025 21:27:25 +0800 Subject: [PATCH 4/8] update remaining checks --- forge-gui-mobile/src/forge/card/CardImage.java | 7 ++++--- forge-gui-mobile/src/forge/card/CardImageRenderer.java | 10 +++++----- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/forge-gui-mobile/src/forge/card/CardImage.java b/forge-gui-mobile/src/forge/card/CardImage.java index a72dfd4e022..0c45b6c30a1 100644 --- a/forge-gui-mobile/src/forge/card/CardImage.java +++ b/forge-gui-mobile/src/forge/card/CardImage.java @@ -34,21 +34,22 @@ public class CardImage implements FImage { @Override public void draw(Graphics g, float x, float y, float w, float h) { + CardView cv = CardView.getCardForUi(card); if (image == null) { //attempt to retrieve card image if needed image = ImageCache.getInstance().getImage(card); if (image == null) { if (!Forge.enableUIMask.equals("Off")) //render this if mask is still loading - CardImageRenderer.drawCardImage(g, CardView.getCardForUi(card), false, x, y, w, h, CardStackPosition.Top, Forge.enableUIMask.equals("Art"), true); + CardImageRenderer.drawCardImage(g, cv, false, x, y, w, h, CardStackPosition.Top, Forge.enableUIMask.equals("Art"), true); return; //can't draw anything if can't be loaded yet } } if (image == ImageCache.getInstance().getDefaultImage() || Forge.enableUIMask.equals("Art")) { - CardImageRenderer.drawCardImage(g, CardView.getCardForUi(card), false, x, y, w, h, CardStackPosition.Top, true, true); + CardImageRenderer.drawCardImage(g, cv, false, x, y, w, h, CardStackPosition.Top, true, true); } else { if (Forge.enableUIMask.equals("Full")) { - if (image.toString().contains(".fullborder.")) + if (cv.isFullBorder(image.toString())) g.drawCardRoundRect(image, null, x, y, w, h, false, false); else { float radius = (h - w) / 8; diff --git a/forge-gui-mobile/src/forge/card/CardImageRenderer.java b/forge-gui-mobile/src/forge/card/CardImageRenderer.java index 9c8cda736cb..a242d8a1c5e 100644 --- a/forge-gui-mobile/src/forge/card/CardImageRenderer.java +++ b/forge-gui-mobile/src/forge/card/CardImageRenderer.java @@ -814,7 +814,7 @@ public class CardImageRenderer { } if (rotatePlane && (card.getCurrentState().isPhenomenon() || card.getCurrentState().isPlane() || (card.getCurrentState().isBattle() && !altState) || (card.getAlternateState() != null && card.getAlternateState().isBattle() && altState))) { if (Forge.enableUIMask.equals("Full")) { - if (image.toString().contains(".fullborder.")) + if (card.isFullBorder(image.toString())) g.drawCardRoundRect(image, new_x, new_y, new_w, new_h, new_x + new_w / 2, new_y + new_h / 2, -90); else { g.drawRotatedImage(FSkin.getBorders().get(0), new_x, new_y, new_w, new_h, new_x + new_w / 2, new_y + new_h / 2, -90); @@ -827,7 +827,7 @@ public class CardImageRenderer { } else if (rotateSplit && isCurrentCard && card.isSplitCard() && canshow && !card.isFaceDown()) { boolean isAftermath = card.getText().contains("Aftermath") || card.getAlternateState().getOracleText().contains("Aftermath"); if (Forge.enableUIMask.equals("Full")) { - if (image.toString().contains(".fullborder.")) + if (card.isFullBorder(image.toString())) g.drawCardRoundRect(image, new_x, new_y, new_w, new_h, new_x + new_w / 2, new_y + new_h / 2, isAftermath ? 90 : -90); else { g.drawRotatedImage(FSkin.getBorders().get(ImageCache.getInstance().getFSkinBorders(card)), new_x, new_y, new_w, new_h, new_x + new_w / 2, new_y + new_h / 2, isAftermath ? 90 : -90); @@ -843,7 +843,7 @@ public class CardImageRenderer { if (card.isSplitCard() && rotateSplit && isCurrentCard) { boolean isAftermath = card.getText().contains("Aftermath") || card.getAlternateState().getOracleText().contains("Aftermath"); if (Forge.enableUIMask.equals("Full")) { - if (image.toString().contains(".fullborder.")) + if (card.isFullBorder(image.toString())) g.drawCardRoundRect(image, new_x, new_y, new_w, new_h, new_x + new_w / 2, new_y + new_h / 2, isAftermath ? 90 : -90); else { g.drawRotatedImage(FSkin.getBorders().get(ImageCache.getInstance().getFSkinBorders(card)), new_x, new_y, new_w, new_h, new_x + new_w / 2, new_y + new_h / 2, isAftermath ? 90 : -90); @@ -855,7 +855,7 @@ public class CardImageRenderer { g.drawRotatedImage(image, new_x, new_y, new_w, new_h, new_x + new_w / 2, new_y + new_h / 2, isAftermath ? 90 : -90); } else { if (Forge.enableUIMask.equals("Full")) { - if (image.toString().contains(".fullborder.")) + if (card.isFullBorder(image.toString())) g.drawCardRoundRect(image, null, x, y, w, h, false, false); else { g.drawImage(ImageCache.getInstance().getBorderImage(image.toString()), ImageCache.getInstance().borderColor(image), x, y, w, h); @@ -872,7 +872,7 @@ public class CardImageRenderer { g.drawImage(sleeves, x, y, w, h); } } else if (Forge.enableUIMask.equals("Full") && canshow) { - if (image.toString().contains(".fullborder.")) + if (card.isFullBorder(image.toString())) g.drawCardRoundRect(image, null, x, y, w, h, false, false); else { g.drawImage(ImageCache.getInstance().getBorderImage(image.toString()), ImageCache.getInstance().borderColor(image), x, y, w, h); From 6eea82706d50062d5d139a734d4b67bba905766a Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Fri, 4 Jul 2025 21:52:56 +0800 Subject: [PATCH 5/8] better name --- .../src/main/java/forge/game/card/CardView.java | 16 ++++++++-------- .../java/forge/trackable/TrackableProperty.java | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/forge-game/src/main/java/forge/game/card/CardView.java b/forge-game/src/main/java/forge/game/card/CardView.java index 4ee57988e8c..cbf290424b3 100644 --- a/forge-game/src/main/java/forge/game/card/CardView.java +++ b/forge-game/src/main/java/forge/game/card/CardView.java @@ -102,22 +102,22 @@ public class CardView extends GameEntityView { set(TrackableProperty.ImageKey, imageKey); } - public int getCardViewMode() { - return get(TrackableProperty.CardViewMode); + public int getFullBorderMode() { + return get(TrackableProperty.FullBorderMode); } - public void updateCardViewMode(final int mode) { - set(TrackableProperty.CardViewMode, mode); + public void updateFullBorderMode(final int mode) { + set(TrackableProperty.FullBorderMode, mode); } public boolean isFullBorder(final String image) { - if (getCardViewMode() < 1) { + if (getFullBorderMode() < 1) { if (image.contains(".fullborder.") || image.contains("tokens")) - updateCardViewMode(1); + updateFullBorderMode(1); else - updateCardViewMode(2); + updateFullBorderMode(2); } - return getCardViewMode() == 1; + return getFullBorderMode() == 1; } public PlayerView getOwner() { diff --git a/forge-game/src/main/java/forge/trackable/TrackableProperty.java b/forge-game/src/main/java/forge/trackable/TrackableProperty.java index 121b304f7be..f9bb19099aa 100644 --- a/forge-game/src/main/java/forge/trackable/TrackableProperty.java +++ b/forge-game/src/main/java/forge/trackable/TrackableProperty.java @@ -18,8 +18,8 @@ public enum TrackableProperty { Counters(TrackableTypes.CounterMapType), CurrentPlane(TrackableTypes.StringType), PlanarPlayer(TrackableTypes.PlayerViewType), - //CardViewMode - CardViewMode(TrackableTypes.IntegerType, FreezeMode.IgnoresFreeze), + //FullBorderMode + FullBorderMode(TrackableTypes.IntegerType, FreezeMode.IgnoresFreeze), //Card Owner(TrackableTypes.PlayerViewType), From ca12ad529aa000c91015a40b723a5a3b2d64a912 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Fri, 4 Jul 2025 21:58:20 +0800 Subject: [PATCH 6/8] add comment --- forge-game/src/main/java/forge/game/card/CardView.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/forge-game/src/main/java/forge/game/card/CardView.java b/forge-game/src/main/java/forge/game/card/CardView.java index cbf290424b3..4de2259267b 100644 --- a/forge-game/src/main/java/forge/game/card/CardView.java +++ b/forge-game/src/main/java/forge/game/card/CardView.java @@ -111,11 +111,11 @@ public class CardView extends GameEntityView { } public boolean isFullBorder(final String image) { - if (getFullBorderMode() < 1) { + if (getFullBorderMode() < 1) { // 0 not yet queried the texture image string if (image.contains(".fullborder.") || image.contains("tokens")) - updateFullBorderMode(1); + updateFullBorderMode(1); // 1 for texture/card image that has full borders or tokens else - updateFullBorderMode(2); + updateFullBorderMode(2); // 2 for old image format } return getFullBorderMode() == 1; } From 716d58ad4b3136e8aa2195bf74b1e2624964a713 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Fri, 4 Jul 2025 22:28:51 +0800 Subject: [PATCH 7/8] faster implementation --- .../main/java/forge/game/card/CardView.java | 19 ------------------- .../forge/trackable/TrackableProperty.java | 2 -- .../src/forge/assets/ImageCache.java | 19 ++++++++++++++----- .../src/forge/card/CardImage.java | 2 +- .../src/forge/card/CardImageRenderer.java | 10 +++++----- .../src/forge/card/CardRenderer.java | 6 +++--- 6 files changed, 23 insertions(+), 35 deletions(-) diff --git a/forge-game/src/main/java/forge/game/card/CardView.java b/forge-game/src/main/java/forge/game/card/CardView.java index 4de2259267b..85b3c07ec90 100644 --- a/forge-game/src/main/java/forge/game/card/CardView.java +++ b/forge-game/src/main/java/forge/game/card/CardView.java @@ -101,25 +101,6 @@ public class CardView extends GameEntityView { set(TrackableProperty.Controller, ownerAndController); set(TrackableProperty.ImageKey, imageKey); } - - public int getFullBorderMode() { - return get(TrackableProperty.FullBorderMode); - } - - public void updateFullBorderMode(final int mode) { - set(TrackableProperty.FullBorderMode, mode); - } - - public boolean isFullBorder(final String image) { - if (getFullBorderMode() < 1) { // 0 not yet queried the texture image string - if (image.contains(".fullborder.") || image.contains("tokens")) - updateFullBorderMode(1); // 1 for texture/card image that has full borders or tokens - else - updateFullBorderMode(2); // 2 for old image format - } - return getFullBorderMode() == 1; - } - public PlayerView getOwner() { return get(TrackableProperty.Owner); } diff --git a/forge-game/src/main/java/forge/trackable/TrackableProperty.java b/forge-game/src/main/java/forge/trackable/TrackableProperty.java index f9bb19099aa..a303fb14d2d 100644 --- a/forge-game/src/main/java/forge/trackable/TrackableProperty.java +++ b/forge-game/src/main/java/forge/trackable/TrackableProperty.java @@ -18,8 +18,6 @@ public enum TrackableProperty { Counters(TrackableTypes.CounterMapType), CurrentPlane(TrackableTypes.StringType), PlanarPlayer(TrackableTypes.PlayerViewType), - //FullBorderMode - FullBorderMode(TrackableTypes.IntegerType, FreezeMode.IgnoresFreeze), //Card Owner(TrackableTypes.PlayerViewType), diff --git a/forge-gui-mobile/src/forge/assets/ImageCache.java b/forge-gui-mobile/src/forge/assets/ImageCache.java index 9ea9214595c..70d16ec3e77 100644 --- a/forge-gui-mobile/src/forge/assets/ImageCache.java +++ b/forge-gui-mobile/src/forge/assets/ImageCache.java @@ -295,7 +295,7 @@ public class ImageCache { image fetcher to update automatically after the card image/s are downloaded*/ imageLoaded = false; if (image != null && imageRecord.get().get(image.toString()) == null) - imageRecord.get().put(image.toString(), new ImageRecord(Color.valueOf("#171717").toString(), false, getRadius(image))); //black border + imageRecord.get().put(image.toString(), new ImageRecord(Color.valueOf("#171717").toString(), false, getRadius(image), image.toString().contains(".fullborder.") || image.toString().contains("tokens"))); //black border } } return image; @@ -349,7 +349,7 @@ public class ImageCache { radius = 22; updateImageRecord(cardTexture.toString(), borderless ? Color.valueOf("#171717").toString() : isCloserToWhite(getpixelColor(cardTexture)).getLeft(), - !borderless && isCloserToWhite(getpixelColor(cardTexture)).getRight(), radius); + !borderless && isCloserToWhite(getpixelColor(cardTexture)).getRight(), radius, cardTexture.toString().contains(".fullborder.") || cardTexture.toString().contains("tokens")); } return cardTexture; } @@ -444,8 +444,8 @@ public class ImageCache { return 1; return 0; } - public void updateImageRecord(String textureString, String colorValue, Boolean isClosertoWhite, int radius) { - imageRecord.get().put(textureString, new ImageRecord(colorValue, isClosertoWhite, radius)); + public void updateImageRecord(String textureString, String colorValue, Boolean isClosertoWhite, int radius, boolean fullborder) { + imageRecord.get().put(textureString, new ImageRecord(colorValue, isClosertoWhite, radius, fullborder)); } public int getRadius(Texture t) { @@ -460,6 +460,13 @@ public class ImageCache { return i; } + public boolean isFullBorder(String textureString) { + ImageRecord record = imageRecord.get().get(textureString); + if (record == null) + return false; + return record.isFullBorder; + } + public FImage getBorder(String textureString) { ImageRecord record = imageRecord.get().get(textureString); if (record == null) @@ -544,11 +551,13 @@ public class ImageCache { String colorValue; Boolean isCloserToWhite; Integer cardRadius; + boolean isFullBorder; - ImageRecord(String colorString, Boolean closetoWhite, int radius) { + ImageRecord(String colorString, Boolean closetoWhite, int radius, boolean fullborder) { colorValue = colorString; isCloserToWhite = closetoWhite; cardRadius = radius; + isFullBorder = fullborder; } } } diff --git a/forge-gui-mobile/src/forge/card/CardImage.java b/forge-gui-mobile/src/forge/card/CardImage.java index 0c45b6c30a1..52aada21853 100644 --- a/forge-gui-mobile/src/forge/card/CardImage.java +++ b/forge-gui-mobile/src/forge/card/CardImage.java @@ -49,7 +49,7 @@ public class CardImage implements FImage { CardImageRenderer.drawCardImage(g, cv, false, x, y, w, h, CardStackPosition.Top, true, true); } else { if (Forge.enableUIMask.equals("Full")) { - if (cv.isFullBorder(image.toString())) + if (ImageCache.getInstance().isFullBorder(image.toString())) g.drawCardRoundRect(image, null, x, y, w, h, false, false); else { float radius = (h - w) / 8; diff --git a/forge-gui-mobile/src/forge/card/CardImageRenderer.java b/forge-gui-mobile/src/forge/card/CardImageRenderer.java index a242d8a1c5e..169d497c11c 100644 --- a/forge-gui-mobile/src/forge/card/CardImageRenderer.java +++ b/forge-gui-mobile/src/forge/card/CardImageRenderer.java @@ -814,7 +814,7 @@ public class CardImageRenderer { } if (rotatePlane && (card.getCurrentState().isPhenomenon() || card.getCurrentState().isPlane() || (card.getCurrentState().isBattle() && !altState) || (card.getAlternateState() != null && card.getAlternateState().isBattle() && altState))) { if (Forge.enableUIMask.equals("Full")) { - if (card.isFullBorder(image.toString())) + if (ImageCache.getInstance().isFullBorder(image.toString())) g.drawCardRoundRect(image, new_x, new_y, new_w, new_h, new_x + new_w / 2, new_y + new_h / 2, -90); else { g.drawRotatedImage(FSkin.getBorders().get(0), new_x, new_y, new_w, new_h, new_x + new_w / 2, new_y + new_h / 2, -90); @@ -827,7 +827,7 @@ public class CardImageRenderer { } else if (rotateSplit && isCurrentCard && card.isSplitCard() && canshow && !card.isFaceDown()) { boolean isAftermath = card.getText().contains("Aftermath") || card.getAlternateState().getOracleText().contains("Aftermath"); if (Forge.enableUIMask.equals("Full")) { - if (card.isFullBorder(image.toString())) + if (ImageCache.getInstance().isFullBorder(image.toString())) g.drawCardRoundRect(image, new_x, new_y, new_w, new_h, new_x + new_w / 2, new_y + new_h / 2, isAftermath ? 90 : -90); else { g.drawRotatedImage(FSkin.getBorders().get(ImageCache.getInstance().getFSkinBorders(card)), new_x, new_y, new_w, new_h, new_x + new_w / 2, new_y + new_h / 2, isAftermath ? 90 : -90); @@ -843,7 +843,7 @@ public class CardImageRenderer { if (card.isSplitCard() && rotateSplit && isCurrentCard) { boolean isAftermath = card.getText().contains("Aftermath") || card.getAlternateState().getOracleText().contains("Aftermath"); if (Forge.enableUIMask.equals("Full")) { - if (card.isFullBorder(image.toString())) + if (ImageCache.getInstance().isFullBorder(image.toString())) g.drawCardRoundRect(image, new_x, new_y, new_w, new_h, new_x + new_w / 2, new_y + new_h / 2, isAftermath ? 90 : -90); else { g.drawRotatedImage(FSkin.getBorders().get(ImageCache.getInstance().getFSkinBorders(card)), new_x, new_y, new_w, new_h, new_x + new_w / 2, new_y + new_h / 2, isAftermath ? 90 : -90); @@ -855,7 +855,7 @@ public class CardImageRenderer { g.drawRotatedImage(image, new_x, new_y, new_w, new_h, new_x + new_w / 2, new_y + new_h / 2, isAftermath ? 90 : -90); } else { if (Forge.enableUIMask.equals("Full")) { - if (card.isFullBorder(image.toString())) + if (ImageCache.getInstance().isFullBorder(image.toString())) g.drawCardRoundRect(image, null, x, y, w, h, false, false); else { g.drawImage(ImageCache.getInstance().getBorderImage(image.toString()), ImageCache.getInstance().borderColor(image), x, y, w, h); @@ -872,7 +872,7 @@ public class CardImageRenderer { g.drawImage(sleeves, x, y, w, h); } } else if (Forge.enableUIMask.equals("Full") && canshow) { - if (card.isFullBorder(image.toString())) + if (ImageCache.getInstance().isFullBorder(image.toString())) g.drawCardRoundRect(image, null, x, y, w, h, false, false); else { g.drawImage(ImageCache.getInstance().getBorderImage(image.toString()), ImageCache.getInstance().borderColor(image), x, y, w, h); diff --git a/forge-gui-mobile/src/forge/card/CardRenderer.java b/forge-gui-mobile/src/forge/card/CardRenderer.java index f4400e93e6e..68894eb8884 100644 --- a/forge-gui-mobile/src/forge/card/CardRenderer.java +++ b/forge-gui-mobile/src/forge/card/CardRenderer.java @@ -610,7 +610,7 @@ public class CardRenderer { CardImageRenderer.drawCardImage(g, CardView.getCardForUi(pc), false, x, y, w, h, pos, true, true); } else { if (Forge.enableUIMask.equals("Full")) { - if (card.isFullBorder(image.toString())) + if (ImageCache.getInstance().isFullBorder(image.toString())) g.drawCardRoundRect(image, null, x, y, w, h, false, false); else { //tint the border @@ -663,7 +663,7 @@ public class CardRenderer { if (FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_ROTATE_PLANE_OR_PHENOMENON) && (card.getCurrentState().isPhenomenon() || card.getCurrentState().isPlane() || (card.getCurrentState().isBattle() && !showAltState) || (card.getAlternateState() != null && card.getAlternateState().isBattle() && showAltState)) && rotate) { if (Forge.enableUIMask.equals("Full")) { - if (card.isFullBorder(image.toString())) + if (ImageCache.getInstance().isFullBorder(image.toString())) g.drawCardRoundRect(image, x, y, w, h, x + w / 2, y + h / 2, -90); else { g.drawRotatedImage(FSkin.getBorders().get(0), x, y, w, h, x + w / 2, y + h / 2, -90); @@ -675,7 +675,7 @@ public class CardRenderer { g.drawRotatedImage(image, x, y, w, h, x + w / 2, y + h / 2, -90); } else { if (Forge.enableUIMask.equals("Full") && canshow) { - if (card.isFullBorder(image.toString())) + if (ImageCache.getInstance().isFullBorder(image.toString())) g.drawCardRoundRect(image, crack_overlay, x, y, w, h, drawGray(card), magnify ? false : card.getDamage() > 0); else { //boolean t = (card.getCurrentState().getOriginalColors() != card.getCurrentState().getColors()) || card.getCurrentState().hasChangeColors(); From bd0b8fbc6561f5fdb24f9cd68ea80a4457cd1287 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Fri, 4 Jul 2025 22:45:50 +0800 Subject: [PATCH 8/8] minor refactor --- forge-gui-mobile/src/forge/assets/ImageCache.java | 6 ++++-- forge-gui-mobile/src/forge/card/CardImage.java | 2 +- forge-gui-mobile/src/forge/card/CardImageRenderer.java | 10 +++++----- forge-gui-mobile/src/forge/card/CardRenderer.java | 6 +++--- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/forge-gui-mobile/src/forge/assets/ImageCache.java b/forge-gui-mobile/src/forge/assets/ImageCache.java index 70d16ec3e77..2fd2fb7b550 100644 --- a/forge-gui-mobile/src/forge/assets/ImageCache.java +++ b/forge-gui-mobile/src/forge/assets/ImageCache.java @@ -460,8 +460,10 @@ public class ImageCache { return i; } - public boolean isFullBorder(String textureString) { - ImageRecord record = imageRecord.get().get(textureString); + public boolean isFullBorder(Texture image) { + if (image == null) + return false; + ImageRecord record = imageRecord.get().get(image.toString()); if (record == null) return false; return record.isFullBorder; diff --git a/forge-gui-mobile/src/forge/card/CardImage.java b/forge-gui-mobile/src/forge/card/CardImage.java index 52aada21853..a354baca159 100644 --- a/forge-gui-mobile/src/forge/card/CardImage.java +++ b/forge-gui-mobile/src/forge/card/CardImage.java @@ -49,7 +49,7 @@ public class CardImage implements FImage { CardImageRenderer.drawCardImage(g, cv, false, x, y, w, h, CardStackPosition.Top, true, true); } else { if (Forge.enableUIMask.equals("Full")) { - if (ImageCache.getInstance().isFullBorder(image.toString())) + if (ImageCache.getInstance().isFullBorder(image)) g.drawCardRoundRect(image, null, x, y, w, h, false, false); else { float radius = (h - w) / 8; diff --git a/forge-gui-mobile/src/forge/card/CardImageRenderer.java b/forge-gui-mobile/src/forge/card/CardImageRenderer.java index 169d497c11c..c5122490e6e 100644 --- a/forge-gui-mobile/src/forge/card/CardImageRenderer.java +++ b/forge-gui-mobile/src/forge/card/CardImageRenderer.java @@ -814,7 +814,7 @@ public class CardImageRenderer { } if (rotatePlane && (card.getCurrentState().isPhenomenon() || card.getCurrentState().isPlane() || (card.getCurrentState().isBattle() && !altState) || (card.getAlternateState() != null && card.getAlternateState().isBattle() && altState))) { if (Forge.enableUIMask.equals("Full")) { - if (ImageCache.getInstance().isFullBorder(image.toString())) + if (ImageCache.getInstance().isFullBorder(image)) g.drawCardRoundRect(image, new_x, new_y, new_w, new_h, new_x + new_w / 2, new_y + new_h / 2, -90); else { g.drawRotatedImage(FSkin.getBorders().get(0), new_x, new_y, new_w, new_h, new_x + new_w / 2, new_y + new_h / 2, -90); @@ -827,7 +827,7 @@ public class CardImageRenderer { } else if (rotateSplit && isCurrentCard && card.isSplitCard() && canshow && !card.isFaceDown()) { boolean isAftermath = card.getText().contains("Aftermath") || card.getAlternateState().getOracleText().contains("Aftermath"); if (Forge.enableUIMask.equals("Full")) { - if (ImageCache.getInstance().isFullBorder(image.toString())) + if (ImageCache.getInstance().isFullBorder(image)) g.drawCardRoundRect(image, new_x, new_y, new_w, new_h, new_x + new_w / 2, new_y + new_h / 2, isAftermath ? 90 : -90); else { g.drawRotatedImage(FSkin.getBorders().get(ImageCache.getInstance().getFSkinBorders(card)), new_x, new_y, new_w, new_h, new_x + new_w / 2, new_y + new_h / 2, isAftermath ? 90 : -90); @@ -843,7 +843,7 @@ public class CardImageRenderer { if (card.isSplitCard() && rotateSplit && isCurrentCard) { boolean isAftermath = card.getText().contains("Aftermath") || card.getAlternateState().getOracleText().contains("Aftermath"); if (Forge.enableUIMask.equals("Full")) { - if (ImageCache.getInstance().isFullBorder(image.toString())) + if (ImageCache.getInstance().isFullBorder(image)) g.drawCardRoundRect(image, new_x, new_y, new_w, new_h, new_x + new_w / 2, new_y + new_h / 2, isAftermath ? 90 : -90); else { g.drawRotatedImage(FSkin.getBorders().get(ImageCache.getInstance().getFSkinBorders(card)), new_x, new_y, new_w, new_h, new_x + new_w / 2, new_y + new_h / 2, isAftermath ? 90 : -90); @@ -855,7 +855,7 @@ public class CardImageRenderer { g.drawRotatedImage(image, new_x, new_y, new_w, new_h, new_x + new_w / 2, new_y + new_h / 2, isAftermath ? 90 : -90); } else { if (Forge.enableUIMask.equals("Full")) { - if (ImageCache.getInstance().isFullBorder(image.toString())) + if (ImageCache.getInstance().isFullBorder(image)) g.drawCardRoundRect(image, null, x, y, w, h, false, false); else { g.drawImage(ImageCache.getInstance().getBorderImage(image.toString()), ImageCache.getInstance().borderColor(image), x, y, w, h); @@ -872,7 +872,7 @@ public class CardImageRenderer { g.drawImage(sleeves, x, y, w, h); } } else if (Forge.enableUIMask.equals("Full") && canshow) { - if (ImageCache.getInstance().isFullBorder(image.toString())) + if (ImageCache.getInstance().isFullBorder(image)) g.drawCardRoundRect(image, null, x, y, w, h, false, false); else { g.drawImage(ImageCache.getInstance().getBorderImage(image.toString()), ImageCache.getInstance().borderColor(image), x, y, w, h); diff --git a/forge-gui-mobile/src/forge/card/CardRenderer.java b/forge-gui-mobile/src/forge/card/CardRenderer.java index 68894eb8884..9b9bfa8f1b5 100644 --- a/forge-gui-mobile/src/forge/card/CardRenderer.java +++ b/forge-gui-mobile/src/forge/card/CardRenderer.java @@ -610,7 +610,7 @@ public class CardRenderer { CardImageRenderer.drawCardImage(g, CardView.getCardForUi(pc), false, x, y, w, h, pos, true, true); } else { if (Forge.enableUIMask.equals("Full")) { - if (ImageCache.getInstance().isFullBorder(image.toString())) + if (ImageCache.getInstance().isFullBorder(image)) g.drawCardRoundRect(image, null, x, y, w, h, false, false); else { //tint the border @@ -663,7 +663,7 @@ public class CardRenderer { if (FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_ROTATE_PLANE_OR_PHENOMENON) && (card.getCurrentState().isPhenomenon() || card.getCurrentState().isPlane() || (card.getCurrentState().isBattle() && !showAltState) || (card.getAlternateState() != null && card.getAlternateState().isBattle() && showAltState)) && rotate) { if (Forge.enableUIMask.equals("Full")) { - if (ImageCache.getInstance().isFullBorder(image.toString())) + if (ImageCache.getInstance().isFullBorder(image)) g.drawCardRoundRect(image, x, y, w, h, x + w / 2, y + h / 2, -90); else { g.drawRotatedImage(FSkin.getBorders().get(0), x, y, w, h, x + w / 2, y + h / 2, -90); @@ -675,7 +675,7 @@ public class CardRenderer { g.drawRotatedImage(image, x, y, w, h, x + w / 2, y + h / 2, -90); } else { if (Forge.enableUIMask.equals("Full") && canshow) { - if (ImageCache.getInstance().isFullBorder(image.toString())) + if (ImageCache.getInstance().isFullBorder(image)) g.drawCardRoundRect(image, crack_overlay, x, y, w, h, drawGray(card), magnify ? false : card.getDamage() > 0); else { //boolean t = (card.getCurrentState().getOriginalColors() != card.getCurrentState().getColors()) || card.getCurrentState().hasChangeColors();