From 8c2312bf07f9feee4f926342061630f6e4b98d8c Mon Sep 17 00:00:00 2001 From: drdev Date: Mon, 26 May 2014 21:43:29 +0000 Subject: [PATCH] Refactor font getting and setting --- forge-gui-mobile/src/forge/Forge.java | 5 +-- .../src/forge/assets/FSkinFont.java | 44 +++++++++++++------ .../src/forge/assets/TextRenderer.java | 28 ++++++------ .../src/forge/itemmanager/DeckManager.java | 2 +- .../src/forge/itemmanager/ItemManager.java | 3 +- .../itemmanager/filters/CardSearchFilter.java | 4 +- .../forge/itemmanager/filters/ItemFilter.java | 5 ++- .../itemmanager/filters/ListLabelFilter.java | 5 ++- .../itemmanager/filters/TextSearchFilter.java | 4 +- .../filters/ToggleButtonsFilter.java | 2 +- .../itemmanager/filters/ValueRangeFilter.java | 2 +- .../forge/itemmanager/views/ImageView.java | 13 +++--- .../forge/itemmanager/views/ItemListView.java | 6 +-- .../src/forge/screens/FScreen.java | 4 +- .../constructed/ConstructedScreen.java | 15 ++++--- .../screens/match/views/VAssignDamage.java | 3 +- .../screens/match/views/VPhaseIndicator.java | 4 +- .../src/forge/screens/match/views/VStack.java | 2 +- .../match/winlose/GauntletWinLose.java | 13 +++--- .../screens/match/winlose/LimitedWinLose.java | 5 ++- .../screens/match/winlose/ViewWinLose.java | 9 ++-- .../src/forge/toolbox/DualListBox.java | 16 +++---- .../src/forge/toolbox/FDialog.java | 4 +- .../src/forge/toolbox/FGroupList.java | 7 +-- .../src/forge/toolbox/FLabel.java | 14 +++--- forge-gui-mobile/src/forge/toolbox/FList.java | 7 +-- .../src/forge/toolbox/FTextField.java | 17 +++---- .../src/forge/toolbox/ListChooser.java | 26 +++++------ 28 files changed, 146 insertions(+), 123 deletions(-) diff --git a/forge-gui-mobile/src/forge/Forge.java b/forge-gui-mobile/src/forge/Forge.java index deb890e4617..9ac30c4999f 100644 --- a/forge-gui-mobile/src/forge/Forge.java +++ b/forge-gui-mobile/src/forge/Forge.java @@ -952,7 +952,6 @@ public class Forge implements ApplicationListener { } TextBounds textBounds; - int fontSize = font.getSize(); if (wrap) { textBounds = font.getWrappedBounds(text, w); } @@ -963,8 +962,8 @@ public class Forge implements ApplicationListener { boolean needClip = false; while (textBounds.width > w || textBounds.height > h) { - if (fontSize > FSkinFont.MIN_FONT_SIZE) { //shrink font to fit if possible - font = FSkinFont.get(--fontSize); + if (font.canShrink()) { //shrink font to fit if possible + font = font.shrink(); if (wrap) { textBounds = font.getWrappedBounds(text, w); } diff --git a/forge-gui-mobile/src/forge/assets/FSkinFont.java b/forge-gui-mobile/src/forge/assets/FSkinFont.java index 8bef9bbe248..d76473b175c 100644 --- a/forge-gui-mobile/src/forge/assets/FSkinFont.java +++ b/forge-gui-mobile/src/forge/assets/FSkinFont.java @@ -23,17 +23,18 @@ import forge.FThreads; import forge.util.Utils; public class FSkinFont { - public static final int MIN_FONT_SIZE = Math.round(8 / Utils.MAX_RATIO); - public static final int MAX_FONT_SIZE = Math.round(72 / Utils.MAX_RATIO); + private static final int MIN_FONT_SIZE = 8; + private static final int MAX_FONT_SIZE = 72; private static final String TTF_FILE = "font1.ttf"; private static final Map fonts = new HashMap(); - public static FSkinFont get(final int size0) { - FSkinFont skinFont = fonts.get(size0); + public static FSkinFont get(final int unscaledSize) { + int fontSize0 = (int)Utils.scaleMax(unscaledSize); + FSkinFont skinFont = fonts.get(fontSize0); if (skinFont == null) { - skinFont = new FSkinFont(size0); - fonts.put(size0, skinFont); + skinFont = new FSkinFont(fontSize0); + fonts.put(fontSize0, skinFont); } return skinFont; } @@ -61,18 +62,26 @@ public class FSkinFont { } } - private final int size; + private final int fontSize; + private final float scale; private BitmapFont font; - private FSkinFont(final int size0) { - size = size0; + private FSkinFont(int fontSize0) { + if (fontSize0 < MIN_FONT_SIZE) { + scale = fontSize0 / MIN_FONT_SIZE; + fontSize0 = MIN_FONT_SIZE; + } + else if (fontSize0 > MAX_FONT_SIZE) { + scale = fontSize0 / MAX_FONT_SIZE; + fontSize0 = MAX_FONT_SIZE; + } + else { + scale = 1; + } + fontSize = fontSize0; updateFont(); } - public int getSize() { - return size; - } - // Expose methods from font that updates scale as needed public TextBounds getBounds(CharSequence str) { return font.getBounds(str); @@ -103,8 +112,15 @@ public class FSkinFont { } } + public boolean canShrink() { + return fontSize > MIN_FONT_SIZE; + } + + public FSkinFont shrink() { + return get(fontSize - 1); + } + private void updateFont() { - int fontSize = (int)Utils.scaleMax(size); String fontName = "f" + fontSize; FileHandle fontFile = Gdx.files.absolute(FSkin.getFontDir() + fontName + ".fnt"); if (fontFile.exists()) { diff --git a/forge-gui-mobile/src/forge/assets/TextRenderer.java b/forge-gui-mobile/src/forge/assets/TextRenderer.java index bffb466f59f..0f49b08816c 100644 --- a/forge-gui-mobile/src/forge/assets/TextRenderer.java +++ b/forge-gui-mobile/src/forge/assets/TextRenderer.java @@ -81,8 +81,8 @@ public class TextRenderer { totalHeight = font.getCapHeight(); if (totalHeight > height) { //immediately try one font size smaller if no room for anything - if (font.getSize() > FSkinFont.MIN_FONT_SIZE) { - updatePieces(FSkinFont.get(font.getSize() - 1)); + if (font.canShrink()) { + updatePieces(font.shrink()); return; } needClip = true; @@ -127,8 +127,8 @@ public class TextRenderer { lineNum++; if (totalHeight > height) { //try next font size down if out of space - if (font.getSize() > FSkinFont.MIN_FONT_SIZE) { - updatePieces(FSkinFont.get(font.getSize() - 1)); + if (font.canShrink()) { + updatePieces(font.shrink()); return; } needClip = true; @@ -159,8 +159,8 @@ public class TextRenderer { lineNum++; if (totalHeight > height) { //try next font size down if out of space - if (font.getSize() > FSkinFont.MIN_FONT_SIZE) { - updatePieces(FSkinFont.get(font.getSize() - 1)); + if (font.canShrink()) { + updatePieces(font.shrink()); return; } needClip = true; @@ -182,9 +182,9 @@ public class TextRenderer { } } } - else if (font.getSize() > FSkinFont.MIN_FONT_SIZE) { + else if (font.canShrink()) { //try next font size down if out of space - updatePieces(FSkinFont.get(font.getSize() - 1)); + updatePieces(font.shrink()); return; } else { @@ -291,8 +291,8 @@ public class TextRenderer { lineNum++; if (totalHeight > height) { //try next font size down if out of space - if (font.getSize() > FSkinFont.MIN_FONT_SIZE) { - updatePieces(FSkinFont.get(font.getSize() - 1)); + if (font.canShrink()) { + updatePieces(font.shrink()); return; } needClip = true; @@ -349,17 +349,17 @@ public class TextRenderer { lineNum++; if (totalHeight > height) { //try next font size down if out of space - if (font.getSize() > FSkinFont.MIN_FONT_SIZE) { - updatePieces(FSkinFont.get(font.getSize() - 1)); + if (font.canShrink()) { + updatePieces(font.shrink()); return; } needClip = true; } } else { - if (font.getSize() > FSkinFont.MIN_FONT_SIZE) { + if (font.canShrink()) { //try next font size down if out of space - updatePieces(FSkinFont.get(font.getSize() - 1)); + updatePieces(font.shrink()); return; } needClip = true; diff --git a/forge-gui-mobile/src/forge/itemmanager/DeckManager.java b/forge-gui-mobile/src/forge/itemmanager/DeckManager.java index 17ce03f5864..799690b7bc8 100644 --- a/forge-gui-mobile/src/forge/itemmanager/DeckManager.java +++ b/forge-gui-mobile/src/forge/itemmanager/DeckManager.java @@ -295,7 +295,7 @@ public final class DeckManager extends ItemManager { //draw path and main/side on second line x = FList.PADDING; y += IMAGE_SIZE + FList.PADDING; - font = FSkinFont.get(font.getSize() - 2); + font = font.shrink().shrink(); float lineHeight = font.getLineHeight(); int mainSize = deck.getMainSize(); diff --git a/forge-gui-mobile/src/forge/itemmanager/ItemManager.java b/forge-gui-mobile/src/forge/itemmanager/ItemManager.java index fdc79501311..b02551d937a 100644 --- a/forge-gui-mobile/src/forge/itemmanager/ItemManager.java +++ b/forge-gui-mobile/src/forge/itemmanager/ItemManager.java @@ -22,6 +22,7 @@ import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.Iterables; +import forge.assets.FSkinFont; import forge.assets.FSkinImage; import forge.item.InventoryItem; import forge.itemmanager.filters.ItemFilter; @@ -71,7 +72,7 @@ public abstract class ItemManager extends FContainer im private final FLabel lblCaption = new FLabel.Builder() .align(HAlignment.LEFT) - .fontSize(12) + .font(FSkinFont.get(12)) .build(); private static final FSkinImage VIEW_OPTIONS_ICON = FSkinImage.SETTINGS; diff --git a/forge-gui-mobile/src/forge/itemmanager/filters/CardSearchFilter.java b/forge-gui-mobile/src/forge/itemmanager/filters/CardSearchFilter.java index ab3d55bb61d..3718a3b2eb4 100644 --- a/forge-gui-mobile/src/forge/itemmanager/filters/CardSearchFilter.java +++ b/forge-gui-mobile/src/forge/itemmanager/filters/CardSearchFilter.java @@ -48,7 +48,7 @@ public class CardSearchFilter extends TextSearchFilter { super.buildWidget(widget); cbSearchMode = new FComboBox(); - cbSearchMode.setFontSize(txtSearch.getFontSize()); + cbSearchMode.setFont(txtSearch.getFont()); cbSearchMode.addItem("in"); cbSearchMode.addItem("not in"); cbSearchMode.setChangedHandler(new FEventHandler() { @@ -79,7 +79,7 @@ public class CardSearchFilter extends TextSearchFilter { } private FLabel addButton(Widget widget, String text) { - FLabel button = new FLabel.Builder().text(text).fontSize(txtSearch.getFontSize()).align(HAlignment.CENTER) + FLabel button = new FLabel.Builder().text(text).font(txtSearch.getFont()).align(HAlignment.CENTER) .selectable().selected().command(new FEventHandler() { @Override public void handleEvent(FEvent e) { diff --git a/forge-gui-mobile/src/forge/itemmanager/filters/ItemFilter.java b/forge-gui-mobile/src/forge/itemmanager/filters/ItemFilter.java index e6273690b9f..1e86b89669e 100644 --- a/forge-gui-mobile/src/forge/itemmanager/filters/ItemFilter.java +++ b/forge-gui-mobile/src/forge/itemmanager/filters/ItemFilter.java @@ -2,6 +2,7 @@ package forge.itemmanager.filters; import com.google.common.base.Predicate; +import forge.assets.FSkinFont; import forge.item.InventoryItem; import forge.itemmanager.ItemManager; import forge.toolbox.FContainer; @@ -13,8 +14,8 @@ import forge.util.Utils; public abstract class ItemFilter { public static final float PADDING = Utils.scaleMax(3); - public static final int DEFAULT_FONT_SIZE = 11; - public static final float PANEL_HEIGHT = FTextField.getDefaultHeight(DEFAULT_FONT_SIZE) + PADDING; + public static final FSkinFont DEFAULT_FONT = FSkinFont.get(11); + public static final float PANEL_HEIGHT = FTextField.getDefaultHeight(DEFAULT_FONT) + PADDING; protected final ItemManager itemManager; private FilterPanel panel; diff --git a/forge-gui-mobile/src/forge/itemmanager/filters/ListLabelFilter.java b/forge-gui-mobile/src/forge/itemmanager/filters/ListLabelFilter.java index 9b8eb2385e6..09b58deb039 100644 --- a/forge-gui-mobile/src/forge/itemmanager/filters/ListLabelFilter.java +++ b/forge-gui-mobile/src/forge/itemmanager/filters/ListLabelFilter.java @@ -2,6 +2,7 @@ package forge.itemmanager.filters; import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment; +import forge.assets.FSkinFont; import forge.item.InventoryItem; import forge.itemmanager.ItemManager; import forge.menu.FTooltip; @@ -11,6 +12,8 @@ import forge.util.TextUtil; public abstract class ListLabelFilter extends ItemFilter { + public static final FSkinFont LABEL_FONT = FSkinFont.get(12); + private ListLabel label; protected ListLabelFilter(ItemManager itemManager0) { @@ -58,7 +61,7 @@ public abstract class ListLabelFilter extends ItemFilte private class ListLabel extends FLabel { private ListLabel() { - super(new FLabel.Builder().align(HAlignment.LEFT).fontSize(12)); + super(new FLabel.Builder().align(HAlignment.LEFT).font(LABEL_FONT)); } @Override diff --git a/forge-gui-mobile/src/forge/itemmanager/filters/TextSearchFilter.java b/forge-gui-mobile/src/forge/itemmanager/filters/TextSearchFilter.java index 8021e601a8a..1f061f12d75 100644 --- a/forge-gui-mobile/src/forge/itemmanager/filters/TextSearchFilter.java +++ b/forge-gui-mobile/src/forge/itemmanager/filters/TextSearchFilter.java @@ -3,6 +3,7 @@ package forge.itemmanager.filters; import com.google.common.base.Predicate; import com.google.common.base.Predicates; +import forge.assets.FSkinFont; import forge.item.InventoryItem; import forge.itemmanager.ItemManager; import forge.itemmanager.SFilterUtil; @@ -14,6 +15,7 @@ import forge.util.LayoutHelper; public class TextSearchFilter extends ItemFilter { + private static final FSkinFont FONT = FSkinFont.get(12); protected FTextField txtSearch; public TextSearchFilter(ItemManager itemManager0) { @@ -56,7 +58,7 @@ public class TextSearchFilter extends ItemFilter { @Override protected void buildWidget(Widget widget) { txtSearch = new FTextField(); - txtSearch.setFontSize(ItemFilter.DEFAULT_FONT_SIZE + 1); + txtSearch.setFont(FONT); txtSearch.setGhostText("Search"); widget.add(txtSearch); diff --git a/forge-gui-mobile/src/forge/itemmanager/filters/ToggleButtonsFilter.java b/forge-gui-mobile/src/forge/itemmanager/filters/ToggleButtonsFilter.java index e0020286e7d..85099fd983c 100644 --- a/forge-gui-mobile/src/forge/itemmanager/filters/ToggleButtonsFilter.java +++ b/forge-gui-mobile/src/forge/itemmanager/filters/ToggleButtonsFilter.java @@ -73,7 +73,7 @@ public abstract class ToggleButtonsFilter extends ItemF private ToggleButton(FImage icon) { super(new FLabel.Builder() - .icon(icon).fontSize(11).iconScaleFactor(0.9f) + .icon(icon).font(ItemFilter.DEFAULT_FONT).iconScaleFactor(0.9f) .align(HAlignment.CENTER) .selectable(true).selected(true) .command(new FEventHandler() { diff --git a/forge-gui-mobile/src/forge/itemmanager/filters/ValueRangeFilter.java b/forge-gui-mobile/src/forge/itemmanager/filters/ValueRangeFilter.java index b4f3a074bcf..5105bf16084 100644 --- a/forge-gui-mobile/src/forge/itemmanager/filters/ValueRangeFilter.java +++ b/forge-gui-mobile/src/forge/itemmanager/filters/ValueRangeFilter.java @@ -55,7 +55,7 @@ public abstract class ValueRangeFilter extends ItemFilt lowerBound = addSpinner(widget, true); String text = " <= " + this.getCaption() + " <= "; - label = new FLabel.Builder().text(text).fontSize(12).build(); + label = new FLabel.Builder().text(text).font(ListLabelFilter.LABEL_FONT).build(); widget.add(label); upperBound = addSpinner(widget, false); diff --git a/forge-gui-mobile/src/forge/itemmanager/views/ImageView.java b/forge-gui-mobile/src/forge/itemmanager/views/ImageView.java index f3c15c9183b..8d10b54ffe3 100644 --- a/forge-gui-mobile/src/forge/itemmanager/views/ImageView.java +++ b/forge-gui-mobile/src/forge/itemmanager/views/ImageView.java @@ -42,10 +42,11 @@ import com.badlogic.gdx.math.Vector2; public class ImageView extends ItemView { private static final float PADDING = Utils.scaleMin(5); private static final float PILE_SPACING_Y = 0.1f; + private static final FSkinFont LABEL_FONT = FSkinFont.get(12); private static final FSkinColor GROUP_HEADER_FORE_COLOR = FSkinColor.get(Colors.CLR_TEXT); private static final FSkinColor OPTION_LABEL_COLOR = GROUP_HEADER_FORE_COLOR.alphaColor(0.7f); private static final FSkinColor GROUP_HEADER_LINE_COLOR = GROUP_HEADER_FORE_COLOR.alphaColor(0.5f); - private static final FSkinFont GROUP_HEADER_FONT = FSkinFont.get(12); + private static final FSkinFont GROUP_HEADER_FONT = LABEL_FONT; private static final float GROUP_HEADER_HEIGHT = Utils.scaleY(19); private static final float GROUP_HEADER_GLYPH_WIDTH = Utils.scaleX(6); private static final float GROUP_HEADER_LINE_THICKNESS = Utils.scaleY(1); @@ -137,9 +138,9 @@ public class ImageView extends ItemView { } } private final ExpandCollapseButton btnExpandCollapseAll = new ExpandCollapseButton(); - private final FLabel lblGroupBy = new FLabel.Builder().text("Groups:").fontSize(12).textColor(OPTION_LABEL_COLOR).build(); + private final FLabel lblGroupBy = new FLabel.Builder().text("Groups:").font(LABEL_FONT).textColor(OPTION_LABEL_COLOR).build(); private final FComboBox cbGroupByOptions = new FComboBox(); - private final FLabel lblPileBy = new FLabel.Builder().text("Piles:").fontSize(12).textColor(OPTION_LABEL_COLOR).build(); + private final FLabel lblPileBy = new FLabel.Builder().text("Piles:").font(LABEL_FONT).textColor(OPTION_LABEL_COLOR).build(); private final FComboBox cbPileByOptions = new FComboBox(); public ImageView(ItemManager itemManager0, ItemManagerModel model0) { @@ -182,8 +183,8 @@ public class ImageView extends ItemView { } }); - cbGroupByOptions.setFontSize(12); - cbPileByOptions.setFontSize(12); + cbGroupByOptions.setFont(LABEL_FONT); + cbPileByOptions.setFont(LABEL_FONT); getPnlOptions().add(btnExpandCollapseAll); getPnlOptions().add(lblGroupBy); getPnlOptions().add(cbGroupByOptions); @@ -398,7 +399,7 @@ public class ImageView extends ItemView { protected float layoutOptionsPanel(float visibleWidth, float height) { float padding = ItemFilter.PADDING; float x = 0; - float h = FTextField.getDefaultHeight(ItemFilter.DEFAULT_FONT_SIZE); + float h = FTextField.getDefaultHeight(ItemFilter.DEFAULT_FONT); float y = (height - h) / 2; btnExpandCollapseAll.setBounds(x, y, h, h); x += h + padding; diff --git a/forge-gui-mobile/src/forge/itemmanager/views/ItemListView.java b/forge-gui-mobile/src/forge/itemmanager/views/ItemListView.java index 8bd8bc42009..2891e1260be 100644 --- a/forge-gui-mobile/src/forge/itemmanager/views/ItemListView.java +++ b/forge-gui-mobile/src/forge/itemmanager/views/ItemListView.java @@ -91,7 +91,7 @@ public final class ItemListView extends ItemView { if (config.getShowUniqueCardsOption()) { final FCheckBox chkBox = new FCheckBox("Unique Cards Only", itemManager.getWantUnique()); - chkBox.setFontSize(list.getFontSize()); + chkBox.setFont(list.getFont()); chkBox.setCommand(new FEventHandler() { @Override public void handleEvent(FEvent e) { @@ -117,7 +117,7 @@ public final class ItemListView extends ItemView { final FCheckBox chkBox = new FCheckBox(StringUtils.isEmpty(col.getShortName()) ? col.getLongName() : col.getShortName(), col.isVisible()); - chkBox.setFontSize(list.getFontSize()); + chkBox.setFont(list.getFont()); chkBox.setCommand(new FEventHandler() { @Override public void handleEvent(FEvent e) { @@ -303,7 +303,7 @@ public final class ItemListView extends ItemView { renderer.drawValue(g, value, font, foreColor, pressed, x + 1, y, w - 2, h); //x + 1 and w - 2 to account for left and right borders } }); - setFontSize(14); + setFont(FSkinFont.get(14)); } public Iterable getCells() { diff --git a/forge-gui-mobile/src/forge/screens/FScreen.java b/forge-gui-mobile/src/forge/screens/FScreen.java index da8f624b8c6..a0679295708 100644 --- a/forge-gui-mobile/src/forge/screens/FScreen.java +++ b/forge-gui-mobile/src/forge/screens/FScreen.java @@ -7,6 +7,7 @@ import forge.Forge; import forge.Forge.Graphics; import forge.assets.FImage; import forge.assets.FSkinColor; +import forge.assets.FSkinFont; import forge.assets.FSkinColor.Colors; import forge.assets.FSkinTexture; import forge.toolbox.FContainer; @@ -22,6 +23,7 @@ public abstract class FScreen extends FContainer { public static final FSkinColor HEADER_BACK_COLOR = HEADER_BTN_PRESSED_COLOR.stepColor(-80); public static final float HEADER_HEIGHT = Math.round(Utils.AVG_FINGER_HEIGHT * 0.8f); + private static final FSkinFont HEADER_FONT = FSkinFont.get(16); private final FLabel btnBack, lblHeader; @@ -38,7 +40,7 @@ public abstract class FScreen extends FContainer { btnBack = null; } if (headerCaption != null) { - lblHeader = add(new FLabel.Builder().text(headerCaption).fontSize(16).align(HAlignment.CENTER).build()); + lblHeader = add(new FLabel.Builder().text(headerCaption).font(HEADER_FONT).align(HAlignment.CENTER).build()); } else { lblHeader = null; diff --git a/forge-gui-mobile/src/forge/screens/constructed/ConstructedScreen.java b/forge-gui-mobile/src/forge/screens/constructed/ConstructedScreen.java index 546807561aa..5bbaffe36ac 100644 --- a/forge-gui-mobile/src/forge/screens/constructed/ConstructedScreen.java +++ b/forge-gui-mobile/src/forge/screens/constructed/ConstructedScreen.java @@ -55,16 +55,17 @@ public class ConstructedScreen extends LaunchScreen { private static final ForgePreferences prefs = FModel.getPreferences(); private static final float PADDING = Utils.scaleMin(5); private static final int MAX_PLAYERS = 8; - private static final int VARIANTS_FONT_SIZE = 12; + private static final FSkinFont VARIANTS_FONT = FSkinFont.get(12); + private static final FSkinFont LABEL_FONT = FSkinFont.get(14); // General variables - private final FLabel lblPlayers = new FLabel.Builder().text("Players:").fontSize(VARIANTS_FONT_SIZE).build(); + private final FLabel lblPlayers = new FLabel.Builder().text("Players:").font(VARIANTS_FONT).build(); private final FComboBox cbPlayerCount; private List teams = new ArrayList(MAX_PLAYERS); private List archenemyTeams = new ArrayList(MAX_PLAYERS); // Variants frame and variables - private final FLabel lblVariants = new FLabel.Builder().text("Variants:").fontSize(VARIANTS_FONT_SIZE).build(); + private final FLabel lblVariants = new FLabel.Builder().text("Variants:").font(VARIANTS_FONT).build(); private final FComboBox cbVariants; private final Set appliedVariants = new TreeSet(); @@ -102,7 +103,7 @@ public class ConstructedScreen extends LaunchScreen { add(lblPlayers); cbPlayerCount = add(new FComboBox()); - cbPlayerCount.setFontSize(VARIANTS_FONT_SIZE); + cbPlayerCount.setFont(VARIANTS_FONT); for (int i = 2; i <= MAX_PLAYERS; i++) { cbPlayerCount.addItem(i); } @@ -120,7 +121,7 @@ public class ConstructedScreen extends LaunchScreen { add(lblVariants); cbVariants = add(new FComboBox()); - cbVariants.setFontSize(VARIANTS_FONT_SIZE); + cbVariants.setFont(VARIANTS_FONT); cbVariants.addItem("(None)"); cbVariants.addItem(GameType.Vanguard); cbVariants.addItem(GameType.Commander); @@ -786,7 +787,7 @@ public class ConstructedScreen extends LaunchScreen { } txtPlayerName.setText(name); - txtPlayerName.setFontSize(14); + txtPlayerName.setFont(LABEL_FONT); txtPlayerName.setChangedHandler(nameChangedHandler); } @@ -890,7 +891,7 @@ public class ConstructedScreen extends LaunchScreen { /** Adds a pre-styled FLabel component with the specified title. */ private FLabel newLabel(String title) { - return new FLabel.Builder().text(title).fontSize(14).align(HAlignment.RIGHT).build(); + return new FLabel.Builder().text(title).font(LABEL_FONT).align(HAlignment.RIGHT).build(); } private List getUsedAvatars() { diff --git a/forge-gui-mobile/src/forge/screens/match/views/VAssignDamage.java b/forge-gui-mobile/src/forge/screens/match/views/VAssignDamage.java index b221b886800..9d3da0da92b 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VAssignDamage.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VAssignDamage.java @@ -17,6 +17,7 @@ */ package forge.screens.match.views; +import forge.assets.FSkinFont; import forge.assets.FSkinImage; import forge.card.CardZoom; import forge.game.GameEntity; @@ -232,7 +233,7 @@ public class VAssignDamage extends FDialog { } cardPanel = add(new AttDefCardPanel(fakeCard)); } - label = add(new FLabel.Builder().text("0").fontSize(18).align(HAlignment.CENTER).build()); + label = add(new FLabel.Builder().text("0").font(FSkinFont.get(18)).align(HAlignment.CENTER).build()); btnSubtract = add(new FLabel.ButtonBuilder().icon(FSkinImage.MINUS).command(new FEventHandler() { @Override public void handleEvent(FEvent e) { diff --git a/forge-gui-mobile/src/forge/screens/match/views/VPhaseIndicator.java b/forge-gui-mobile/src/forge/screens/match/views/VPhaseIndicator.java index f590d25445a..70279cb6c0b 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VPhaseIndicator.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VPhaseIndicator.java @@ -65,8 +65,8 @@ public class VPhaseIndicator extends FContainer { for (PhaseLabel lbl : phaseLabels.values()) { bounds = font.getBounds(lbl.caption); if (bounds.width > w) { - if (font.getSize() > FSkinFont.MIN_FONT_SIZE) { - font = FSkinFont.get(font.getSize() - 1); + if (font.canShrink()) { + font = font.shrink(); return _getPreferredHeight(w); } break; diff --git a/forge-gui-mobile/src/forge/screens/match/views/VStack.java b/forge-gui-mobile/src/forge/screens/match/views/VStack.java index 0ad3dd785a1..ba357927574 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VStack.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VStack.java @@ -86,7 +86,7 @@ public class VStack extends FDropDown { float width = totalWidth - 2 * PADDING; if (stack.isEmpty()) { //show label if stack empty - FLabel label = add(new FLabel.Builder().text("[Empty]").fontSize(FONT.getSize()).align(HAlignment.CENTER).build()); + FLabel label = add(new FLabel.Builder().text("[Empty]").font(FONT).align(HAlignment.CENTER).build()); height = Math.round(label.getAutoSizeBounds().height) + 2 * PADDING; label.setBounds(x, y, width, height); diff --git a/forge-gui-mobile/src/forge/screens/match/winlose/GauntletWinLose.java b/forge-gui-mobile/src/forge/screens/match/winlose/GauntletWinLose.java index 615463202bd..3200380ff1e 100644 --- a/forge-gui-mobile/src/forge/screens/match/winlose/GauntletWinLose.java +++ b/forge-gui-mobile/src/forge/screens/match/winlose/GauntletWinLose.java @@ -25,6 +25,7 @@ import forge.GuiBase; import forge.LobbyPlayer; import forge.assets.FSkinColor; import forge.assets.FSkinColor.Colors; +import forge.assets.FSkinFont; import forge.assets.FSkinImage; import forge.deck.Deck; import forge.game.Game; @@ -102,9 +103,9 @@ public class GauntletWinLose extends ControlWinLose { if (gd.getCompleted() == lstDecks.size()) { lblGraphic = new FLabel.Builder() .icon(FSkinImage.QUEST_COIN).build(); - lblMessage1 = new FLabel.Builder().fontSize(24) + lblMessage1 = new FLabel.Builder().font(FSkinFont.get(24)) .text("CONGRATULATIONS!").build(); - lblMessage2 = new FLabel.Builder().fontSize(18) + lblMessage2 = new FLabel.Builder().font(FSkinFont.get(18)) .text("You made it through the gauntlet!").build(); this.getView().getBtnContinue().setVisible(false); @@ -132,9 +133,9 @@ public class GauntletWinLose extends ControlWinLose { else { lblGraphic = new FLabel.Builder() .icon(FSkinImage.QUEST_HEART).build(); - lblMessage1 = new FLabel.Builder().fontSize(24) + lblMessage1 = new FLabel.Builder().font(FSkinFont.get(24)) .text("DEFEATED!").build(); - lblMessage2 = new FLabel.Builder().fontSize(18) + lblMessage2 = new FLabel.Builder().font(FSkinFont.get(18)) .text("You have failed to pass the gauntlet.").build(); this.getView().getBtnContinue().setVisible(false); @@ -153,7 +154,7 @@ public class GauntletWinLose extends ControlWinLose { // Custom panel display final FLabel lblTitle = new FLabel.Builder().text("Gauntlet Progress") - .align(HAlignment.CENTER).fontSize(18).build(); + .align(HAlignment.CENTER).font(FSkinFont.get(18)).build(); final FPanel pnl = this.getView().getPnlCustom(); pnl.setBackColor(FSkinColor.get(Colors.CLR_THEME2)); @@ -161,7 +162,7 @@ public class GauntletWinLose extends ControlWinLose { FLabel lblTemp; for (int i = 0; i < len; i++) { - lblTemp = new FLabel.Builder().fontSize(14).build(); + lblTemp = new FLabel.Builder().font(FSkinFont.get(14)).build(); if (i <= num) { lblTemp.setTextColor(FSkinColor.getStandardColor(Color.GREEN).stepColor(20)); diff --git a/forge-gui-mobile/src/forge/screens/match/winlose/LimitedWinLose.java b/forge-gui-mobile/src/forge/screens/match/winlose/LimitedWinLose.java index 398666d2414..2ec6d17ab0a 100644 --- a/forge-gui-mobile/src/forge/screens/match/winlose/LimitedWinLose.java +++ b/forge-gui-mobile/src/forge/screens/match/winlose/LimitedWinLose.java @@ -20,6 +20,7 @@ package forge.screens.match.winlose; import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment; import forge.GuiBase; +import forge.assets.FSkinFont; import forge.game.Game; import forge.limited.GauntletMini; import forge.model.FModel; @@ -109,9 +110,9 @@ public class LimitedWinLose extends ControlWinLose { * @param String - the title to be displayed */ private void showTournamentInfo(final String newTitle) { - final FLabel lblTitle = new FLabel.Builder().text(newTitle).fontSize(18).align(HAlignment.CENTER).build(); + final FLabel lblTitle = new FLabel.Builder().text(newTitle).font(FSkinFont.get(18)).align(HAlignment.CENTER).build(); final FLabel lblSubTitle = new FLabel.Builder().text("Round: " + gauntlet.getCurrentRound() + "/" + gauntlet.getRounds()) - .align(HAlignment.CENTER).fontSize(17).build(); + .align(HAlignment.CENTER).font(FSkinFont.get(17)).build(); this.getView().getPnlCustom().add(lblTitle); this.getView().getPnlCustom().add(lblSubTitle); } diff --git a/forge-gui-mobile/src/forge/screens/match/winlose/ViewWinLose.java b/forge-gui-mobile/src/forge/screens/match/winlose/ViewWinLose.java index 53f35bc9b39..577e36d06ce 100644 --- a/forge-gui-mobile/src/forge/screens/match/winlose/ViewWinLose.java +++ b/forge-gui-mobile/src/forge/screens/match/winlose/ViewWinLose.java @@ -5,6 +5,7 @@ import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment; import forge.Forge; import forge.assets.FSkinColor; import forge.assets.FSkinColor.Colors; +import forge.assets.FSkinFont; import forge.game.Game; import forge.game.GameLog; import forge.game.GameLogEntry; @@ -40,8 +41,8 @@ public class ViewWinLose extends FOverlay { game = game0; - lblTitle = add(new FLabel.Builder().fontSize(30).align(HAlignment.CENTER).build()); - lblStats = add(new FLabel.Builder().fontSize(26).align(HAlignment.CENTER).build()); + lblTitle = add(new FLabel.Builder().font(FSkinFont.get(30)).align(HAlignment.CENTER).build()); + lblStats = add(new FLabel.Builder().font(FSkinFont.get(26)).align(HAlignment.CENTER).build()); pnlOutcomes = add(new OutcomesPanel()); pnlCustom = new FPanel(); @@ -81,7 +82,7 @@ public class ViewWinLose extends FOverlay { btnQuit.setFontSize(22); btnContinue.setEnabled(!game0.getMatch().isMatchOver()); - lblLog = add(new FLabel.Builder().text("Game Log").align(HAlignment.CENTER).fontSize(18).build()); + lblLog = add(new FLabel.Builder().text("Game Log").align(HAlignment.CENTER).font(FSkinFont.get(18)).build()); txtLog = add(new FTextArea(game.getGameLog().getLogText(null).replace("[COMPUTER]", "[AI]")) { @Override public boolean tap(float x, float y, int count) { @@ -141,7 +142,7 @@ public class ViewWinLose extends FOverlay { private void showGameOutcomeSummary() { GameLog log = game.getGameLog(); for (GameLogEntry o : log.getLogEntriesExact(GameLogEntryType.GAME_OUTCOME)) { - pnlOutcomes.add(new FLabel.Builder().text(o.message).fontSize(14).build()); + pnlOutcomes.add(new FLabel.Builder().text(o.message).font(FSkinFont.get(14)).build()); } } diff --git a/forge-gui-mobile/src/forge/toolbox/DualListBox.java b/forge-gui-mobile/src/forge/toolbox/DualListBox.java index e616eb53d7f..a45bc18525f 100644 --- a/forge-gui-mobile/src/forge/toolbox/DualListBox.java +++ b/forge-gui-mobile/src/forge/toolbox/DualListBox.java @@ -269,15 +269,15 @@ public class DualListBox extends FDialog { } private abstract class ItemRenderer { - public abstract int getDefaultFontSize(); + public abstract FSkinFont getDefaultFont(); public abstract float getItemHeight(); public abstract boolean tap(T value, float x, float y, int count); public abstract void drawValue(Graphics g, T value, FSkinFont font, FSkinColor foreColor, boolean pressed, float x, float y, float w, float h); } private class DefaultItemRenderer extends ItemRenderer { @Override - public int getDefaultFontSize() { - return 12; + public FSkinFont getDefaultFont() { + return FSkinFont.get(12); } @Override @@ -300,8 +300,8 @@ public class DualListBox extends FDialog { private final TextRenderer textRenderer = new TextRenderer(true); @Override - public int getDefaultFontSize() { - return 12; + public FSkinFont getDefaultFont() { + return FSkinFont.get(12); } @Override @@ -332,8 +332,8 @@ public class DualListBox extends FDialog { //special renderer for cards private class CardItemRenderer extends ItemRenderer { @Override - public int getDefaultFontSize() { - return 14; + public FSkinFont getDefaultFont() { + return FSkinFont.get(14); } @Override @@ -383,7 +383,7 @@ public class DualListBox extends FDialog { renderer.drawValue(g, value, font, foreColor, pressed, x, y, w, h); } }); - setFontSize(renderer.getDefaultFontSize()); + setFont(renderer.getDefaultFont()); } //remove any selected indices outside item range diff --git a/forge-gui-mobile/src/forge/toolbox/FDialog.java b/forge-gui-mobile/src/forge/toolbox/FDialog.java index fcfb330c036..7a76d49303e 100644 --- a/forge-gui-mobile/src/forge/toolbox/FDialog.java +++ b/forge-gui-mobile/src/forge/toolbox/FDialog.java @@ -4,6 +4,7 @@ import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment; import forge.Forge.Graphics; import forge.assets.FSkinColor; +import forge.assets.FSkinFont; import forge.assets.FSkinImage; import forge.assets.FSkinTexture; import forge.assets.FSkinColor.Colors; @@ -11,6 +12,7 @@ import forge.screens.FScreen; import forge.util.Utils; public abstract class FDialog extends FOverlay { + private static final FSkinFont TITLE_FONT = FSkinFont.get(12); private static final FSkinColor TITLE_BACK_COLOR = FSkinColor.get(Colors.CLR_THEME2); private static final FSkinColor BORDER_COLOR = FSkinColor.get(Colors.CLR_BORDERS); public static final float TITLE_HEIGHT = Math.round(Utils.AVG_FINGER_HEIGHT * 0.6f); @@ -95,7 +97,7 @@ public abstract class FDialog extends FOverlay { private class Titlebar extends FLabel { private Titlebar(String title) { - super(new FLabel.Builder().text(title).icon(FSkinImage.FAVICON).fontSize(12).align(HAlignment.LEFT)); + super(new FLabel.Builder().text(title).icon(FSkinImage.FAVICON).font(TITLE_FONT).align(HAlignment.LEFT)); } @Override diff --git a/forge-gui-mobile/src/forge/toolbox/FGroupList.java b/forge-gui-mobile/src/forge/toolbox/FGroupList.java index 8953e593333..77c6cd40cd2 100644 --- a/forge-gui-mobile/src/forge/toolbox/FGroupList.java +++ b/forge-gui-mobile/src/forge/toolbox/FGroupList.java @@ -137,11 +137,8 @@ public class FGroupList extends FScrollPane { public FSkinFont getFont() { return font; } - public int getFontSize() { - return font.getSize(); - } - public void setFontSize(int fontSize0) { - font = FSkinFont.get(fontSize0); + public void setFont(FSkinFont font0) { + font = font0; } @Override diff --git a/forge-gui-mobile/src/forge/toolbox/FLabel.java b/forge-gui-mobile/src/forge/toolbox/FLabel.java index b41e7163872..c172c82ee01 100644 --- a/forge-gui-mobile/src/forge/toolbox/FLabel.java +++ b/forge-gui-mobile/src/forge/toolbox/FLabel.java @@ -18,7 +18,7 @@ public class FLabel extends FDisplayObject implements IButton { public static class Builder { //========== Default values for FLabel are set here. private float bldIconScaleFactor = 0.8f; - private int bldFontSize = 14; + private FSkinFont bldFont = FSkinFont.get(14); private float bldAlphaComposite = 0.7f; private HAlignment bldAlignment = HAlignment.LEFT; private Vector2 bldInsets = new Vector2(Utils.scaleX(3), Utils.scaleY(3)); @@ -50,7 +50,7 @@ public class FLabel extends FDisplayObject implements IButton { public Builder selected(final boolean b0) { this.bldSelected = b0; return this; } public Builder selected() { selected(true); return this; } public Builder command(final FEventHandler c0) { this.bldCommand = c0; return this; } - public Builder fontSize(final int i0) { this.bldFontSize = i0; return this; } + public Builder font(final FSkinFont f0) { this.bldFont = f0; return this; } public Builder alphaComposite(final float a0) { this.bldAlphaComposite = a0; return this; } public Builder enabled(final boolean b0) { this.bldEnabled = b0; return this; } public Builder iconScaleAuto(final boolean b0) { this.bldIconScaleAuto = b0; return this; } @@ -93,7 +93,7 @@ public class FLabel extends FDisplayObject implements IButton { // Call this using FLabel.Builder()... protected FLabel(final Builder b0) { iconScaleFactor = b0.bldIconScaleFactor; - font = FSkinFont.get(b0.bldFontSize); + font = b0.bldFont; alphaComposite = b0.bldAlphaComposite; alignment = b0.bldAlignment; insets = b0.bldInsets; @@ -131,8 +131,8 @@ public class FLabel extends FDisplayObject implements IButton { textColor = textColor0; } - public void setFontSize(int fontSize0) { - font = FSkinFont.get(fontSize0); + public void setFont(FSkinFont font0) { + font = font0; } public FImage getIcon() { @@ -282,10 +282,10 @@ public class FLabel extends FDisplayObject implements IButton { x += dx; break; } - if (font.getSize() <= FSkinFont.MIN_FONT_SIZE) { + if (!font.canShrink()) { break; } - font = FSkinFont.get(font.getSize() - 1); + font = font.shrink(); } } y += (h - iconHeight) / 2; diff --git a/forge-gui-mobile/src/forge/toolbox/FList.java b/forge-gui-mobile/src/forge/toolbox/FList.java index bafc79095e1..41344efedce 100644 --- a/forge-gui-mobile/src/forge/toolbox/FList.java +++ b/forge-gui-mobile/src/forge/toolbox/FList.java @@ -108,11 +108,8 @@ public class FList extends FScrollPane implements Iterable { public FSkinFont getFont() { return font; } - public int getFontSize() { - return font.getSize(); - } - public void setFontSize(int fontSize0) { - font = FSkinFont.get(fontSize0); + public void setFont(FSkinFont font0) { + font = font0; } @Override diff --git a/forge-gui-mobile/src/forge/toolbox/FTextField.java b/forge-gui-mobile/src/forge/toolbox/FTextField.java index f92c7e22181..314a7b887fd 100644 --- a/forge-gui-mobile/src/forge/toolbox/FTextField.java +++ b/forge-gui-mobile/src/forge/toolbox/FTextField.java @@ -14,7 +14,7 @@ import forge.toolbox.FEvent.FEventType; import forge.util.Utils; public class FTextField extends FDisplayObject { - private static final int DEFAULT_FONT_SIZE = 14; + private static final FSkinFont DEFAULT_FONT = FSkinFont.get(14); private static final float BORDER_THICKNESS = Utils.scaleX(1); protected static final float PADDING = Utils.scaleX(5); protected static final FSkinColor FORE_COLOR = FSkinColor.get(Colors.CLR_TEXT); @@ -24,10 +24,7 @@ public class FTextField extends FDisplayObject { private FEventHandler changedHandler; public static float getDefaultHeight() { - return getDefaultHeight(DEFAULT_FONT_SIZE); - } - public static float getDefaultHeight(int fontSize) { - return getDefaultHeight(FSkinFont.get(fontSize)); + return getDefaultHeight(DEFAULT_FONT); } public static float getDefaultHeight(FSkinFont font0) { return font0.getCapHeight() * 3; @@ -45,7 +42,7 @@ public class FTextField extends FDisplayObject { public FTextField(String text0) { text = text0; ghostText = ""; - setFontSize(DEFAULT_FONT_SIZE); + setFont(DEFAULT_FONT); alignment = HAlignment.LEFT; } @@ -103,11 +100,11 @@ public class FTextField extends FDisplayObject { alignment = alignment0; } - public int getFontSize() { - return font.getSize(); + public FSkinFont getFont() { + return font; } - public void setFontSize(int fontSize0) { - font = FSkinFont.get(fontSize0); + public void setFont(FSkinFont font0) { + font = font0; setHeight(getDefaultHeight(font)); } diff --git a/forge-gui-mobile/src/forge/toolbox/ListChooser.java b/forge-gui-mobile/src/forge/toolbox/ListChooser.java index 28fc1d7fb38..73937a6e736 100644 --- a/forge-gui-mobile/src/forge/toolbox/ListChooser.java +++ b/forge-gui-mobile/src/forge/toolbox/ListChooser.java @@ -97,7 +97,7 @@ public class ListChooser extends FContainer { maxChoices = maxChoices0; if (list.size() > 25) { //only show search field if more than 25 items txtSearch = add(new FTextField()); - txtSearch.setFontSize(12); + txtSearch.setFont(FSkinFont.get(12)); txtSearch.setGhostText("Search"); txtSearch.setChangedHandler(new FEventHandler() { @Override @@ -216,15 +216,15 @@ public class ListChooser extends FContainer { } private abstract class ItemRenderer { - public abstract int getDefaultFontSize(); + public abstract FSkinFont getDefaultFont(); public abstract float getItemHeight(); public abstract boolean tap(T value, float x, float y, int count); public abstract void drawValue(Graphics g, T value, FSkinFont font, FSkinColor foreColor, boolean pressed, float x, float y, float w, float h); } private class DefaultItemRenderer extends ItemRenderer { @Override - public int getDefaultFontSize() { - return 12; + public FSkinFont getDefaultFont() { + return FSkinFont.get(12); } @Override @@ -245,8 +245,8 @@ public class ListChooser extends FContainer { //special renderer for cards private class PaperCardItemRenderer extends ItemRenderer { @Override - public int getDefaultFontSize() { - return 14; + public FSkinFont getDefaultFont() { + return FSkinFont.get(14); } @Override @@ -267,8 +267,8 @@ public class ListChooser extends FContainer { //special renderer for cards private class CardItemRenderer extends ItemRenderer { @Override - public int getDefaultFontSize() { - return 14; + public FSkinFont getDefaultFont() { + return FSkinFont.get(14); } @Override @@ -291,8 +291,8 @@ public class ListChooser extends FContainer { private final TextRenderer textRenderer = new TextRenderer(true); @Override - public int getDefaultFontSize() { - return 14; + public FSkinFont getDefaultFont() { + return FSkinFont.get(14); } @Override @@ -322,8 +322,8 @@ public class ListChooser extends FContainer { } private class PlayerItemRenderer extends ItemRenderer { @Override - public int getDefaultFontSize() { - return 18; + public FSkinFont getDefaultFont() { + return FSkinFont.get(18); } @Override @@ -407,7 +407,7 @@ public class ListChooser extends FContainer { renderer.drawValue(g, value, font, foreColor, pressed, x, y, w, h); } }); - setFontSize(renderer.getDefaultFontSize()); + setFont(renderer.getDefaultFont()); } @Override