feat(settings): surface the console color toggles as checkboxes

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) <noreply@anthropic.com>
This commit is contained in:
2026-07-12 16:40:25 -05:00
parent c40c252c9a
commit 232b81f8ee
10 changed files with 49 additions and 0 deletions

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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'と入力して利用可能なコマンドを表示",

View File

@@ -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'를 입력하여 사용 가능한 명령어 보기",

View File

@@ -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",

View File

@@ -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' для списка команд",

View File

@@ -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' 查看可用命令",

View File

@@ -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"));

View File

@@ -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";