diff --git a/forge-gui-desktop/src/main/java/forge/view/arcane/CardPanel.java b/forge-gui-desktop/src/main/java/forge/view/arcane/CardPanel.java index 4e010f8084b9..1f0410eaa3ac 100644 --- a/forge-gui-desktop/src/main/java/forge/view/arcane/CardPanel.java +++ b/forge-gui-desktop/src/main/java/forge/view/arcane/CardPanel.java @@ -120,6 +120,7 @@ ZoneType.Flashback, new Color(80, 20, 100) private OutlinedLabel cardIdText; private boolean displayEnabled = true; private boolean ghost; // faded stand-in for a card this permanent holds in exile + private boolean dimmed; private boolean isAnimationPanel; private int cardXOffset, cardYOffset, cardWidth, cardHeight; private boolean isSelected; @@ -271,6 +272,10 @@ public final void setDisplayEnabled(final boolean displayEnabled0) { displayEnabled = displayEnabled0; } + public final void setDimmed(final boolean dimmed0) { + dimmed = dimmed0; + } + public int getGroupCount() { return groupCount; } @@ -457,8 +462,8 @@ protected final void paintChildren(final Graphics g) { } boolean nonselectable = matchUI.isSelecting() && !matchUI.isSelectable(getCard()); - // if selecting, darken non-selectable cards - if (nonselectable) { + // darken non-selectable cards while selecting, and panels explicitly dimmed + if (nonselectable || dimmed) { boolean noBorderPref = !isPreferenceEnabled(FPref.UI_RENDER_BLACK_BORDERS); boolean cardImgHasAlpha = imagePanel != null && imagePanel.getSrcImage() != null && imagePanel.getSrcImage().getColorModel().hasAlpha(); final int cornerSize = noBorderPref && !cardImgHasAlpha ? 0 : Math.max(4, Math.round(cardWidth * CardPanel.ROUNDED_CORNER_SIZE)); diff --git a/forge-gui-desktop/src/main/java/forge/view/arcane/FloatingZone.java b/forge-gui-desktop/src/main/java/forge/view/arcane/FloatingZone.java index 5358829e72cc..c07e32a91785 100644 --- a/forge-gui-desktop/src/main/java/forge/view/arcane/FloatingZone.java +++ b/forge-gui-desktop/src/main/java/forge/view/arcane/FloatingZone.java @@ -641,6 +641,7 @@ protected void hideWindow() { @Override protected void doRefresh() { List cardPanels = new ArrayList<>(); + boolean anyViewable = false; for (final CardView card : getCards()) { CardPanel cardPanel = getCardPanel(card.getId()); @@ -657,6 +658,11 @@ protected void doRefresh() { } } cardPanels.add(cardPanel); + anyViewable |= getMatchUI().mayView(card); + } + // When only some cards in a zone are revealed, dim the un-revealed ones which render as blank cards + for (final CardPanel panel : cardPanels) { + panel.setDimmed(anyViewable && !getMatchUI().mayView(panel.getCard())); } setCardPanels(cardPanels); final int shown = cardPanels.size(); diff --git a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java index 47c641056c7e..9c48ecdaec3a 100644 --- a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java +++ b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java @@ -972,13 +972,14 @@ protected void reveal(final CardCollectionView cards, final ZoneType zone, final final PlayerZoneUpdates zonesToUpdate = new PlayerZoneUpdates(); zonesToUpdate.add(new PlayerZoneUpdate(owner, zone)); final Iterable[] zonesShown = new Iterable[1]; + final InputConfirm inp = new InputConfirm(this, fm, + localizer.getMessage("lblOK"), localizer.getMessage("lblEndTurn"), true); + inputQueue.setInput(inp); FThreads.invokeInEdtNowOrLater(() -> { getGui().updateZones(zonesToUpdate); zonesShown[0] = getGui().tempShowZones(getLocalPlayerView(), zonesToUpdate); }); - final InputConfirm inp = new InputConfirm(this, fm, - localizer.getMessage("lblOK"), localizer.getMessage("lblEndTurn"), true); - inp.showAndWait(); + inp.awaitLatchRelease(); if (!inp.getResult()) { FThreads.invokeInEdtLater(this::autoPassUntilEndOfTurn); }