diff --git a/i18n/en/cosmic_term.ftl b/i18n/en/cosmic_term.ftl index d372f83..ceefd25 100644 --- a/i18n/en/cosmic_term.ftl +++ b/i18n/en/cosmic_term.ftl @@ -11,6 +11,7 @@ dark = Dark light = Light syntax-dark = Syntax dark syntax-light = Syntax light +advanced-font-settings = Advanced Font Settings default-font = Default font default-font-stretch = Default font stretch default-font-weight = Default font weight diff --git a/src/main.rs b/src/main.rs index f7f8b3d..eae5eb8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -14,7 +14,7 @@ use cosmic::{ futures::SinkExt, keyboard::{Event as KeyEvent, KeyCode, Modifiers}, subscription::{self, Subscription}, - window, Event, Length, Point, + window, Event, Length, Point, Padding, }, style, widget::{self, segmented_button}, @@ -159,6 +159,7 @@ pub enum Message { TermEventTx(mpsc::Sender<(segmented_button::Entity, TermEvent)>), Todo(&'static str), ToggleContextPage(ContextPage), + ShowAdvancedFontSettings(bool), WindowClose, WindowNew, ZoomIn, @@ -204,6 +205,7 @@ pub struct App { context_page: ContextPage, term_event_tx_opt: Option>, term_config: TermConfig, + show_advanced_font_settings: bool, } impl App { @@ -346,7 +348,40 @@ impl App { .zoom_steps .iter() .position(|zoom_step| zoom_step == &self.config.font_size_zoom_step_mul_100); - widget::settings::view_column(vec![widget::settings::view_section(fl!("appearance")) + + let advanced_font_settings = || { + let section = widget::settings::view_section("") + .add( + widget::settings::item::builder(fl!("default-font-stretch")).control( + widget::dropdown(&self.curr_font_stretch_names, font_stretch_selected, |index| { + Message::DefaultFontStretch(index) + }), + ), + ) + .add( + widget::settings::item::builder(fl!("default-font-weight")).control( + widget::dropdown(&self.curr_font_weight_names, font_weight_selected, |index| { + Message::DefaultFontWeight(index) + }), + ), + ) + .add( + widget::settings::item::builder(fl!("default-bold-font-weight")).control( + widget::dropdown(&self.curr_font_weight_names, bold_font_weight_selected, |index| { + Message::DefaultBoldFontWeight(index) + }), + ), + ); + let padding = Padding { + top: 0.0, + bottom: 0.0, + left: 12.0, + right: 12.0, + }; + widget::container(section).padding(padding) + }; + + let mut settings_view = widget::settings::view_section(fl!("appearance")) .add( widget::settings::item::builder(fl!("theme")).control(widget::dropdown( &self.app_themes, @@ -381,6 +416,16 @@ impl App { |index| Message::DefaultFont(index), )), ) + .add( + widget::settings::item::builder(fl!("advanced-font-settings")) + .toggler(self.show_advanced_font_settings, Message::ShowAdvancedFontSettings), + ); + + if self.show_advanced_font_settings { + settings_view = settings_view.add(advanced_font_settings()); + } + + let settings_view = settings_view .add( widget::settings::item::builder(fl!("default-font-size")).control( widget::dropdown(&self.font_size_names, font_size_selected, |index| { @@ -395,33 +440,12 @@ impl App { }), ), ) - .add( - widget::settings::item::builder(fl!("default-font-stretch")).control( - widget::dropdown(&self.curr_font_stretch_names, font_stretch_selected, |index| { - Message::DefaultFontStretch(index) - }), - ), - ) - .add( - widget::settings::item::builder(fl!("default-font-weight")).control( - widget::dropdown(&self.curr_font_weight_names, font_weight_selected, |index| { - Message::DefaultFontWeight(index) - }), - ), - ) - .add( - widget::settings::item::builder(fl!("default-bold-font-weight")).control( - widget::dropdown(&self.curr_font_weight_names, bold_font_weight_selected, |index| { - Message::DefaultBoldFontWeight(index) - }), - ), - ) .add( widget::settings::item::builder(fl!("show-headerbar")) .toggler(self.config.show_headerbar, Message::ShowHeaderBar), - ) - .into()]) - .into() + ); + + widget::settings::view_column(vec![settings_view.into()]).into() } } @@ -570,6 +594,7 @@ impl Application for App { context_page: ContextPage::Settings, term_config: flags.term_config, term_event_tx_opt: None, + show_advanced_font_settings: false, }; app.set_curr_font_weights_and_stretches(); @@ -870,6 +895,9 @@ impl Application for App { } self.set_context_title(context_page.title()); } + Message::ShowAdvancedFontSettings(show) => { + self.show_advanced_font_settings = show; + }, Message::WindowClose => { return window::close(window::Id::MAIN); }