mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 19:28:01 +00:00
Make zoom activation more flexible
This commit is contained in:
@@ -21,6 +21,7 @@ import forge.assets.FSkinImage;
|
||||
import forge.assets.FTextureRegionImage;
|
||||
import forge.assets.ImageCache;
|
||||
import forge.card.CardDetailUtil.DetailColors;
|
||||
import forge.card.CardZoom.ActivateHandler;
|
||||
import forge.card.mana.ManaCost;
|
||||
import forge.game.card.CardView;
|
||||
import forge.game.card.CardView.CardStateView;
|
||||
@@ -29,7 +30,6 @@ import forge.match.MatchUtil;
|
||||
import forge.model.FModel;
|
||||
import forge.properties.ForgePreferences.FPref;
|
||||
import forge.toolbox.FList;
|
||||
import forge.util.Callback;
|
||||
import forge.util.Utils;
|
||||
|
||||
public class CardRenderer {
|
||||
@@ -239,18 +239,18 @@ public class CardRenderer {
|
||||
g.drawText(type, typeFont, foreColor, x, y, availableTypeWidth, lineHeight, false, HAlignment.LEFT, true);
|
||||
}
|
||||
|
||||
public static boolean cardListItemTap(List<?> cards, int selectedIndex, Callback<Integer> onActivate0, float x, float y, int count, boolean compactMode) {
|
||||
public static boolean cardListItemTap(List<?> cards, int selectedIndex, ActivateHandler activateHandler, float x, float y, int count, boolean compactMode) {
|
||||
if (x <= getCardListItemHeight(compactMode) * CARD_ART_RATIO) {
|
||||
CardZoom.show(cards, selectedIndex, onActivate0);
|
||||
CardZoom.show(cards, selectedIndex, activateHandler);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
public static boolean paperCardListItemTap(List<?> cards, int selectedIndex, Callback<Integer> onActivate0, float x, float y, int count, boolean compactMode) {
|
||||
public static boolean paperCardListItemTap(List<?> cards, int selectedIndex, ActivateHandler activateHandler, float x, float y, int count, boolean compactMode) {
|
||||
float cardArtHeight = getCardListItemHeight(compactMode);
|
||||
float cardArtWidth = cardArtHeight * CARD_ART_RATIO;
|
||||
if (x <= cardArtWidth && y <= cardArtHeight) {
|
||||
CardZoom.show(cards, selectedIndex, onActivate0);
|
||||
CardZoom.show(cards, selectedIndex, activateHandler);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
@@ -4,6 +4,8 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
|
||||
|
||||
import forge.Graphics;
|
||||
@@ -17,7 +19,6 @@ import forge.item.InventoryItem;
|
||||
import forge.screens.FScreen;
|
||||
import forge.toolbox.FCardPanel;
|
||||
import forge.toolbox.FOverlay;
|
||||
import forge.util.Callback;
|
||||
import forge.util.FCollectionView;
|
||||
|
||||
public class CardZoom extends FOverlay {
|
||||
@@ -30,19 +31,19 @@ public class CardZoom extends FOverlay {
|
||||
private static int currentIndex;
|
||||
private static CardView currentCard, prevCard, nextCard;
|
||||
private static boolean zoomMode = true;
|
||||
private static Callback<Integer> onActivate;
|
||||
private static ActivateHandler activateHandler;
|
||||
|
||||
public static void show(Object item) {
|
||||
List<Object> items0 = new ArrayList<Object>();
|
||||
items0.add(item);
|
||||
show(items0, 0, null);
|
||||
}
|
||||
public static void show(FCollectionView<?> items0, int currentIndex0, Callback<Integer> onActivate0) {
|
||||
show((List<?>)items0, currentIndex0, onActivate0);
|
||||
public static void show(FCollectionView<?> items0, int currentIndex0, ActivateHandler activateHandler0) {
|
||||
show((List<?>)items0, currentIndex0, activateHandler0);
|
||||
}
|
||||
public static void show(final List<?> items0, int currentIndex0, Callback<Integer> onActivate0) {
|
||||
public static void show(final List<?> items0, int currentIndex0, ActivateHandler activateHandler0) {
|
||||
items = items0;
|
||||
onActivate = onActivate0;
|
||||
activateHandler = activateHandler0;
|
||||
currentIndex = currentIndex0;
|
||||
currentCard = getCardView(items.get(currentIndex));
|
||||
prevCard = currentIndex > 0 ? getCardView(items.get(currentIndex - 1)) : null;
|
||||
@@ -114,9 +115,9 @@ public class CardZoom extends FOverlay {
|
||||
zoomMode = !zoomMode;
|
||||
return true;
|
||||
}
|
||||
if (onActivate != null) {
|
||||
if (activateHandler != null) {
|
||||
hide();
|
||||
onActivate.run(currentIndex);
|
||||
activateHandler.activate(currentIndex);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -146,9 +147,12 @@ public class CardZoom extends FOverlay {
|
||||
}
|
||||
|
||||
float messageHeight = MSG_FONT.getCapHeight() * 2.5f;
|
||||
if (onActivate != null) {
|
||||
if (activateHandler != null) {
|
||||
String action = activateHandler.getActivateAction(currentIndex);
|
||||
if (StringUtils.isNotEmpty(action)) {
|
||||
g.fillRect(MSG_BACK_COLOR, 0, 0, w, messageHeight);
|
||||
g.drawText("Swipe up to activate card", MSG_FONT, MSG_FORE_COLOR, 0, 0, w, messageHeight, false, HAlignment.CENTER, true);
|
||||
g.drawText("Swipe up to " + action, MSG_FONT, MSG_FORE_COLOR, 0, 0, w, messageHeight, false, HAlignment.CENTER, true);
|
||||
}
|
||||
}
|
||||
g.fillRect(MSG_BACK_COLOR, 0, h - messageHeight, w, messageHeight);
|
||||
g.drawText("Swipe down to switch to " + (zoomMode ? "detail" : "picture") + " view", MSG_FONT, MSG_FORE_COLOR, 0, h - messageHeight, w, messageHeight, false, HAlignment.CENTER, true);
|
||||
@@ -157,4 +161,9 @@ public class CardZoom extends FOverlay {
|
||||
@Override
|
||||
protected void doLayout(float width, float height) {
|
||||
}
|
||||
|
||||
public static interface ActivateHandler {
|
||||
String getActivateAction(int index);
|
||||
void activate(int index);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,11 +14,9 @@ import forge.itemmanager.filters.CardSearchFilter;
|
||||
import forge.itemmanager.filters.CardTypeFilter;
|
||||
import forge.itemmanager.filters.TextSearchFilter;
|
||||
import forge.toolbox.FList.CompactModeHandler;
|
||||
import forge.util.Callback;
|
||||
|
||||
/**
|
||||
* ItemManager for cards
|
||||
*
|
||||
*/
|
||||
public class CardManager extends ItemManager<PaperCard> {
|
||||
public CardManager(boolean wantUnique0) {
|
||||
@@ -62,24 +60,12 @@ public class CardManager extends ItemManager<PaperCard> {
|
||||
|
||||
@Override
|
||||
public boolean tap(Integer index, Entry<PaperCard, Integer> value, float x, float y, int count) {
|
||||
return CardRenderer.cardListItemTap(model.getOrderedList(), index, new Callback<Integer>() {
|
||||
@Override
|
||||
public void run(Integer result) {
|
||||
setSelectedIndex(result);
|
||||
showMenu(true);
|
||||
}
|
||||
}, x, y, count, compactModeHandler.isCompactMode());
|
||||
return CardRenderer.cardListItemTap(model.getOrderedList(), index, CardManager.this, x, y, count, compactModeHandler.isCompactMode());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean longPress(Integer index, Entry<PaperCard, Integer> value, float x, float y) {
|
||||
CardZoom.show(model.getOrderedList(), index, new Callback<Integer>() {
|
||||
@Override
|
||||
public void run(Integer result) {
|
||||
setSelectedIndex(result);
|
||||
showMenu(true);
|
||||
}
|
||||
});
|
||||
CardZoom.show(model.getOrderedList(), index, CardManager.this);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -30,6 +30,7 @@ import forge.Graphics;
|
||||
import forge.assets.FSkinColor;
|
||||
import forge.assets.FSkinFont;
|
||||
import forge.assets.FSkinImage;
|
||||
import forge.card.CardZoom.ActivateHandler;
|
||||
import forge.item.InventoryItem;
|
||||
import forge.itemmanager.filters.ItemFilter;
|
||||
import forge.itemmanager.filters.TextSearchFilter;
|
||||
@@ -53,7 +54,7 @@ import java.util.*;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
|
||||
public abstract class ItemManager<T extends InventoryItem> extends FContainer implements IItemManager<T> {
|
||||
public abstract class ItemManager<T extends InventoryItem> extends FContainer implements IItemManager<T>, ActivateHandler {
|
||||
private ItemPool<T> pool;
|
||||
protected final ItemManagerModel<T> model;
|
||||
private Predicate<? super T> filterPredicate = null;
|
||||
@@ -1073,4 +1074,20 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
|
||||
setBounds(Math.round(x), Math.round(y), Math.round(w), Math.round(h));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getActivateAction(int index) {
|
||||
if (contextMenuBuilder != null) {
|
||||
return "select card";
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void activate(int index) {
|
||||
if (contextMenuBuilder != null) {
|
||||
setSelectedIndex(index);
|
||||
showMenu(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,6 @@ import forge.itemmanager.filters.TextSearchFilter;
|
||||
import forge.quest.QuestSpellShop;
|
||||
import forge.toolbox.FList;
|
||||
import forge.toolbox.FList.CompactModeHandler;
|
||||
import forge.util.Callback;
|
||||
|
||||
|
||||
public final class SpellShopManager extends ItemManager<InventoryItem> {
|
||||
@@ -89,13 +88,7 @@ public final class SpellShopManager extends ItemManager<InventoryItem> {
|
||||
@Override
|
||||
public boolean tap(Integer index, Entry<InventoryItem, Integer> value, float x, float y, int count) {
|
||||
if (value.getKey() instanceof PaperCard) {
|
||||
return CardRenderer.cardListItemTap(model.getOrderedList(), index, new Callback<Integer>() {
|
||||
@Override
|
||||
public void run(Integer result) {
|
||||
setSelectedIndex(result);
|
||||
showMenu(true);
|
||||
}
|
||||
}, x, y, count, compactModeHandler.isCompactMode());
|
||||
return CardRenderer.cardListItemTap(model.getOrderedList(), index, SpellShopManager.this, x, y, count, compactModeHandler.isCompactMode());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -103,13 +96,7 @@ public final class SpellShopManager extends ItemManager<InventoryItem> {
|
||||
@Override
|
||||
public boolean longPress(Integer index, Entry<InventoryItem, Integer> value, float x, float y) {
|
||||
if (value.getKey() instanceof PaperCard) {
|
||||
CardZoom.show(model.getOrderedList(), index, new Callback<Integer>() {
|
||||
@Override
|
||||
public void run(Integer result) {
|
||||
setSelectedIndex(result);
|
||||
showMenu(true);
|
||||
}
|
||||
});
|
||||
CardZoom.show(model.getOrderedList(), index, SpellShopManager.this);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
@@ -30,7 +30,6 @@ import forge.toolbox.FTextField;
|
||||
import forge.toolbox.FEvent.FEventHandler;
|
||||
import forge.toolbox.FLabel;
|
||||
import forge.toolbox.FScrollPane;
|
||||
import forge.util.Callback;
|
||||
import forge.util.Utils;
|
||||
|
||||
import java.util.*;
|
||||
@@ -873,13 +872,7 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
|
||||
public boolean longPress(float x, float y) {
|
||||
ItemInfo item = getItemAtPoint(x + getLeft(), y + getTop());
|
||||
if (item != null) {
|
||||
CardZoom.show(orderedItems, orderedItems.indexOf(item), new Callback<Integer>() {
|
||||
@Override
|
||||
public void run(Integer result) {
|
||||
setSelectedIndex(result);
|
||||
itemManager.showMenu(true);
|
||||
}
|
||||
});
|
||||
CardZoom.show(orderedItems, orderedItems.indexOf(item), itemManager);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
@@ -11,13 +11,13 @@ import forge.FThreads;
|
||||
import forge.Graphics;
|
||||
import forge.card.CardZoom;
|
||||
import forge.card.CardRenderer.CardStackPosition;
|
||||
import forge.card.CardZoom.ActivateHandler;
|
||||
import forge.game.card.CardView;
|
||||
import forge.match.MatchUtil;
|
||||
import forge.toolbox.FCardPanel;
|
||||
import forge.util.Callback;
|
||||
import forge.util.ThreadUtil;
|
||||
|
||||
public abstract class VCardDisplayArea extends VDisplayArea {
|
||||
public abstract class VCardDisplayArea extends VDisplayArea implements ActivateHandler {
|
||||
private static final float CARD_STACK_OFFSET = 0.2f;
|
||||
|
||||
protected final List<CardView> orderedCards = new ArrayList<CardView>();
|
||||
@@ -174,6 +174,16 @@ public abstract class VCardDisplayArea extends VDisplayArea {
|
||||
g.startClip(0, -h, getWidth(), 3 * h);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getActivateAction(int index) {
|
||||
return "activate card";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void activate(int index) {
|
||||
CardAreaPanel.get(orderedCards.get(index)).selectCard(false);
|
||||
}
|
||||
|
||||
public static class CardAreaPanel extends FCardPanel {
|
||||
private static final Map<Integer, CardAreaPanel> allCardPanels = new HashMap<Integer, CardAreaPanel>();
|
||||
|
||||
@@ -317,12 +327,7 @@ public abstract class VCardDisplayArea extends VDisplayArea {
|
||||
|
||||
private void showZoom() {
|
||||
final List<CardView> cards = displayArea.orderedCards;
|
||||
CardZoom.show(cards, cards.indexOf(getCard()), new Callback<Integer>() {
|
||||
@Override
|
||||
public void run(Integer result) {
|
||||
CardAreaPanel.get(cards.get(result)).selectCard(false);
|
||||
}
|
||||
});
|
||||
CardZoom.show(cards, cards.indexOf(getCard()), displayArea);
|
||||
}
|
||||
|
||||
public void buildCardPanelList(List<? super FCardPanel> list) {
|
||||
|
||||
@@ -14,6 +14,7 @@ import forge.assets.FSkinColor.Colors;
|
||||
import forge.card.CardRenderer;
|
||||
import forge.card.CardZoom;
|
||||
import forge.card.CardRenderer.CardStackPosition;
|
||||
import forge.card.CardZoom.ActivateHandler;
|
||||
import forge.game.card.CardView;
|
||||
import forge.game.player.PlayerView;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
@@ -21,10 +22,9 @@ import forge.item.PaperCard;
|
||||
import forge.screens.match.MatchController;
|
||||
import forge.screens.match.views.VAvatar;
|
||||
import forge.screens.match.views.VStack;
|
||||
import forge.util.Callback;
|
||||
import forge.util.Utils;
|
||||
|
||||
public class FChoiceList<T> extends FList<T> {
|
||||
public class FChoiceList<T> extends FList<T> implements ActivateHandler {
|
||||
public static final FSkinColor ITEM_COLOR = FSkinColor.get(Colors.CLR_ZEBRA);
|
||||
public static final FSkinColor ALT_ITEM_COLOR = ITEM_COLOR.getContrastColor(-20);
|
||||
public static final FSkinColor SEL_COLOR = FSkinColor.get(Colors.CLR_ACTIVE);
|
||||
@@ -321,22 +321,12 @@ public class FChoiceList<T> extends FList<T> {
|
||||
|
||||
@Override
|
||||
public boolean tap(Integer index, T value, float x, float y, int count) {
|
||||
return CardRenderer.cardListItemTap(items, index, new Callback<Integer>() {
|
||||
@Override
|
||||
public void run(Integer result) {
|
||||
setSelectedIndex(result);
|
||||
}
|
||||
}, x, y, count, compactModeHandler.isCompactMode());
|
||||
return CardRenderer.cardListItemTap(items, index, FChoiceList.this, x, y, count, compactModeHandler.isCompactMode());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean longPress(Integer index, T value, float x, float y) {
|
||||
CardZoom.show(items, index, new Callback<Integer>() {
|
||||
@Override
|
||||
public void run(Integer result) {
|
||||
setSelectedIndex(result);
|
||||
}
|
||||
});
|
||||
CardZoom.show(items, index, FChoiceList.this);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -359,22 +349,12 @@ public class FChoiceList<T> extends FList<T> {
|
||||
|
||||
@Override
|
||||
public boolean tap(Integer index, T value, float x, float y, int count) {
|
||||
return CardRenderer.cardListItemTap(items, index, new Callback<Integer>() {
|
||||
@Override
|
||||
public void run(Integer result) {
|
||||
setSelectedIndex(result);
|
||||
}
|
||||
}, x, y, count, compactModeHandler.isCompactMode());
|
||||
return CardRenderer.cardListItemTap(items, index, FChoiceList.this, x, y, count, compactModeHandler.isCompactMode());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean longPress(Integer index, T value, float x, float y) {
|
||||
CardZoom.show(items, index, new Callback<Integer>() {
|
||||
@Override
|
||||
public void run(Integer result) {
|
||||
setSelectedIndex(result);
|
||||
}
|
||||
});
|
||||
CardZoom.show(items, index, FChoiceList.this);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -453,4 +433,19 @@ public class FChoiceList<T> extends FList<T> {
|
||||
g.drawText(player.getName() + " (" + player.getLife() + ")", font, foreColor, x, y, w, h, false, HAlignment.LEFT, true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getActivateAction(int index) {
|
||||
if (maxChoices > 0) {
|
||||
return "select card";
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void activate(int index) {
|
||||
if (maxChoices > 0) {
|
||||
setSelectedIndex(index);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user