Make zoom activation more flexible

This commit is contained in:
drdev
2014-11-30 19:02:41 +00:00
parent 7857f996e1
commit 15a102e895
8 changed files with 82 additions and 90 deletions

View File

@@ -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;

View File

@@ -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);
}
}

View File

@@ -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;
}
};

View File

@@ -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);
}
}
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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);
}
}
}