From 72e734fabaecf812d2515eb7b66bd1862bd7bb69 Mon Sep 17 00:00:00 2001 From: Lyu Zong-Hong Date: Thu, 29 Jul 2021 21:47:09 +0900 Subject: [PATCH] Add preferences for card text rendering --- .../home/settings/CSubmenuPreferences.java | 2 ++ .../home/settings/VSubmenuPreferences.java | 16 ++++++++++++++++ .../toolbox/imaging/FCardImageRenderer.java | 15 ++++++++++++--- forge-gui/res/languages/de-DE.properties | 4 ++++ forge-gui/res/languages/en-US.properties | 4 ++++ forge-gui/res/languages/es-ES.properties | 4 ++++ forge-gui/res/languages/it-IT.properties | 4 ++++ forge-gui/res/languages/ja-JP.properties | 4 ++++ forge-gui/res/languages/zh-CN.properties | 4 ++++ .../properties/ForgePreferences.java | 2 ++ 10 files changed, 56 insertions(+), 3 deletions(-) diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/settings/CSubmenuPreferences.java b/forge-gui-desktop/src/main/java/forge/screens/home/settings/CSubmenuPreferences.java index 92f5500ffa5..de3c4d593da 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/settings/CSubmenuPreferences.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/settings/CSubmenuPreferences.java @@ -155,6 +155,8 @@ public enum CSubmenuPreferences implements ICDoc { lstControls.add(Pair.of(view.getCbCompactPrompt(), FPref.UI_COMPACT_PROMPT)); lstControls.add(Pair.of(view.getCbHideReminderText(), FPref.UI_HIDE_REMINDER_TEXT)); + lstControls.add(Pair.of(view.getCbCardTextUseSansSerif(), FPref.UI_CARD_IMAGE_RENDER_USE_SANS_SERIF_FONT)); + lstControls.add(Pair.of(view.getCbCardTextHideReminder(), FPref.UI_CARD_IMAGE_RENDER_HIDE_REMINDER_TEXT)); lstControls.add(Pair.of(view.getCbOpenPacksIndiv(), FPref.UI_OPEN_PACKS_INDIV)); lstControls.add(Pair.of(view.getCbTokensInSeparateRow(), FPref.UI_TOKENS_IN_SEPARATE_ROW)); lstControls.add(Pair.of(view.getCbStackCreatures(), FPref.UI_STACK_CREATURES)); diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/settings/VSubmenuPreferences.java b/forge-gui-desktop/src/main/java/forge/screens/home/settings/VSubmenuPreferences.java index 0b3212867ed..63a999f5ca1 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/settings/VSubmenuPreferences.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/settings/VSubmenuPreferences.java @@ -115,6 +115,8 @@ public enum VSubmenuPreferences implements IVSubmenu { private final JCheckBox cbEscapeEndsTurn = new OptionsCheckBox(localizer.getMessage("cbEscapeEndsTurn")); private final JCheckBox cbPreselectPrevAbOrder = new OptionsCheckBox(localizer.getMessage("cbPreselectPrevAbOrder")); private final JCheckBox cbHideReminderText = new OptionsCheckBox(localizer.getMessage("cbHideReminderText")); + private final JCheckBox cbCardTextUseSansSerif = new OptionsCheckBox(localizer.getMessage("lblCardTextUseSansSerif")); + private final JCheckBox cbCardTextHideReminder = new OptionsCheckBox(localizer.getMessage("lblCardTextHideReminder")); private final JCheckBox cbOpenPacksIndiv = new OptionsCheckBox(localizer.getMessage("cbOpenPacksIndiv")); private final JCheckBox cbTokensInSeparateRow = new OptionsCheckBox(localizer.getMessage("cbTokensInSeparateRow")); private final JCheckBox cbStackCreatures = new OptionsCheckBox(localizer.getMessage("cbStackCreatures")); @@ -368,6 +370,12 @@ public enum VSubmenuPreferences implements IVSubmenu { pnlPrefs.add(cbHideReminderText, titleConstraints); pnlPrefs.add(new NoteLabel(localizer.getMessage("nlHideReminderText")), descriptionConstraints); + pnlPrefs.add(cbCardTextUseSansSerif, titleConstraints); + pnlPrefs.add(new NoteLabel(localizer.getMessage("nlCardTextUseSansSerif")), descriptionConstraints); + + pnlPrefs.add(cbCardTextHideReminder, titleConstraints); + pnlPrefs.add(new NoteLabel(localizer.getMessage("nlCardTextHideReminder")), descriptionConstraints); + pnlPrefs.add(cbOpenPacksIndiv, titleConstraints); pnlPrefs.add(new NoteLabel(localizer.getMessage("nlOpenPacksIndiv")), descriptionConstraints); @@ -847,6 +855,14 @@ public enum VSubmenuPreferences implements IVSubmenu { return cbHideReminderText; } + public JCheckBox getCbCardTextUseSansSerif() { + return cbCardTextUseSansSerif; + } + + public final JCheckBox getCbCardTextHideReminder() { + return cbCardTextHideReminder; + } + public final JCheckBox getCbOpenPacksIndiv() { return cbOpenPacksIndiv; } diff --git a/forge-gui-desktop/src/main/java/forge/toolbox/imaging/FCardImageRenderer.java b/forge-gui-desktop/src/main/java/forge/toolbox/imaging/FCardImageRenderer.java index 6f0ff9a0dde..e39742bc2cb 100644 --- a/forge-gui-desktop/src/main/java/forge/toolbox/imaging/FCardImageRenderer.java +++ b/forge-gui-desktop/src/main/java/forge/toolbox/imaging/FCardImageRenderer.java @@ -52,6 +52,7 @@ public class FCardImageRenderer { private static BreakIterator boundary; private static Pattern linebreakPattern; private static Pattern reminderPattern; + private static Pattern reminderHidePattern; private static Pattern symbolPattern; private static Map shrinkFonts; @@ -60,6 +61,7 @@ public class FCardImageRenderer { boundary = BreakIterator.getLineInstance(locale); linebreakPattern = Pattern.compile("(\r\n\r\n)|(\n)"); reminderPattern = Pattern.compile("\\((.+?)\\)"); + reminderHidePattern = Pattern.compile(" \\((.+?)\\)"); symbolPattern = Pattern.compile("\\{([A-Z0-9]+)\\}|\\{([A-Z0-9]+)/([A-Z0-9]+)\\}"); NAME_FONT = new Font(Font.SERIF, Font.BOLD, 26); @@ -68,8 +70,13 @@ public class FCardImageRenderer { TEXT_FONT = new Font(Font.SANS_SERIF, Font.PLAIN, 24); REMINDER_FONT = new Font(Font.SANS_SERIF, Font.PLAIN, 22); } else { - TEXT_FONT = new Font(Font.SERIF, Font.PLAIN, 24); - REMINDER_FONT = new Font(Font.SERIF, Font.ITALIC, 24); + if (FModel.getPreferences().getPrefBoolean(FPref.UI_CARD_IMAGE_RENDER_USE_SANS_SERIF_FONT)) { + TEXT_FONT = new Font(Font.SANS_SERIF, Font.PLAIN, 24); + REMINDER_FONT = new Font(Font.SANS_SERIF, Font.ITALIC, 24); + } else { + TEXT_FONT = new Font(Font.SERIF, Font.PLAIN, 24); + REMINDER_FONT = new Font(Font.SERIF, Font.ITALIC, 24); + } } PT_FONT = NAME_FONT; @@ -966,10 +973,12 @@ public class FCardImageRenderer { } } - private static void drawTextBoxText(Graphics2D g, final String text, int x, int y, int w, int h, int flagPTBox) { + private static void drawTextBoxText(Graphics2D g, String text, int x, int y, int w, int h, int flagPTBox) { boolean hasPTBox = (flagPTBox & 1) == 1; boolean isLevelup = (flagPTBox & 2) == 2; boolean isLevelBox = (flagPTBox & 4) == 4; + if (FModel.getPreferences().getPrefBoolean(FPref.UI_CARD_IMAGE_RENDER_HIDE_REMINDER_TEXT)) + text = reminderHidePattern.matcher(text).replaceAll(""); String [] paragraphs = isLevelBox ? text.split(" ") : linebreakPattern.split(text); List pgList = new ArrayList<>(); for (String pg : paragraphs) { diff --git a/forge-gui/res/languages/de-DE.properties b/forge-gui/res/languages/de-DE.properties index bf6410201e3..55050c5f27c 100644 --- a/forge-gui/res/languages/de-DE.properties +++ b/forge-gui/res/languages/de-DE.properties @@ -1039,6 +1039,10 @@ lblEnableCustomCards=Erlaube benutzerdefinierte Karten nlEnableCustomCards=Aktivieren Sie die Verwendung von benutzerdefinierten Karten für das Spielen. (Erfordert Neustart) lblDisableCardImages=Kartenbilder abschalten nlDisableCardImages=Wenn aktiviert, zeigt Forge keine Kartenbilder mehr. +lblCardTextUseSansSerif=Use Sans-serif Font for Card Text Renderer +nlCardTextUseSansSerif=Render card images by using Sans-serif font for card text. (Requires restart) +lblCardTextHideReminder=Hide Reminder Text for Card Text Renderer +nlCardTextHideReminder=When render card images, skip rendering reminder text. lblExperimentalNetworkCompatibility=Experimentelle Netzwerkkompatibilität nlExperimentalNetworkCompatibility=Forge wechselt auf kompatiblen Netzwerk-Stream. (Im Zweifel bitte ausschalten) lblDisposeTextures=Texturen anordnen diff --git a/forge-gui/res/languages/en-US.properties b/forge-gui/res/languages/en-US.properties index a7a9ed67137..1c5d1e961d1 100644 --- a/forge-gui/res/languages/en-US.properties +++ b/forge-gui/res/languages/en-US.properties @@ -1039,6 +1039,10 @@ lblEnableCustomCards=Enable Custom Cards nlEnableCustomCards=Enable Custom Cards to be used in decks for Game play. (Requires restart) lblDisableCardImages=Disable Card Images nlDisableCardImages=When enabled, Forge will not display card images. +lblCardTextUseSansSerif=Use Sans-serif Font for Card Text Renderer +nlCardTextUseSansSerif=Render card images by using Sans-serif font for card text. (Requires restart) +lblCardTextHideReminder=Hide Reminder Text for Card Text Renderer +nlCardTextHideReminder=When render card images, skip rendering reminder text. lblExperimentalNetworkCompatibility=Experimental Network Compatibility nlExperimentalNetworkCompatibility=Forge switches to compatible network stream. (If unsure, turn OFF this option) lblDisposeTextures=Dispose Textures diff --git a/forge-gui/res/languages/es-ES.properties b/forge-gui/res/languages/es-ES.properties index 81bef6f8f13..cc99b68f449 100644 --- a/forge-gui/res/languages/es-ES.properties +++ b/forge-gui/res/languages/es-ES.properties @@ -1038,6 +1038,10 @@ lblEnableCustomCards=Habilitar cartas personalizadas nlEnableCustomCards=Habilita el uso de cartas personalizadas en mazos para jugar. (Requiere reinicio) lblDisableCardImages=Desactivar imágenes de cartas nlDisableCardImages=Cuando está habilitado, Forge no mostrará imágenes de tarjetas. +lblCardTextUseSansSerif=Use Sans-serif Font for Card Text Renderer +nlCardTextUseSansSerif=Render card images by using Sans-serif font for card text. (Requires restart) +lblCardTextHideReminder=Hide Reminder Text for Card Text Renderer +nlCardTextHideReminder=When render card images, skip rendering reminder text. lblExperimentalNetworkCompatibility=Compatibilidad de red experimental nlExperimentalNetworkCompatibility=Forge cambia a un flujo de red compatible. (Si no estás seguro, deshabilita esta opción) lblDisposeTextures=Desechar texturas diff --git a/forge-gui/res/languages/it-IT.properties b/forge-gui/res/languages/it-IT.properties index 7bc9d4bf260..00cfe9d762f 100644 --- a/forge-gui/res/languages/it-IT.properties +++ b/forge-gui/res/languages/it-IT.properties @@ -1038,6 +1038,10 @@ lblEnableCustomCards=Abilita carte personalizzate nlEnableCustomCards=Abilita le partite con mazzi che contengono carte personalizzate. (richiede riavvio) lblDisableCardImages=Disabilita le immagini delle carte nlDisableCardImages=Se abilitato, Forge non mostrerà alcuna immagine per le carte. +lblCardTextUseSansSerif=Use Sans-serif Font for Card Text Renderer +nlCardTextUseSansSerif=Render card images by using Sans-serif font for card text. (Requires restart) +lblCardTextHideReminder=Hide Reminder Text for Card Text Renderer +nlCardTextHideReminder=When render card images, skip rendering reminder text. lblExperimentalNetworkCompatibility=Compatibilità di rete sperimentale nlExperimentalNetworkCompatibility=Forge passa a un flusso di rete compatibile. (Nel dubbio, DISABILITARE questa opzione) lblDisposeTextures=Rimuovi Texture diff --git a/forge-gui/res/languages/ja-JP.properties b/forge-gui/res/languages/ja-JP.properties index ba08142c8e2..9a0332095b7 100644 --- a/forge-gui/res/languages/ja-JP.properties +++ b/forge-gui/res/languages/ja-JP.properties @@ -1039,6 +1039,10 @@ lblEnableCustomCards=カスタムカードを有効にする nlEnableCustomCards=カスタムカードをゲームプレイのデッキで使用できるようにします。(再起動必須) lblDisableCardImages=カード画像を無効にする nlDisableCardImages=これを有効にすると、Forgeはカード画像を描画しません。 +lblCardTextUseSansSerif=カードの文章欄にゴシック体を使います +nlCardTextUseSansSerif=カードを描画する時、文章欄の文字はゴシック体で描画します。(非アジア言語だけに影響します、再起動必須) +lblCardTextHideReminder=カードの文章欄のリマインダーテキストを非表示 +nlCardTextHideReminder=カードを描画する時、文章欄のリマインダーテキストを非表示にします。 lblExperimentalNetworkCompatibility=実験的なネットワークコンパチビリティ nlExperimentalNetworkCompatibility=Forge がコンパチブルネットワークストリーミに切り替えます。 (分からない場合はオフにしてください) lblDisposeTextures=テキスチャー廃棄 diff --git a/forge-gui/res/languages/zh-CN.properties b/forge-gui/res/languages/zh-CN.properties index b47ca8dad67..486d338d1f0 100644 --- a/forge-gui/res/languages/zh-CN.properties +++ b/forge-gui/res/languages/zh-CN.properties @@ -1039,6 +1039,10 @@ lblEnableCustomCards=启用自定义卡 nlEnableCustomCards=启用自定义卡以用于游戏的甲板。 (需要重启) lblDisableCardImages=禁用卡图 nlDisableCardImages=如果启用,forge将不会显示卡图。 +lblCardTextUseSansSerif=Use Sans-serif Font for Card Text Renderer +nlCardTextUseSansSerif=Render card images by using Sans-serif font for card text. (Requires restart, only has effects on non-Asian languages) +lblCardTextHideReminder=Hide Reminder Text for Card Text Renderer +nlCardTextHideReminder=When render card images, skip rendering reminder text. lblExperimentalNetworkCompatibility=实验性网络兼容 nlExperimentalNetworkCompatibility=Forge将切换为兼容性的网络流。(如果不清楚此选项的作用,请关闭此选项) lblDisposeTextures=释放纹理 diff --git a/forge-gui/src/main/java/forge/localinstance/properties/ForgePreferences.java b/forge-gui/src/main/java/forge/localinstance/properties/ForgePreferences.java index 66275c7c800..5b0c426c52e 100644 --- a/forge-gui/src/main/java/forge/localinstance/properties/ForgePreferences.java +++ b/forge-gui/src/main/java/forge/localinstance/properties/ForgePreferences.java @@ -86,6 +86,8 @@ public class ForgePreferences extends PreferencesStore { UI_IMAGE_CACHE_MAXIMUM("400"), UI_OVERLAY_FOIL_EFFECT ("true"), UI_HIDE_REMINDER_TEXT ("false"), + UI_CARD_IMAGE_RENDER_USE_SANS_SERIF_FONT ("true"), + UI_CARD_IMAGE_RENDER_HIDE_REMINDER_TEXT ("true"), UI_SR_OPTIMIZE ("false"), UI_OPEN_PACKS_INDIV ("false"), UI_STACK_CREATURES ("false"),