From 232b81f8ee35731b60620ad1b0f66046b543331a Mon Sep 17 00:00:00 2001 From: DanS Date: Sun, 12 Jul 2026 16:40:25 -0500 Subject: [PATCH] feat(settings): surface the console color toggles as checkboxes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add "Color accents" and "Text colors" checkboxes under the effects section (both layout variants) so the console output display prefs are discoverable outside the console toolbar. They mirror the toolbar buttons — bound live to the ConsoleTab statics and written through to settings on change. Unlike scanline/theme-effects they carry no GPU cost, so a small helper closes the effects row's BeginDisabled(low_spec), draws them on their own always- enabled row, and reopens it for the acrylic sliders (net-balanced). Adds console_accents / console_text_colors labels + 8 translations; the tooltips reuse the existing toggle keys. Co-Authored-By: Claude Opus 4.8 (1M context) --- 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/ui/pages/settings_page.cpp | 31 +++++++++++++++++++++++++++++++ src/util/i18n.cpp | 2 ++ 10 files changed, 49 insertions(+) diff --git a/res/lang/de.json b/res/lang/de.json index 831450f..5837a02 100644 --- a/res/lang/de.json +++ b/res/lang/de.json @@ -180,6 +180,7 @@ "connected_peers": "Verbundene Peers", "connecting": "Verbinde...", "console": "Konsole", + "console_accents": "Farbakzente", "console_app": "App", "console_auto_scroll": "Automatisch scrollen", "console_available_commands": "Verfügbare Befehle:", @@ -240,6 +241,7 @@ "console_status_stopping": "Stoppt", "console_status_unknown": "Unbekannt", "console_tab_completion": "Tab zur Vervollständigung", + "console_text_colors": "Textfarben", "console_toggle_accents": "Farbakzente der Zeilen umschalten", "console_toggle_text_color": "Textfarben der Zeilen umschalten", "console_type_help": "Geben Sie 'help' ein für verfügbare Befehle", diff --git a/res/lang/es.json b/res/lang/es.json index ce0a098..0529f4f 100644 --- a/res/lang/es.json +++ b/res/lang/es.json @@ -180,6 +180,7 @@ "connected_peers": "Nodos Conectados", "connecting": "Conectando...", "console": "Consola", + "console_accents": "Acentos de color", "console_app": "App", "console_auto_scroll": "Auto-desplazamiento", "console_available_commands": "Comandos disponibles:", @@ -240,6 +241,7 @@ "console_status_stopping": "Deteniendo", "console_status_unknown": "Desconocido", "console_tab_completion": "Tab para completar", + "console_text_colors": "Colores de texto", "console_toggle_accents": "Alternar acentos de color de línea", "console_toggle_text_color": "Alternar colores de texto de línea", "console_type_help": "Escribe 'help' para ver los comandos disponibles", diff --git a/res/lang/fr.json b/res/lang/fr.json index d1e7aea..fc99f1d 100644 --- a/res/lang/fr.json +++ b/res/lang/fr.json @@ -180,6 +180,7 @@ "connected_peers": "Pairs connectés", "connecting": "Connexion...", "console": "Console", + "console_accents": "Accents de couleur", "console_app": "App", "console_auto_scroll": "Défilement auto", "console_available_commands": "Commandes disponibles :", @@ -240,6 +241,7 @@ "console_status_stopping": "Arrêt", "console_status_unknown": "Inconnu", "console_tab_completion": "Tab pour compléter", + "console_text_colors": "Couleurs du texte", "console_toggle_accents": "Basculer les accents de couleur des lignes", "console_toggle_text_color": "Basculer les couleurs du texte des lignes", "console_type_help": "Tapez 'help' pour les commandes disponibles", diff --git a/res/lang/ja.json b/res/lang/ja.json index 12ae0ea..b21f695 100644 --- a/res/lang/ja.json +++ b/res/lang/ja.json @@ -180,6 +180,7 @@ "connected_peers": "接続中のピア", "connecting": "接続中...", "console": "コンソール", + "console_accents": "カラーアクセント", "console_app": "アプリ", "console_auto_scroll": "自動スクロール", "console_available_commands": "利用可能なコマンド:", @@ -240,6 +241,7 @@ "console_status_stopping": "停止中", "console_status_unknown": "不明", "console_tab_completion": "Tabで補完", + "console_text_colors": "テキスト色", "console_toggle_accents": "行のカラーアクセントを切り替え", "console_toggle_text_color": "行のテキスト色を切り替え", "console_type_help": "'help'と入力して利用可能なコマンドを表示", diff --git a/res/lang/ko.json b/res/lang/ko.json index 5bfe259..26e791a 100644 --- a/res/lang/ko.json +++ b/res/lang/ko.json @@ -180,6 +180,7 @@ "connected_peers": "연결된 피어", "connecting": "연결 중...", "console": "콘솔", + "console_accents": "색상 강조", "console_app": "앱", "console_auto_scroll": "자동 스크롤", "console_available_commands": "사용 가능한 명령어:", @@ -240,6 +241,7 @@ "console_status_stopping": "중지 중", "console_status_unknown": "알 수 없음", "console_tab_completion": "Tab으로 자동 완성", + "console_text_colors": "텍스트 색상", "console_toggle_accents": "줄 색상 강조 전환", "console_toggle_text_color": "줄 텍스트 색상 전환", "console_type_help": "'help'를 입력하여 사용 가능한 명령어 보기", diff --git a/res/lang/pt.json b/res/lang/pt.json index f732448..862d2d2 100644 --- a/res/lang/pt.json +++ b/res/lang/pt.json @@ -180,6 +180,7 @@ "connected_peers": "Pares Conectados", "connecting": "Conectando...", "console": "Console", + "console_accents": "Destaques de cor", "console_app": "App", "console_auto_scroll": "Rolagem automática", "console_available_commands": "Comandos disponíveis:", @@ -240,6 +241,7 @@ "console_status_stopping": "Parando", "console_status_unknown": "Desconhecido", "console_tab_completion": "Tab para completar", + "console_text_colors": "Cores do texto", "console_toggle_accents": "Alternar destaques de cor das linhas", "console_toggle_text_color": "Alternar cores do texto das linhas", "console_type_help": "Digite 'help' para comandos disponíveis", diff --git a/res/lang/ru.json b/res/lang/ru.json index ce6d7eb..21f9c67 100644 --- a/res/lang/ru.json +++ b/res/lang/ru.json @@ -180,6 +180,7 @@ "connected_peers": "Подключённые узлы", "connecting": "Подключение...", "console": "Консоль", + "console_accents": "Цветовые акценты", "console_app": "Прил.", "console_auto_scroll": "Авто-прокрутка", "console_available_commands": "Доступные команды:", @@ -240,6 +241,7 @@ "console_status_stopping": "Остановка", "console_status_unknown": "Неизвестно", "console_tab_completion": "Tab для дополнения", + "console_text_colors": "Цвета текста", "console_toggle_accents": "Переключить цветовые акценты строк", "console_toggle_text_color": "Переключить цвета текста строк", "console_type_help": "Введите 'help' для списка команд", diff --git a/res/lang/zh.json b/res/lang/zh.json index 3a66d6c..080357f 100644 --- a/res/lang/zh.json +++ b/res/lang/zh.json @@ -180,6 +180,7 @@ "connected_peers": "已连接节点", "connecting": "连接中...", "console": "控制台", + "console_accents": "颜色强调", "console_app": "应用", "console_auto_scroll": "自动滚动", "console_available_commands": "可用命令:", @@ -240,6 +241,7 @@ "console_status_stopping": "停止中", "console_status_unknown": "未知", "console_tab_completion": "Tab 补全", + "console_text_colors": "文本颜色", "console_toggle_accents": "切换行颜色强调", "console_toggle_text_color": "切换行文本颜色", "console_type_help": "输入 'help' 查看可用命令", diff --git a/src/ui/pages/settings_page.cpp b/src/ui/pages/settings_page.cpp index 1206604..5fd70d7 100644 --- a/src/ui/pages/settings_page.cpp +++ b/src/ui/pages/settings_page.cpp @@ -492,6 +492,31 @@ static void saveSettingsPageState(config::Settings* settings) { settings->save(); } +// Console output color toggles (accent bars + per-channel text color), shown on their own row under +// the effects checkboxes. They mirror the console toolbar buttons and carry no GPU cost, so — unlike +// scanline/theme-effects — they stay enabled in low-spec: the caller has an open +// BeginDisabled(low_spec) around the effects row, so close it, draw these live-bound to the ConsoleTab +// statics, then reopen it. Persisted immediately (the startup restore in App loads them on launch). +static void renderConsoleColorToggles(App* app) { + ImGui::EndDisabled(); + bool accents = ConsoleTab::s_line_accents_enabled; + if (ImGui::Checkbox(TrId("console_accents", "con_accents").c_str(), &accents)) { + ConsoleTab::s_line_accents_enabled = accents; + app->settings()->setConsoleLineAccents(accents); + app->settings()->save(); + } + if (ImGui::IsItemHovered()) material::Tooltip("%s", TR("console_toggle_accents")); + ImGui::SameLine(0, Layout::spacingLg()); + bool textColor = ConsoleTab::s_line_text_color_enabled; + if (ImGui::Checkbox(TrId("console_text_colors", "con_textcol").c_str(), &textColor)) { + ConsoleTab::s_line_text_color_enabled = textColor; + app->settings()->setConsoleTextColor(textColor); + app->settings()->save(); + } + if (ImGui::IsItemHovered()) material::Tooltip("%s", TR("console_toggle_text_color")); + ImGui::BeginDisabled(s_settingsState.low_spec_mode); +} + // ============================================================================ // Settings Page Renderer // ============================================================================ @@ -874,6 +899,9 @@ void RenderSettingsPage(App* app) { } if (ImGui::IsItemHovered()) material::Tooltip("%s", TR("tt_theme_effects")); + // Console output color toggles (own row — no GPU cost, enabled even in low-spec). + renderConsoleColorToggles(app); + // Row 1: Acrylic preset slider + Noise slider (side by side, labels above) float effCtrlMinW = S.drawElement("components.settings-page", "effects-input-min-width").size; float halfW = (contentW - Layout::spacingLg()) * 0.5f; @@ -1126,6 +1154,9 @@ void RenderSettingsPage(App* app) { } if (ImGui::IsItemHovered()) material::Tooltip("%s", TR("tt_theme_effects")); + // Console output color toggles (own row — no GPU cost, enabled even in low-spec). + renderConsoleColorToggles(app); + float ctrlW = std::max(S.drawElement("components.settings-page", "effects-input-min-width").size, availWidth - pad * 2.0f); ImGui::TextUnformatted(TR("acrylic")); diff --git a/src/util/i18n.cpp b/src/util/i18n.cpp index 74730ac..0772291 100644 --- a/src/util/i18n.cpp +++ b/src/util/i18n.cpp @@ -1292,6 +1292,8 @@ void I18n::loadBuiltinEnglish() strings_["console_zoom_out"] = "Zoom out"; strings_["console_toggle_accents"] = "Toggle line color accents"; strings_["console_toggle_text_color"] = "Toggle line text colors"; + strings_["console_accents"] = "Color accents"; + strings_["console_text_colors"] = "Text colors"; // --- Export All Keys Dialog --- strings_["export_keys_btn"] = "Export Keys";