From 55032f94e792f37def52eda34a9c0361d5d35044 Mon Sep 17 00:00:00 2001 From: woodser <13068859+woodser@users.noreply.github.com> Date: Sat, 5 Jul 2025 11:58:08 -0400 Subject: [PATCH] use logo for fiat currencies --- .../src/main/java/haveno/desktop/images.css | 4 +++ .../main/java/haveno/desktop/theme-dark.css | 4 +++ .../java/haveno/desktop/util/GUIUtil.java | 31 +++++++++++------- .../resources/images/fiat_logo_dark_mode.png | Bin 0 -> 12822 bytes .../resources/images/fiat_logo_light_mode.png | Bin 0 -> 13458 bytes 5 files changed, 28 insertions(+), 11 deletions(-) create mode 100644 desktop/src/main/resources/images/fiat_logo_dark_mode.png create mode 100644 desktop/src/main/resources/images/fiat_logo_light_mode.png diff --git a/desktop/src/main/java/haveno/desktop/images.css b/desktop/src/main/java/haveno/desktop/images.css index 1e36427ee9..c721f2ee7b 100644 --- a/desktop/src/main/java/haveno/desktop/images.css +++ b/desktop/src/main/java/haveno/desktop/images.css @@ -313,6 +313,10 @@ -fx-image: url("../../images/settings.png"); } +#image-fiat-logo { + -fx-image: url("../../images/fiat_logo_light_mode.png"); +} + #image-btc-logo { -fx-image: url("../../images/btc_logo.png"); } diff --git a/desktop/src/main/java/haveno/desktop/theme-dark.css b/desktop/src/main/java/haveno/desktop/theme-dark.css index 5316735b69..11fc14cdbf 100644 --- a/desktop/src/main/java/haveno/desktop/theme-dark.css +++ b/desktop/src/main/java/haveno/desktop/theme-dark.css @@ -643,3 +643,7 @@ .regular-text-color { -fx-text-fill: -bs-text-color; } + +#image-fiat-logo { + -fx-image: url("../../images/fiat_logo_dark_mode.png"); +} diff --git a/desktop/src/main/java/haveno/desktop/util/GUIUtil.java b/desktop/src/main/java/haveno/desktop/util/GUIUtil.java index 2710c00f6a..514b90d134 100644 --- a/desktop/src/main/java/haveno/desktop/util/GUIUtil.java +++ b/desktop/src/main/java/haveno/desktop/util/GUIUtil.java @@ -349,10 +349,11 @@ public class GUIUtil { break; default: - // use icons for crypto - if (CurrencyUtil.isCryptoCurrency(code)) { + // use icon if available + ImageView currencyIcon = getCurrencyIcon(code); + if (currencyIcon != null) { label1.setText(""); - StackPane iconWrapper = new StackPane(getCurrencyIcon(code)); // TODO: icon must be wrapped in StackPane for reliable rendering on linux + StackPane iconWrapper = new StackPane(currencyIcon); // TODO: icon must be wrapped in StackPane for reliable rendering on linux label1.setGraphic(iconWrapper); } @@ -459,10 +460,12 @@ public class GUIUtil { break; default: - // use icons for crypto - if (CurrencyUtil.isCryptoCurrency(item.getCode())) { + // use icon if available + ImageView currencyIcon = getCurrencyIcon(code); + if (currencyIcon != null) { label1.setText(""); - label1.setGraphic(getCurrencyIcon(item.getCode())); + StackPane iconWrapper = new StackPane(currencyIcon); // TODO: icon must be wrapped in StackPane for reliable rendering on linux + label1.setGraphic(iconWrapper); } boolean isCrypto = CurrencyUtil.isCryptoCurrency(code); @@ -502,10 +505,12 @@ public class GUIUtil { Label label2 = new AutoTooltipLabel(item.getNameAndCode()); label2.getStyleClass().add("currency-label"); - // use icons for crypto - if (CurrencyUtil.isCryptoCurrency(item.getCode())) { + // use icon if available + ImageView currencyIcon = getCurrencyIcon(item.getCode()); + if (currencyIcon != null) { label1.setText(""); - label1.setGraphic(getCurrencyIcon(item.getCode())); + StackPane iconWrapper = new StackPane(currencyIcon); // TODO: icon must be wrapped in StackPane for reliable rendering on linux + label1.setGraphic(iconWrapper); } box.getChildren().addAll(label1, label2); @@ -1284,12 +1289,14 @@ public class GUIUtil { public static ImageView getCurrencyIcon(String currencyCode, double size) { if (currencyCode == null) return null; + String imageId = getImageId(currencyCode); + if (imageId == null) return null; ImageView iconView = new ImageView(); iconView.setFitWidth(size); iconView.setPreserveRatio(true); iconView.setSmooth(true); iconView.setCache(true); - iconView.setId(getImageId(currencyCode)); + iconView.setId(imageId); return iconView; } @@ -1327,7 +1334,9 @@ public class GUIUtil { private static String getImageId(String currencyCode) { if (currencyCode == null) return null; - return "image-" + currencyCode.toLowerCase() + "-logo"; + if (CurrencyUtil.isCryptoCurrency(currencyCode)) return "image-" + currencyCode.toLowerCase() + "-logo"; + if (CurrencyUtil.isFiatCurrency(currencyCode)) return "image-fiat-logo"; + return null; } public static void adjustHeightAutomatically(TextArea textArea) { diff --git a/desktop/src/main/resources/images/fiat_logo_dark_mode.png b/desktop/src/main/resources/images/fiat_logo_dark_mode.png new file mode 100644 index 0000000000000000000000000000000000000000..b6fbaf02f325388180992903456ebd28e0796d78 GIT binary patch literal 12822 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%0D*0>ij+y2QI3Nm|*p24oyl+ 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 G{Qm&Igi@3M literal 0 HcmV?d00001 diff --git a/desktop/src/main/resources/images/fiat_logo_light_mode.png b/desktop/src/main/resources/images/fiat_logo_light_mode.png new file mode 100644 index 0000000000000000000000000000000000000000..a40b3e632d736c96de2735a23bb30c380e9cb3b9 GIT binary patch literal 13458 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 vh