From 5fcab14e4e38d421b15597f0dc331d4552884985 Mon Sep 17 00:00:00 2001 From: DanS Date: Thu, 15 Oct 2026 09:58:17 -0500 Subject: [PATCH] feat(settings): adjustable opacity for the favorite gold outline + star Adds a "Favorite Highlight Opacity" slider (15-100%, default 100%) to Settings > Appearance > Scale & Effects. It scales the alpha of the four favorite gold tokens (fill/border/icon/outline) at their resolve site in the Balance address list via material::ScaleAlpha, so the gold row outline and the star button fade together. The multiplier is skin-agnostic (it scales whatever alpha the theme resolved) and touches only favorited rows; non-favorite rows and the white selection highlight are unchanged, and the 100% default is byte-identical to the previous look. The preference lives in Settings (favorite_opacity, clamped 0.15-1.0 in both the setter and on load), persists across restarts, updates live, and is not low-spec gated (it's a pure color-alpha preference, independent of the transparency sliders). New i18n keys favorite_opacity / tt_favorite_opacity are translated into all eight locales; the CJK subset font is rebuilt to add the two new glyphs the zh string needs. Verified: full + lite builds clean, full + lite test suites pass, hygiene OK. Co-Authored-By: Claude Opus 4.8 --- res/fonts/NotoSansCJK-Subset.ttf | Bin 768680 -> 769504 bytes res/lang/de.json | 2 ++ res/lang/es.json | 2 ++ res/lang/fr.json | 2 ++ res/lang/ja.json | 2 ++ res/lang/ko.json | 2 ++ res/lang/pt.json | 2 ++ res/lang/ru.json | 2 ++ res/lang/zh.json | 2 ++ src/config/settings.cpp | 3 +++ src/config/settings.h | 6 ++++++ src/ui/pages/settings_page.cpp | 27 ++++++++++++++++++++++++++ src/ui/windows/balance_components.cpp | 11 +++++++---- src/util/i18n.cpp | 2 ++ 14 files changed, 61 insertions(+), 4 deletions(-) diff --git a/res/fonts/NotoSansCJK-Subset.ttf b/res/fonts/NotoSansCJK-Subset.ttf index e5c963b34a690b26a4427db1bd79ee71ce958589..e13e2f946a5fc5b72084c4b15321d94b5e31427d 100644 GIT binary patch delta 27544 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

MVk-E^WK8ugh21 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 DdeH)S delta 26904 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 diff --git a/res/lang/de.json b/res/lang/de.json index ae9a24d..0e39c97 100644 --- a/res/lang/de.json +++ b/res/lang/de.json @@ -863,6 +863,7 @@ "faq_w_set_4_q": "Wie zeige ich Fiat-Preise an?", "faq_w_set_title": "Einstellungen & Erscheinungsbild", "favorite_address": "Als Favorit markieren", + "favorite_opacity": "Deckkraft der Favoriten-Hervorhebung", "fee": "Gebühr", "fee_high": "Hoch", "fee_label": "Gebühr:", @@ -2069,6 +2070,7 @@ "tt_export_all": "Alle privaten Schlüssel in eine Datei exportieren", "tt_export_csv": "Transaktionsverlauf als CSV-Tabelle exportieren", "tt_export_key": "Den privaten Schlüssel der ausgewählten Adresse exportieren", + "tt_favorite_opacity": "Deckkraft des Favoriten-Sterns und seiner goldenen Umrandung in der Adressliste (mindestens 15 %)", "tt_fetch_prices": "DRGX-Marktpreise von der CoinGecko-API abrufen", "tt_font_scale": "Alle Texte und UI skalieren (1.0x = Standard, bis 1.5x).", "tt_idle_delay": "Wie lange vor dem Start des Minings gewartet werden soll", diff --git a/res/lang/es.json b/res/lang/es.json index d87ed03..703576f 100644 --- a/res/lang/es.json +++ b/res/lang/es.json @@ -863,6 +863,7 @@ "faq_w_set_4_q": "¿Cómo muestro precios en moneda fiat?", "faq_w_set_title": "Ajustes y apariencia", "favorite_address": "Marcar como favorito", + "favorite_opacity": "Opacidad del resaltado de favoritos", "fee": "Comisión", "fee_high": "Alta", "fee_label": "Comisión:", @@ -2069,6 +2070,7 @@ "tt_export_all": "Exportar todas las claves privadas a un archivo", "tt_export_csv": "Exportar historial de transacciones como hoja de cálculo CSV", "tt_export_key": "Exportar la clave privada de la dirección seleccionada", + "tt_favorite_opacity": "Opacidad del botón de estrella de favoritos y su contorno dorado en la lista de direcciones (mínimo 15 %)", "tt_fetch_prices": "Obtener precios de mercado de DRGX desde la API de CoinGecko", "tt_font_scale": "Escalar todo el texto y la interfaz (1.0x = predeterminado, hasta 1.5x).", "tt_idle_delay": "Cuánto tiempo esperar antes de empezar a minar", diff --git a/res/lang/fr.json b/res/lang/fr.json index b038317..529a3eb 100644 --- a/res/lang/fr.json +++ b/res/lang/fr.json @@ -863,6 +863,7 @@ "faq_w_set_4_q": "Comment afficher les prix en monnaie fiduciaire ?", "faq_w_set_title": "Paramètres et apparence", "favorite_address": "Ajouter aux favoris", + "favorite_opacity": "Opacité de la surbrillance des favoris", "fee": "Frais", "fee_high": "Élevés", "fee_label": "Frais :", @@ -2069,6 +2070,7 @@ "tt_export_all": "Exporter toutes les clés privées dans un fichier", "tt_export_csv": "Exporter l'historique des transactions en feuille de calcul CSV", "tt_export_key": "Exporter la clé privée de l'adresse sélectionnée", + "tt_favorite_opacity": "Opacité du bouton étoile des favoris et de son contour doré dans la liste d'adresses (minimum 15 %)", "tt_fetch_prices": "Récupérer les prix du marché DRGX depuis l'API CoinGecko", "tt_font_scale": "Mettre à l'échelle tout le texte et l'interface (1.0x = par défaut, jusqu'à 1.5x).", "tt_idle_delay": "Combien de temps attendre avant de commencer le minage", diff --git a/res/lang/ja.json b/res/lang/ja.json index 60c5a6e..64cbd26 100644 --- a/res/lang/ja.json +++ b/res/lang/ja.json @@ -863,6 +863,7 @@ "faq_w_set_4_q": "法定通貨での価格を表示するには?", "faq_w_set_title": "設定と外観", "favorite_address": "お気に入りに追加", + "favorite_opacity": "お気に入りハイライトの不透明度", "fee": "手数料", "fee_high": "高い", "fee_label": "手数料:", @@ -2069,6 +2070,7 @@ "tt_export_all": "すべての秘密鍵をファイルにエクスポート", "tt_export_csv": "トランザクション履歴を CSV スプレッドシートとしてエクスポート", "tt_export_key": "選択したアドレスの秘密鍵をエクスポート", + "tt_favorite_opacity": "アドレス一覧のお気に入りスターボタンとその金色の枠線の不透明度(最小15%)", "tt_fetch_prices": "CoinGecko API から DRGX の市場価格を取得", "tt_font_scale": "すべてのテキストと UI をスケーリング(1.0x = デフォルト、最大 1.5x)。", "tt_idle_delay": "マイニング開始前の待機時間", diff --git a/res/lang/ko.json b/res/lang/ko.json index 5cbc6f8..53a92d5 100644 --- a/res/lang/ko.json +++ b/res/lang/ko.json @@ -863,6 +863,7 @@ "faq_w_set_4_q": "법정화폐 가격을 어떻게 표시하나요?", "faq_w_set_title": "설정 및 화면", "favorite_address": "즐겨찾기에 추가", + "favorite_opacity": "즐겨찾기 강조 불투명도", "fee": "수수료", "fee_high": "높음", "fee_label": "수수료:", @@ -2069,6 +2070,7 @@ "tt_export_all": "모든 개인키를 파일로 내보내기", "tt_export_csv": "거래 내역을 CSV 스프레드시트로 내보내기", "tt_export_key": "선택한 주소의 개인키 내보내기", + "tt_favorite_opacity": "주소 목록에서 즐겨찾기 별 버튼과 금색 테두리의 불투명도(최소 15%)", "tt_fetch_prices": "CoinGecko API에서 DRGX 시장 가격 가져오기", "tt_font_scale": "모든 텍스트 및 UI 크기 조정 (1.0x = 기본, 최대 1.5x).", "tt_idle_delay": "채굴 시작 전 대기 시간", diff --git a/res/lang/pt.json b/res/lang/pt.json index 6521540..10fcead 100644 --- a/res/lang/pt.json +++ b/res/lang/pt.json @@ -863,6 +863,7 @@ "faq_w_set_4_q": "Como exibo preços em moeda fiduciária?", "faq_w_set_title": "Configurações e aparência", "favorite_address": "Adicionar aos favoritos", + "favorite_opacity": "Opacidade do destaque de favoritos", "fee": "Taxa", "fee_high": "Alta", "fee_label": "Taxa:", @@ -2069,6 +2070,7 @@ "tt_export_all": "Exportar todas as chaves privadas para um arquivo", "tt_export_csv": "Exportar histórico de transações como planilha CSV", "tt_export_key": "Exportar a chave privada do endereço selecionado", + "tt_favorite_opacity": "Opacidade do botão de estrela de favoritos e do seu contorno dourado na lista de endereços (mínimo 15%)", "tt_fetch_prices": "Obter preços de mercado DRGX da API CoinGecko", "tt_font_scale": "Escalar todo o texto e interface (1.0x = padrão, até 1.5x).", "tt_idle_delay": "Quanto tempo esperar antes de iniciar a mineração", diff --git a/res/lang/ru.json b/res/lang/ru.json index b0cdff1..074e0bc 100644 --- a/res/lang/ru.json +++ b/res/lang/ru.json @@ -863,6 +863,7 @@ "faq_w_set_4_q": "Как показать цены в фиатной валюте?", "faq_w_set_title": "Настройки и внешний вид", "favorite_address": "Добавить в избранное", + "favorite_opacity": "Непрозрачность выделения избранного", "fee": "Комиссия", "fee_high": "Высокая", "fee_label": "Комиссия:", @@ -2069,6 +2070,7 @@ "tt_export_all": "Экспортировать все приватные ключи в файл", "tt_export_csv": "Экспортировать историю транзакций в виде таблицы CSV", "tt_export_key": "Экспортировать приватный ключ выбранного адреса", + "tt_favorite_opacity": "Непрозрачность кнопки-звёздочки избранного и её золотой обводки в списке адресов (минимум 15 %)", "tt_fetch_prices": "Получить рыночные цены DRGX из API CoinGecko", "tt_font_scale": "Масштабировать весь текст и интерфейс (1.0x = по умолчанию, до 1.5x).", "tt_idle_delay": "Сколько ждать перед началом майнинга", diff --git a/res/lang/zh.json b/res/lang/zh.json index 95fa398..c0f62e3 100644 --- a/res/lang/zh.json +++ b/res/lang/zh.json @@ -863,6 +863,7 @@ "faq_w_set_4_q": "如何显示法币价格?", "faq_w_set_title": "设置与外观", "favorite_address": "收藏地址", + "favorite_opacity": "收藏高亮不透明度", "fee": "手续费", "fee_high": "高", "fee_label": "手续费:", @@ -2069,6 +2070,7 @@ "tt_export_all": "将所有私钥导出到文件", "tt_export_csv": "将交易历史导出为 CSV 电子表格", "tt_export_key": "导出所选地址的私钥", + "tt_favorite_opacity": "地址列表中收藏星形按钮及其金色轮廓的不透明度(最低 15%)", "tt_fetch_prices": "从 CoinGecko API 获取 DRGX 市场价格", "tt_font_scale": "缩放所有文本和界面(1.0x = 默认,最大 1.5x)。", "tt_idle_delay": "开始挖矿前等待多长时间", diff --git a/src/config/settings.cpp b/src/config/settings.cpp index aa056f8..13f108b 100644 --- a/src/config/settings.cpp +++ b/src/config/settings.cpp @@ -204,6 +204,8 @@ bool Settings::load(const std::string& path) ui_opacity_ = 1.0f; // legacy: reduced = fully opaque } loadScalar(j, "window_opacity", window_opacity_); + loadScalar(j, "favorite_opacity", favorite_opacity_); + favorite_opacity_ = std::clamp(favorite_opacity_, 0.15f, 1.0f); // matches setFavoriteOpacity() if (j.contains("balance_layout")) { if (j["balance_layout"].is_string()) balance_layout_ = j["balance_layout"].get(); @@ -542,6 +544,7 @@ bool Settings::save(const std::string& path) j["gradient_background"] = gradient_background_; j["ui_opacity"] = ui_opacity_; j["window_opacity"] = window_opacity_; + j["favorite_opacity"] = favorite_opacity_; j["balance_layout"] = balance_layout_; // saved as string ID j["portfolio_style"] = portfolio_style_; j["contacts_view_mode"] = contacts_view_mode_; diff --git a/src/config/settings.h b/src/config/settings.h index 7de1d1c..f078bd2 100644 --- a/src/config/settings.h +++ b/src/config/settings.h @@ -261,6 +261,11 @@ public: float getNoiseOpacity() const { return noise_opacity_; } void setNoiseOpacity(float v) { noise_opacity_ = v; } + // Opacity multiplier for the favorite gold visuals (row outline + star button) in the + // Balance address list. 1.0 = theme default (unchanged); floor 0.15 so it can't vanish. + float getFavoriteOpacity() const { return favorite_opacity_; } + void setFavoriteOpacity(float v) { favorite_opacity_ = std::max(0.15f, std::min(1.0f, v)); } + // Gradient background mode (use gradient variant of theme background) bool getGradientBackground() const { return gradient_background_; } void setGradientBackground(bool v) { gradient_background_ = v; } @@ -685,6 +690,7 @@ private: int acrylic_quality_ = 2; float blur_multiplier_ = 0.10f; float noise_opacity_ = 0.5f; + float favorite_opacity_ = 1.0f; // Favorite gold outline/star opacity multiplier (0.15–1.0, 1.0 = theme default) bool gradient_background_ = false; #ifdef _WIN32 float ui_opacity_ = 0.50f; // Card/sidebar opacity (0.3–1.0, 1.0 = opaque) diff --git a/src/ui/pages/settings_page.cpp b/src/ui/pages/settings_page.cpp index 8af7c6a..735c90c 100644 --- a/src/ui/pages/settings_page.cpp +++ b/src/ui/pages/settings_page.cpp @@ -106,6 +106,7 @@ struct SettingsPageState { float noise_opacity = 0.5f; float ui_opacity = 1.0f; float window_opacity = 1.0f; + float favorite_opacity = 1.0f; std::string balance_layout = "classic"; bool scanline_enabled = true; bool theme_effects_enabled = true; @@ -448,6 +449,7 @@ static void loadSettingsPageState(App* app) { s_settingsState.acrylic_enabled = (s_settingsState.blur_amount > 0.001f); s_settingsState.ui_opacity = settings->getUIOpacity(); s_settingsState.window_opacity = settings->getWindowOpacity(); + s_settingsState.favorite_opacity = settings->getFavoriteOpacity(); s_settingsState.noise_opacity = settings->getNoiseOpacity(); s_settingsState.gradient_background = settings->getGradientBackground(); @@ -532,6 +534,7 @@ static void saveSettingsPageState(config::Settings* settings) { settings->setBlurMultiplier(blur); settings->setUIOpacity(lowSpecOverrides ? realPrefs.ui_opacity : s_settingsState.ui_opacity); settings->setWindowOpacity(s_settingsState.window_opacity); // 1.0 under low-spec, as the hotkey saves it + settings->setFavoriteOpacity(s_settingsState.favorite_opacity); // not low-spec gated — cosmetic settings->setNoiseOpacity(s_settingsState.noise_opacity); settings->setGradientBackground(s_settingsState.gradient_background); settings->setScanlineEnabled(lowSpecOverrides ? realPrefs.scanline_enabled : s_settingsState.scanline_enabled); @@ -1025,6 +1028,30 @@ void RenderSettingsPage(App* app) { ImGui::Dummy(ImVec2(0, Layout::spacingMd())); + // --- Favorite highlight opacity (gold outline + star button in the Balance address list) --- + // Pure color-alpha preference; not low-spec gated (unlike the transparency sliders below). + { + ImGui::PushFont(body2); + ImGui::PushStyleColor(ImGuiCol_Text, ImGui::GetColorU32(OnSurfaceMedium())); + ImGui::TextUnformatted(TR("favorite_opacity")); + ImGui::PopStyleColor(); + float favSliderW = std::min(std::max(S.drawElement("components.settings-page", "effects-input-min-width").size, contentW), 360.0f * dp); + ImGui::SetNextItemWidth(favSliderW); + { + char favop_fmt[16]; + snprintf(favop_fmt, sizeof(favop_fmt), "%.0f%%%%", s_settingsState.favorite_opacity * 100.0f); + if (ImGui::SliderFloat("##FavoriteOpacity", &s_settingsState.favorite_opacity, 0.15f, 1.0f, favop_fmt, + ImGuiSliderFlags_AlwaysClamp)) { + if (app->settings()) app->settings()->setFavoriteOpacity(s_settingsState.favorite_opacity); // live; persisted on release + } + } + if (ImGui::IsItemDeactivatedAfterEdit()) saveSettingsPageState(app->settings()); + if (ImGui::IsItemHovered()) material::Tooltip("%s", TR("tt_favorite_opacity")); + ImGui::PopFont(); + } + + ImGui::Dummy(ImVec2(0, Layout::spacingMd())); + // --- Effect toggles (always visible, horizontal wrapping flow) --- { ImGui::PushFont(body2); diff --git a/src/ui/windows/balance_components.cpp b/src/ui/windows/balance_components.cpp index 142e42a..dd451d4 100644 --- a/src/ui/windows/balance_components.cpp +++ b/src/ui/windows/balance_components.cpp @@ -285,10 +285,13 @@ void RenderSharedAddressList(App* app, float listH, float availW, float innerW = ImGui::GetContentRegionAvail().x; // Theme colors for buttons (resolved once) - ImU32 favGoldFill = S.resolveColor("var(--favorite-fill)", IM_COL32(255, 200, 50, 40)); - ImU32 favGoldBorder = S.resolveColor("var(--favorite-border)", IM_COL32(255, 200, 50, 100)); - ImU32 favGoldIcon = S.resolveColor("var(--favorite-icon)", IM_COL32(255, 200, 50, 255)); - ImU32 favGoldOutline= S.resolveColor("var(--favorite-outline)", IM_COL32(255, 200, 50, 120)); + // User-adjustable opacity for the favorite gold visuals (Settings > Appearance). 1.0 = + // theme default (unchanged); scales whatever alpha the skin resolved, so it is skin-agnostic. + const float favOp = app->settings() ? app->settings()->getFavoriteOpacity() : 1.0f; + ImU32 favGoldFill = ScaleAlpha(S.resolveColor("var(--favorite-fill)", IM_COL32(255, 200, 50, 40)), favOp); + ImU32 favGoldBorder = ScaleAlpha(S.resolveColor("var(--favorite-border)", IM_COL32(255, 200, 50, 100)), favOp); + ImU32 favGoldIcon = ScaleAlpha(S.resolveColor("var(--favorite-icon)", IM_COL32(255, 200, 50, 255)), favOp); + ImU32 favGoldOutline= ScaleAlpha(S.resolveColor("var(--favorite-outline)", IM_COL32(255, 200, 50, 120)), favOp); ImU32 btnFill = S.resolveColor("var(--row-button-fill)", IM_COL32(255, 255, 255, 12)); ImU32 btnFillHov = S.resolveColor("var(--row-button-fill-hover)", IM_COL32(255, 255, 255, 25)); ImU32 btnBorder = S.resolveColor("var(--row-button-border)", IM_COL32(255, 255, 255, 25)); diff --git a/src/util/i18n.cpp b/src/util/i18n.cpp index e5e22d1..11834ea 100644 --- a/src/util/i18n.cpp +++ b/src/util/i18n.cpp @@ -520,6 +520,7 @@ void I18n::loadBuiltinEnglish() strings_["noise"] = "Noise"; strings_["ui_opacity"] = "UI Opacity"; strings_["window_opacity"] = "Window Opacity"; + strings_["favorite_opacity"] = "Favorite Highlight Opacity"; strings_["font_scale"] = "Font Scale"; strings_["refresh"] = "Refresh"; strings_["website"] = "Website"; @@ -795,6 +796,7 @@ void I18n::loadBuiltinEnglish() strings_["tt_noise"] = "Grain texture intensity (0% = off, 100% = maximum)"; strings_["tt_ui_opacity"] = "Card and sidebar opacity (100% = fully opaque, lower = more see-through)"; strings_["tt_window_opacity"] = "Background opacity (lower = desktop visible through window)"; + strings_["tt_favorite_opacity"] = "Opacity of the favorite star button and its gold outline in the address list (minimum 15%)"; strings_["tt_font_scale"] = "Scale all text and UI (1.0x = default, up to 1.5x). Hotkey: Alt + Scroll Wheel"; strings_["tt_custom_theme"] = "Custom theme active"; strings_["tt_address_book"] = "Manage saved addresses for quick sending";