From b8bdd97d8004a6e3e2374cb3064140bd05a84bda Mon Sep 17 00:00:00 2001 From: Developer Date: Sun, 24 May 2026 07:40:21 +0800 Subject: [PATCH] feat: add settings toggle button to hide/show toolbar buttons --- src/reader.rs | 105 +++++++++++++++++++++++++++----------------------- 1 file changed, 57 insertions(+), 48 deletions(-) diff --git a/src/reader.rs b/src/reader.rs index 9357b65..220feb3 100644 --- a/src/reader.rs +++ b/src/reader.rs @@ -280,6 +280,9 @@ pub fn reading_view( let sidebar_tab_id = ui.make_persistent_id("sidebar_tab"); let mut sidebar_tab: usize = ui.data_mut(|d| *d.get_temp_mut_or_default::(sidebar_tab_id)); + let settings_visible_id = ui.make_persistent_id("settings_visible"); + let mut settings_visible: bool = ui.data_mut(|d| *d.get_temp_mut_or_default::(settings_visible_id)); + if *sidebar_open { egui::SidePanel::left("toc_sidebar") .resizable(true) @@ -325,58 +328,64 @@ pub fn reading_view( ui.label(format!("《{}》", &book.title)); ui.label(format!("[{}]", book.layout.label())); ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { - let (theme_icon, theme_hint) = match theme { - Theme::Dark => ("🌞", "切换到浅色主题"), - Theme::Light => ("🌙", "切换到夜间主题"), - Theme::Sepia => ("📜", "切换到棕褐色主题"), - }; - if ui.button(theme_icon).on_hover_text(theme_hint).clicked() { - action.toggle_theme = true; + let toggle_label = if settings_visible { "⚙ ▲" } else { "⚙" }; + if ui.button(toggle_label).on_hover_text("显示/隐藏设置").clicked() { + settings_visible = !settings_visible; } - let bookmark_icon = if has_bookmark { "🔴" } else { "🔖" }; - let bookmark_hint = if has_bookmark { "移除书签" } else { "添加书签" }; - if ui.button(bookmark_icon).on_hover_text(bookmark_hint).clicked() { - action.toggle_bookmark = true; - } - if ui.button("A⁻").on_hover_text("缩小字体").clicked() { - style.font_size = (style.font_size - 2.0).max(10.0); - } - if ui.button("A⁺").on_hover_text("放大字体").clicked() { - style.font_size = (style.font_size + 2.0).min(48.0); - } - egui::ComboBox::from_id_salt("profile_selector") - .width(110.0) - .selected_text(&style.name) - .show_ui(ui, |ui| { - for name in profile_names { - let selected = *name == style.name; - if ui.selectable_label(selected, name).clicked() { - action.switch_to_profile = Some(name.clone()); + if settings_visible { + let (theme_icon, theme_hint) = match theme { + Theme::Dark => ("🌞", "切换到浅色主题"), + Theme::Light => ("🌙", "切换到夜间主题"), + Theme::Sepia => ("📜", "切换到棕褐色主题"), + }; + if ui.button(theme_icon).on_hover_text(theme_hint).clicked() { + action.toggle_theme = true; + } + let bookmark_icon = if has_bookmark { "🔴" } else { "🔖" }; + let bookmark_hint = if has_bookmark { "移除书签" } else { "添加书签" }; + if ui.button(bookmark_icon).on_hover_text(bookmark_hint).clicked() { + action.toggle_bookmark = true; + } + if ui.button("A⁻").on_hover_text("缩小字体").clicked() { + style.font_size = (style.font_size - 2.0).max(10.0); + } + if ui.button("A⁺").on_hover_text("放大字体").clicked() { + style.font_size = (style.font_size + 2.0).min(48.0); + } + egui::ComboBox::from_id_salt("profile_selector") + .width(110.0) + .selected_text(&style.name) + .show_ui(ui, |ui| { + for name in profile_names { + let selected = *name == style.name; + if ui.selectable_label(selected, name).clicked() { + action.switch_to_profile = Some(name.clone()); + } } - } - }); -egui::ComboBox::from_id_salt("bg_type_selector") - .width(100.0) - .selected_text(bg_type.label()) - .show_ui(ui, |ui| { - for &label in BgType::ALL.iter() { - let selected = bg_type.label() == label; - if ui.selectable_label(selected, label).clicked() { - action.switch_bg = Some(theme::BgType::from_label(label)); + }); + egui::ComboBox::from_id_salt("bg_type_selector") + .width(100.0) + .selected_text(bg_type.label()) + .show_ui(ui, |ui| { + for &label in BgType::ALL.iter() { + let selected = bg_type.label() == label; + if ui.selectable_label(selected, label).clicked() { + action.switch_bg = Some(theme::BgType::from_label(label)); + } } - } - }); - egui::ComboBox::from_id_salt("font_selector") - .width(100.0) - .selected_text(current_font) - .show_ui(ui, |ui| { - for name in crate::font::font_display_names() { - let selected = name == current_font; - if ui.selectable_label(selected, &name).clicked() { - action.switch_font = Some(name); + }); + egui::ComboBox::from_id_salt("font_selector") + .width(100.0) + .selected_text(current_font) + .show_ui(ui, |ui| { + for name in crate::font::font_display_names() { + let selected = name == current_font; + if ui.selectable_label(selected, &name).clicked() { + action.switch_font = Some(name); + } } - } - }); + }); + } if ui.button("☰").on_hover_text("打开/关闭目录").clicked() { *sidebar_open = !*sidebar_open; }