From e4e1368fb127b7fc32a9a8645f4cb59c4a9bdbd9 Mon Sep 17 00:00:00 2001 From: drdev Date: Sun, 6 Jul 2014 05:25:57 +0000 Subject: [PATCH] Flesh out New Quest screen --- .../screens/home/quest/VSubmenuQuestData.java | 6 +- .../src/forge/deck/AddBasicLandsDialog.java | 2 +- .../forge/screens/quest/NewQuestScreen.java | 322 +++++++++++++++++- .../src/forge/screens/quest/QuestMenu.java | 21 +- .../forge/screens/quest/QuestStatsScreen.java | 65 +++- .../src/forge/toolbox/FCheckBox.java | 6 + .../src/forge/toolbox/FComboBox.java | 5 +- .../src/forge/toolbox/FLabel.java | 18 +- .../src/forge/toolbox/FRadioButton.java | 6 + 9 files changed, 422 insertions(+), 29 deletions(-) diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/quest/VSubmenuQuestData.java b/forge-gui-desktop/src/main/java/forge/screens/home/quest/VSubmenuQuestData.java index 9a2a14d0a69..c03ad67a571 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/quest/VSubmenuQuestData.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/quest/VSubmenuQuestData.java @@ -167,14 +167,14 @@ public enum VSubmenuQuestData implements IVSubmenu { private final ActionListener alStartingWorld = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - updateEnableFormats(); + updateEnabledFormats(); } }; /** * Aux function for enabling or disabling the format selection according to world selection. */ - private void updateEnableFormats() { + private void updateEnabledFormats() { final QuestWorld qw = FModel.getWorlds().get(getStartingWorldName()); if (qw != null) { cbxStartingPool.setEnabled(qw.getFormat() == null); @@ -244,7 +244,7 @@ public enum VSubmenuQuestData implements IVSubmenu { cbxStartingWorld.setSelectedItem(FModel.getWorlds().get("Main world")); cbxStartingWorld.addActionListener(alStartingWorld); - updateEnableFormats(); + updateEnabledFormats(); cboAllowUnlocks.setSelected(true); diff --git a/forge-gui-mobile/src/forge/deck/AddBasicLandsDialog.java b/forge-gui-mobile/src/forge/deck/AddBasicLandsDialog.java index 095a1d92774..f51b9090d89 100644 --- a/forge-gui-mobile/src/forge/deck/AddBasicLandsDialog.java +++ b/forge-gui-mobile/src/forge/deck/AddBasicLandsDialog.java @@ -349,7 +349,7 @@ public class AddBasicLandsDialog extends FDialog { } private void refreshArtChoices() { - cbLandArt.clearItems(); + cbLandArt.removeAllItems(); if (landSet == null) { return; } int artChoiceCount = FModel.getMagicDb().getCommonCards().getArtCount(cardName, landSet.getCode()); diff --git a/forge-gui-mobile/src/forge/screens/quest/NewQuestScreen.java b/forge-gui-mobile/src/forge/screens/quest/NewQuestScreen.java index afba7462a81..c94deafa4e9 100644 --- a/forge-gui-mobile/src/forge/screens/quest/NewQuestScreen.java +++ b/forge-gui-mobile/src/forge/screens/quest/NewQuestScreen.java @@ -1,15 +1,331 @@ package forge.screens.quest; +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.lang3.text.WordUtils; + +import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment; + +import forge.assets.FSkinFont; +import forge.card.MagicColor; +import forge.deck.Deck; +import forge.deck.DeckGroup; +import forge.game.GameFormat; +import forge.item.PreconDeck; +import forge.model.CardCollections; +import forge.model.FModel; +import forge.quest.QuestController; +import forge.quest.QuestWorld; +import forge.quest.StartingPoolType; import forge.screens.FScreen; +import forge.toolbox.FCheckBox; +import forge.toolbox.FComboBox; +import forge.toolbox.FDisplayObject; +import forge.toolbox.FEvent; +import forge.toolbox.FEvent.FEventHandler; +import forge.toolbox.FLabel; +import forge.toolbox.FOptionPane; +import forge.toolbox.FScrollPane; +import forge.util.storage.IStorage; public class NewQuestScreen extends FScreen { + private static final float PADDING = FOptionPane.PADDING; + + private final FScrollPane scroller = add(new FScrollPane() { + @Override + protected ScrollBounds layoutAndGetScrollBounds(float visibleWidth, float visibleHeight) { + float x = PADDING; + float y = PADDING; + float right = visibleWidth - PADDING; + float h = cbxStartingWorld.getHeight(); + + for (FDisplayObject obj : getChildren()) { + if (!obj.isVisible()) { continue; } + + if (obj instanceof FLabel) { + //display labels inline before object following them + FLabel lbl = (FLabel)obj; + if (lbl.getText().endsWith(":")) { + obj.setBounds(x, y, visibleWidth / 2 - x, h); //make label take up half of line so combo boxes all the same width + x += obj.getWidth(); + continue; + } + else if (lbl.getAlignment() == HAlignment.RIGHT) { + y -= PADDING; //remove most of the padding above description text + } + } + + //other objects should take up remainder of current line + obj.setBounds(x, y, right - x, h); + x = PADDING; + y += h + PADDING; + } + return new ScrollBounds(visibleWidth, y); + } + }); + + private final FLabel lblStartingWorld = scroller.add(new FLabel.Builder().text("Starting world:").build()); + private final FComboBox cbxStartingWorld = scroller.add(new FComboBox()); + + private final FLabel lblDifficulty = scroller.add(new FLabel.Builder().text("Difficulty:").build()); + private final FComboBox cbxDifficulty = scroller.add(new FComboBox(new String[]{ "Easy", "Medium", "Hard", "Expert" })); + + private final FLabel lblPreferredColor = scroller.add(new FLabel.Builder().text("Starting pool colors:").build()); + private final FComboBox cbxPreferredColor = scroller.add(new FComboBox()); + private final String stringBalancedDistribution = new String("balanced distribution"); + private final String stringRandomizedDistribution = new String("randomized distribution"); + private final String stringBias = new String(" bias"); + + private final FLabel lblStartingPool = scroller.add(new FLabel.Builder().text("Starting pool:").build()); + private final FComboBox cbxStartingPool = scroller.add(new FComboBox()); + + private final FLabel lblUnrestricted = scroller.add(new FLabel.Builder().align(HAlignment.RIGHT).font(FSkinFont.get(12)).text("All cards will be available to play.").build()); + + private final FLabel lblPreconDeck = scroller.add(new FLabel.Builder().text("Starter/Event deck:").build()); + private final FComboBox cbxPreconDeck = scroller.add(new FComboBox()); + + private final FLabel lblFormat = scroller.add(new FLabel.Builder().text("Sanctioned format:").build()); + private final FComboBox cbxFormat = scroller.add(new FComboBox()); + + private final FLabel lblCustomDeck = scroller.add(new FLabel.Builder().text("Custom deck:").build()); + private final FComboBox cbxCustomDeck = scroller.add(new FComboBox()); + + private final FLabel btnDefineCustomFormat = scroller.add(new FLabel.ButtonBuilder().text("Define custom format").build()); + + private final FLabel lblPrizedCards = scroller.add(new FLabel.Builder().text("Prized cards:").build()); + private final FComboBox cbxPrizedCards = scroller.add(new FComboBox()); + + private final FLabel lblPrizeFormat = scroller.add(new FLabel.Builder().text("Sanctioned format:").build()); + private final FComboBox cbxPrizeFormat = scroller.add(new FComboBox()); + + private final FLabel lblPrizeUnrestricted = scroller.add(new FLabel.Builder().align(HAlignment.RIGHT).font(FSkinFont.get(12)).text("All cards will be available to win.").build()); + private final FLabel lblPrizeSameAsStarting = scroller.add(new FLabel.Builder().align(HAlignment.RIGHT).font(FSkinFont.get(12)).text("Only sets found in starting pool will be available.").build()); + private final FLabel btnPrizeDefineCustomFormat = scroller.add(new FLabel.ButtonBuilder().text("Define custom format").build()); + + private final FCheckBox cbAllowUnlocks = scroller.add(new FCheckBox("Allow unlock of additional editions")); + private final FCheckBox cbFantasy = scroller.add(new FCheckBox("Fantasy Mode")); + + private final FLabel btnEmbark = add(new FLabel.ButtonBuilder() + .font(FSkinFont.get(16)).text("Embark!").build()); + public NewQuestScreen() { - super("New Quest", new QuestMenu()); + super("Start a New Quest"); + + cbxStartingPool.addItem(StartingPoolType.Complete); + cbxStartingPool.addItem(StartingPoolType.Rotating); + cbxStartingPool.addItem(StartingPoolType.CustomFormat); + cbxStartingPool.addItem(StartingPoolType.Precon); + cbxStartingPool.addItem(StartingPoolType.DraftDeck); + cbxStartingPool.addItem(StartingPoolType.SealedDeck); + cbxStartingPool.addItem(StartingPoolType.Cube); + cbxStartingPool.setChangedHandler(new FEventHandler() { + @Override + public void handleEvent(FEvent e) { + updateStartingPoolOptions(); + scroller.revalidate(); + } + }); + + cbxPrizedCards.addItem("Same as starting pool"); + cbxPrizedCards.addItem(StartingPoolType.Complete); + cbxPrizedCards.addItem(StartingPoolType.Rotating); + cbxPrizedCards.addItem(StartingPoolType.CustomFormat); + cbxPrizedCards.setChangedHandler(new FEventHandler() { + @Override + public void handleEvent(FEvent e) { + updatePrizeOptions(); + scroller.revalidate(); + } + }); + + for (GameFormat gf : FModel.getFormats()) { + cbxFormat.addItem(gf); + cbxPrizeFormat.addItem(gf); + } + + // Initialize color balance selection + cbxPreferredColor.addItem(stringBalancedDistribution); + cbxPreferredColor.addItem(stringRandomizedDistribution); + cbxPreferredColor.addItem(MagicColor.Constant.WHITE + stringBias); + cbxPreferredColor.addItem(MagicColor.Constant.BLUE + stringBias); + cbxPreferredColor.addItem(MagicColor.Constant.BLACK + stringBias); + cbxPreferredColor.addItem(MagicColor.Constant.RED + stringBias); + cbxPreferredColor.addItem(MagicColor.Constant.GREEN + stringBias); + cbxPreferredColor.addItem(MagicColor.Constant.COLORLESS + stringBias); + + for (QuestWorld qw : FModel.getWorlds()) { + cbxStartingWorld.addItem(qw); + } + // Default to 'Main world' + cbxStartingWorld.setSelectedItem(FModel.getWorlds().get("Main world")); + + cbxStartingWorld.setChangedHandler(new FEventHandler() { + @Override + public void handleEvent(FEvent e) { + updateEnabledFormats(); + } + }); + + updateStartingPoolOptions(); + updatePrizeOptions(); + updateEnabledFormats(); + + cbAllowUnlocks.setSelected(true); + + final Map preconDescriptions = new HashMap(); + IStorage preconDecks = QuestController.getPrecons(); + + for (PreconDeck preconDeck : preconDecks) { + if (QuestController.getPreconDeals(preconDeck).getMinWins() > 0) { + continue; + } + String name = preconDeck.getName(); + cbxPreconDeck.addItem(name); + String description = preconDeck.getDescription(); + description = "" + WordUtils.wrap(description, 40, "
", false) + ""; + preconDescriptions.put(name, description); + } + + // Fantasy box enabled by Default + cbFantasy.setSelected(true); + cbFantasy.setEnabled(true); + + cbxPreferredColor.setEnabled(true); + } + + private void updateStartingPoolOptions() { + StartingPoolType newVal = getStartingPoolType(); + lblUnrestricted.setVisible(newVal == StartingPoolType.Complete); + + lblPreconDeck.setVisible(newVal == StartingPoolType.Precon); + cbxPreconDeck.setVisible(newVal == StartingPoolType.Precon); + + lblFormat.setVisible(newVal == StartingPoolType.Rotating); + cbxFormat.setVisible(newVal == StartingPoolType.Rotating); + + btnDefineCustomFormat.setVisible(newVal == StartingPoolType.CustomFormat); + + boolean usesDeckList = newVal == StartingPoolType.SealedDeck || newVal == StartingPoolType.DraftDeck || newVal == StartingPoolType.Cube; + lblCustomDeck.setVisible(usesDeckList); + cbxCustomDeck.setVisible(usesDeckList); + + if (usesDeckList) { + cbxCustomDeck.removeAllItems(); + CardCollections decks = FModel.getDecks(); + switch (newVal) { + case SealedDeck: + for (DeckGroup d : decks.getSealed()) { + cbxCustomDeck.addItem(d.getHumanDeck()); + } + break; + case DraftDeck: + for (DeckGroup d : decks.getDraft()) { + cbxCustomDeck.addItem(d.getHumanDeck()); + } + break; + case Cube: + for (Deck d : decks.getCubes()) { + cbxCustomDeck.addItem(d); + } + break; + default: + break; + } + } + } + + private void updatePrizeOptions() { + StartingPoolType newVal = getPrizedPoolType(); + lblPrizeUnrestricted.setVisible(newVal == StartingPoolType.Complete); + cbAllowUnlocks.setVisible(newVal != StartingPoolType.Complete); + + lblPrizeFormat.setVisible(newVal == StartingPoolType.Rotating); + cbxPrizeFormat.setVisible(newVal == StartingPoolType.Rotating); + btnPrizeDefineCustomFormat.setVisible(newVal == StartingPoolType.CustomFormat); + lblPrizeSameAsStarting.setVisible(newVal == null); + + scroller.revalidate(); + } + + /** + * Aux function for enabling or disabling the format selection according to world selection. + */ + private void updateEnabledFormats() { + final QuestWorld qw = FModel.getWorlds().get(getStartingWorldName()); + if (qw != null) { + cbxStartingPool.setEnabled(qw.getFormat() == null); + cbxFormat.setEnabled(qw.getFormat() == null); + cbxCustomDeck.setEnabled(qw.getFormat() == null); + // Do NOT disable the following... + // cbxPrizeFormat.setEnabled(qw.getFormat() == null); + // cboAllowUnlocks.setEnabled(qw.getFormat() == null); + // cbxPrizedCards.setEnabled(qw.getFormat() == null); + } + } + + public int getSelectedDifficulty() { + int difficulty = cbxDifficulty.getSelectedIndex(); + if (difficulty < 0) { + difficulty = 0; + } + return difficulty; + } + + public String getSelectedPrecon() { + return cbxPreconDeck.getSelectedItem().toString(); + } + + public Deck getSelectedDeck() { + Object sel = cbxCustomDeck.getSelectedItem(); + return sel instanceof Deck ? (Deck) sel : null; + } + + public boolean isUnlockSetsAllowed() { + return cbAllowUnlocks.isSelected(); + } + + public StartingPoolType getStartingPoolType() { + return (StartingPoolType) cbxStartingPool.getSelectedItem(); + } + + public StartingPoolType getPrizedPoolType() { + Object v = cbxPrizedCards.getSelectedItem(); + return v instanceof StartingPoolType ? (StartingPoolType) v : null; + } + + public String getStartingWorldName() { + return cbxStartingWorld.getSelectedItem().toString(); + } + + public boolean isFantasy() { + return cbFantasy.isSelected(); + } + + public boolean randomizeColorDistribution() { + return stringRandomizedDistribution.equals(cbxPreferredColor.getSelectedItem()); + } + + public byte getPreferredColor() { + if (stringBalancedDistribution.equals(cbxPreferredColor.getSelectedItem()) + || stringRandomizedDistribution.equals(cbxPreferredColor.getSelectedItem())) { + return MagicColor.ALL_COLORS; + } + return MagicColor.fromName(cbxPreferredColor.getSelectedItem().split(" ")[0]); + } + + public GameFormat getRotatingFormat() { + return (GameFormat) cbxFormat.getSelectedItem(); + } + + public GameFormat getPrizedRotatingFormat() { + return (GameFormat) cbxPrizeFormat.getSelectedItem(); } @Override protected void doLayout(float startY, float width, float height) { - // TODO Auto-generated method stub - + float buttonHeight = btnEmbark.getAutoSizeBounds().height * 1.2f; + btnEmbark.setBounds(PADDING, height - buttonHeight - PADDING, width - 2 * PADDING, buttonHeight); + scroller.setBounds(0, startY, width, btnEmbark.getTop() - startY); } } diff --git a/forge-gui-mobile/src/forge/screens/quest/QuestMenu.java b/forge-gui-mobile/src/forge/screens/quest/QuestMenu.java index f90a540e6c9..8bedafda3a9 100644 --- a/forge-gui-mobile/src/forge/screens/quest/QuestMenu.java +++ b/forge-gui-mobile/src/forge/screens/quest/QuestMenu.java @@ -135,32 +135,27 @@ public class QuestMenu extends FPopupMenu implements IVQuestStats { @Override public IButton getLblCredits() { - // TODO Auto-generated method stub - return null; + return statsScreen.getLblCredits(); } @Override public IButton getLblLife() { - // TODO Auto-generated method stub - return null; + return statsScreen.getLblLife(); } @Override public IButton getLblWorld() { - // TODO Auto-generated method stub - return null; + return statsScreen.getLblWorld(); } @Override public IButton getLblWins() { - // TODO Auto-generated method stub - return null; + return statsScreen.getLblWins(); } @Override public IButton getLblLosses() { - // TODO Auto-generated method stub - return null; + return statsScreen.getLblLosses(); } @Override @@ -177,8 +172,7 @@ public class QuestMenu extends FPopupMenu implements IVQuestStats { @Override public IButton getLblWinStreak() { - // TODO Auto-generated method stub - return null; + return statsScreen.getLblWinStreak(); } @Override @@ -207,7 +201,6 @@ public class QuestMenu extends FPopupMenu implements IVQuestStats { @Override public boolean isChallengesView() { - // TODO Auto-generated method stub - return false; + return Forge.getCurrentScreen() == challengesScreen; } } diff --git a/forge-gui-mobile/src/forge/screens/quest/QuestStatsScreen.java b/forge-gui-mobile/src/forge/screens/quest/QuestStatsScreen.java index c373b9f8858..c80dd2cadce 100644 --- a/forge-gui-mobile/src/forge/screens/quest/QuestStatsScreen.java +++ b/forge-gui-mobile/src/forge/screens/quest/QuestStatsScreen.java @@ -1,15 +1,74 @@ package forge.screens.quest; +import forge.assets.FSkinFont; +import forge.assets.FSkinImage; import forge.screens.FScreen; +import forge.toolbox.FDisplayObject; +import forge.toolbox.FLabel; +import forge.toolbox.FOptionPane; +import forge.toolbox.FScrollPane; public class QuestStatsScreen extends FScreen { + private static final float PADDING = FOptionPane.PADDING; + + private final FScrollPane scroller = add(new FScrollPane() { + @Override + protected ScrollBounds layoutAndGetScrollBounds(float visibleWidth, float visibleHeight) { + float x = PADDING; + float y = PADDING; + float w = visibleWidth - 2 * PADDING; + float h = lblWins.getAutoSizeBounds().height; + for (FDisplayObject lbl : getChildren()) { + lbl.setBounds(x, y, w, h); + y += h + PADDING; + } + return new ScrollBounds(visibleWidth, y); + } + }); + private final FLabel lblWins = scroller.add(new FLabel.Builder() + .icon(FSkinImage.QUEST_PLUS) + .font(FSkinFont.get(15)).build()); + private final FLabel lblLosses = scroller.add(new FLabel.Builder() + .icon(FSkinImage.QUEST_MINUS) + .font(FSkinFont.get(15)).build()); + private final FLabel lblCredits = scroller.add(new FLabel.Builder() + .icon(FSkinImage.QUEST_COINSTACK) + .font(FSkinFont.get(15)).build()); + private final FLabel lblWinStreak = scroller.add(new FLabel.Builder() + .icon(FSkinImage.QUEST_PLUSPLUS) + .font(FSkinFont.get(15)).build()); + private final FLabel lblLife = scroller.add(new FLabel.Builder() + .icon(FSkinImage.QUEST_LIFE) + .font(FSkinFont.get(15)).build()); + private final FLabel lblWorld = scroller.add(new FLabel.Builder() + .icon(FSkinImage.QUEST_MAP) + .font(FSkinFont.get(15)).build()); + + public FLabel getLblWins() { + return lblWins; + } + public FLabel getLblLosses() { + return lblLosses; + } + public FLabel getLblCredits() { + return lblCredits; + } + public FLabel getLblWinStreak() { + return lblWinStreak; + } + public FLabel getLblLife() { + return lblLife; + } + public FLabel getLblWorld() { + return lblWorld; + } + public QuestStatsScreen() { - super("Quest Preferences", new QuestMenu()); + super("Quest Statistics", new QuestMenu()); } @Override protected void doLayout(float startY, float width, float height) { - // TODO Auto-generated method stub - + scroller.setBounds(0, startY, width, height - startY); } } diff --git a/forge-gui-mobile/src/forge/toolbox/FCheckBox.java b/forge-gui-mobile/src/forge/toolbox/FCheckBox.java index ab5be4c4f99..47b37914673 100644 --- a/forge-gui-mobile/src/forge/toolbox/FCheckBox.java +++ b/forge-gui-mobile/src/forge/toolbox/FCheckBox.java @@ -12,6 +12,7 @@ import forge.util.Utils; public class FCheckBox extends FLabel implements ICheckBox { private static final FSkinColor CHECK_COLOR = FSkinColor.get(Colors.CLR_TEXT); private static final FSkinColor BOX_COLOR = CHECK_COLOR.alphaColor(0.5f); + private static final float EXTRA_GAP = Utils.scaleX(3); public FCheckBox() { this("", false); @@ -24,6 +25,11 @@ public class FCheckBox extends FLabel implements ICheckBox { setIcon(new CheckBoxIcon()); } + @Override + protected float getExtraGapBetweenIconAndText() { + return EXTRA_GAP; + } + private class CheckBoxIcon implements FImage { @Override public float getWidth() { diff --git a/forge-gui-mobile/src/forge/toolbox/FComboBox.java b/forge-gui-mobile/src/forge/toolbox/FComboBox.java index b7989028b68..de6952f7d6f 100644 --- a/forge-gui-mobile/src/forge/toolbox/FComboBox.java +++ b/forge-gui-mobile/src/forge/toolbox/FComboBox.java @@ -7,12 +7,13 @@ import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment; import forge.Forge; import forge.Graphics; +import forge.interfaces.IComboBox; import forge.menu.FDropDownMenu; import forge.menu.FMenuItem; import forge.screens.FScreen; import forge.toolbox.FEvent.*; -public class FComboBox extends FTextField { +public class FComboBox extends FTextField implements IComboBox { private final List items = new ArrayList(); private E selectedItem; private final DropDown dropDown = new DropDown(); @@ -59,7 +60,7 @@ public class FComboBox extends FTextField { return false; } - public void clearItems() { + public void removeAllItems() { items.clear(); setSelectedItem(null); } diff --git a/forge-gui-mobile/src/forge/toolbox/FLabel.java b/forge-gui-mobile/src/forge/toolbox/FLabel.java index fd66ed7006b..a52fd42b36f 100644 --- a/forge-gui-mobile/src/forge/toolbox/FLabel.java +++ b/forge-gui-mobile/src/forge/toolbox/FLabel.java @@ -155,6 +155,13 @@ public class FLabel extends FDisplayObject implements IButton { insets = insets0; } + public HAlignment getAlignment() { + return alignment; + } + public void setAlignment(final HAlignment alignment0) { + alignment = alignment0; + } + public void setCommand(final FEventHandler command0) { command = command0; } @@ -220,7 +227,7 @@ public class FLabel extends FDisplayObject implements IButton { bounds.height += 2 * insets.y; if (icon != null) { - bounds.width += icon.getWidth() + insets.x; + bounds.width += icon.getWidth() + insets.x + getExtraGapBetweenIconAndText(); } return bounds; @@ -319,8 +326,9 @@ public class FLabel extends FDisplayObject implements IButton { if (pressed) { y++; } - x += iconWidth + insets.x; - w -= iconWidth + insets.x; + float dx = iconWidth + insets.x + getExtraGapBetweenIconAndText(); + x += dx; + w -= dx; g.startClip(x, y, w, h); g.drawText(text, font, textColor, x, y, w, h, false, HAlignment.LEFT, true); g.endClip(); @@ -349,6 +357,10 @@ public class FLabel extends FDisplayObject implements IButton { return false; } + protected float getExtraGapBetweenIconAndText() { + return 0; + } + @Override public void setTextColor(FSkinProp color) { setTextColor(FSkinColor.get(Colors.fromSkinProp(color))); diff --git a/forge-gui-mobile/src/forge/toolbox/FRadioButton.java b/forge-gui-mobile/src/forge/toolbox/FRadioButton.java index 8e92831ac99..4c42b4967a8 100644 --- a/forge-gui-mobile/src/forge/toolbox/FRadioButton.java +++ b/forge-gui-mobile/src/forge/toolbox/FRadioButton.java @@ -14,6 +14,7 @@ import forge.util.Utils; public class FRadioButton extends FLabel { private static final FSkinColor INNER_CIRCLE_COLOR = FSkinColor.get(Colors.CLR_TEXT); private static final FSkinColor OUTER_CIRCLE_COLOR = INNER_CIRCLE_COLOR.alphaColor(0.5f); + private static final float EXTRA_GAP = Utils.scaleX(3); private RadioButtonGroup group; @@ -41,6 +42,11 @@ public class FRadioButton extends FLabel { } } + @Override + protected float getExtraGapBetweenIconAndText() { + return EXTRA_GAP; + } + @Override public void setSelected(final boolean b0) { if (isSelected() == b0 || !b0) { return; } //don't support unselecting radio button