From 78fd934666441d56233ed83b449df493ed6a2494 Mon Sep 17 00:00:00 2001 From: mitoma Date: Sat, 21 Dec 2024 18:05:03 +0900 Subject: [PATCH] =?UTF-8?q?=E3=83=87=E3=83=95=E3=82=A9=E3=83=AB=E3=83=88?= =?UTF-8?q?=E3=83=95=E3=82=A9=E3=83=B3=E3=83=88=E3=81=AB=E6=88=BB=E3=81=9B?= =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- font_collector/src/lib.rs | 4 ++++ ui_support/src/action/system.rs | 31 ++++++++++++++++++------------- ui_support/src/lib.rs | 2 +- ui_support/src/render_state.rs | 11 +++++++++-- 4 files changed, 32 insertions(+), 16 deletions(-) diff --git a/font_collector/src/lib.rs b/font_collector/src/lib.rs index 22c4469..98396b9 100644 --- a/font_collector/src/lib.rs +++ b/font_collector/src/lib.rs @@ -46,6 +46,10 @@ impl FontRepository { } } + pub fn clear_primary_font(&mut self) { + self.primary_font = None; + } + pub fn add_fallback_font_from_system(&mut self, font_name: &str) { if let Some(font_data) = self.font_collector.load_font(font_name) { self.fallback_fonts.push(font_data); diff --git a/ui_support/src/action/system.rs b/ui_support/src/action/system.rs index 1a9083e..8c63be9 100644 --- a/ui_support/src/action/system.rs +++ b/ui_support/src/action/system.rs @@ -302,17 +302,22 @@ impl ActionProcessor for SystemChangeFontUi { context: &StateContext, world: &mut dyn World, ) -> InputResult { - let options = context - .font_repository - .list_font_names() - .iter() - .map(|name| { - SelectOption::new( - name.clone(), - Action::new_command_with_argument("system", "change-font", name), - ) - }) - .collect::>(); + let mut options = vec![SelectOption::new( + "デフォルトフォント".to_string(), + Action::new_command("system", "change-font"), + )]; + options.extend( + context + .font_repository + .list_font_names() + .iter() + .map(|name| { + SelectOption::new( + name.clone(), + Action::new_command_with_argument("system", "change-font", name), + ) + }), + ); let model = SelectBox::new_without_action_name( context, @@ -351,9 +356,9 @@ impl ActionProcessor for SystemChangeFont { _world: &mut dyn World, ) -> InputResult { if let ActionArgument::String(font_name) = arg { - InputResult::ChangeFont(font_name.clone()) + InputResult::ChangeFont(Some(font_name.clone())) } else { - InputResult::Noop + InputResult::ChangeFont(None) } } } diff --git a/ui_support/src/lib.rs b/ui_support/src/lib.rs index 1e05f95..1b445c2 100644 --- a/ui_support/src/lib.rs +++ b/ui_support/src/lib.rs @@ -378,7 +378,7 @@ pub enum InputResult { ChangeBackgroundImage(Option), ChangeGlobalDirection(Direction), ChangeWindowSize(WindowSize), - ChangeFont(String), + ChangeFont(Option), SendExit, Noop, } diff --git a/ui_support/src/render_state.rs b/ui_support/src/render_state.rs index ce2da5c..07de54a 100644 --- a/ui_support/src/render_state.rs +++ b/ui_support/src/render_state.rs @@ -505,8 +505,15 @@ impl RenderState { self.simple_state_callback.shutdown(); } - pub(crate) fn change_font(&mut self, font_name: String) { - self.context.font_repository.set_primary_font(&font_name); + pub(crate) fn change_font(&mut self, font_name: Option) { + match font_name { + Some(font_name) => { + self.context.font_repository.set_primary_font(&font_name); + } + None => { + self.context.font_repository.clear_primary_font(); + } + } let font_binaries = self.context.font_repository.get_fonts(); let font_binaries = Arc::new(font_binaries); let char_width_calcurator = Arc::new(CharWidthCalculator::new(font_binaries.clone()));