From 85148002bc6950b224babf06ee1a034156136e2a Mon Sep 17 00:00:00 2001 From: Thomas Goyne Date: Tue, 10 Dec 2013 09:08:30 -0800 Subject: [PATCH] Get the UI font from CoreText on OS X --- aegisub/src/audio_karaoke.cpp | 2 +- aegisub/src/base_grid.cpp | 2 +- aegisub/src/libresrc/osx/default_config.json | 6 ++--- aegisub/src/subs_edit_ctrl.cpp | 2 +- aegisub/src/utils.cpp | 26 ++++++++++++++++++++ aegisub/src/utils.h | 2 ++ 6 files changed, 34 insertions(+), 6 deletions(-) diff --git a/aegisub/src/audio_karaoke.cpp b/aegisub/src/audio_karaoke.cpp index 9798a1ebe..828a9545c 100644 --- a/aegisub/src/audio_karaoke.cpp +++ b/aegisub/src/audio_karaoke.cpp @@ -97,7 +97,7 @@ AudioKaraoke::AudioKaraoke(wxWindow *parent, agi::Context *c) SetSizerAndFit(main_sizer); /// @todo subscribe - split_font.SetFaceName(to_wx(OPT_GET("Audio/Karaoke/Font Face")->GetString())); + split_font.SetFaceName(FontFace("Audio/Karaoke")); split_font.SetPointSize(OPT_GET("Audio/Karaoke/Font Size")->GetInt()); split_area->Bind(wxEVT_SIZE, &AudioKaraoke::OnSize, this); diff --git a/aegisub/src/base_grid.cpp b/aegisub/src/base_grid.cpp index dd3f2201e..caf5fde79 100644 --- a/aegisub/src/base_grid.cpp +++ b/aegisub/src/base_grid.cpp @@ -225,7 +225,7 @@ void BaseGrid::OnHighlightVisibleChange(agi::OptionValue const& opt) { } void BaseGrid::UpdateStyle() { - wxString fontname = to_wx(OPT_GET("Subtitle/Grid/Font Face")->GetString()); + wxString fontname = FontFace("Subtitle/Grid"); if (fontname.empty()) fontname = "Tahoma"; font.SetFaceName(fontname); font.SetPointSize(OPT_GET("Subtitle/Grid/Font Size")->GetInt()); diff --git a/aegisub/src/libresrc/osx/default_config.json b/aegisub/src/libresrc/osx/default_config.json index 45ab217d3..d7a5e37ac 100644 --- a/aegisub/src/libresrc/osx/default_config.json +++ b/aegisub/src/libresrc/osx/default_config.json @@ -53,7 +53,7 @@ "Drag Timing" : true, "Inactive Lines Display Mode" : 1, "Karaoke" : { - "Font Face" : "Lucida Grande", + "Font Face" : "", "Font Size" : 9 }, "Lead" : { @@ -361,7 +361,7 @@ "Width" : 1280 }, "Edit Box" : { - "Font Face" : "Lucida Grande", + "Font Face" : "", "Font Size" : 13 }, "Grid" : { @@ -378,7 +378,7 @@ {"bool" : true} ], "Focus Allow" : true, - "Font Face" : "Lucida Grande", + "Font Face" : "", "Font Size" : 12, "Hide Overrides" : 1, "Hide Overrides Char" : "☀", diff --git a/aegisub/src/subs_edit_ctrl.cpp b/aegisub/src/subs_edit_ctrl.cpp index 3a2e16d7a..907308387 100644 --- a/aegisub/src/subs_edit_ctrl.cpp +++ b/aegisub/src/subs_edit_ctrl.cpp @@ -207,7 +207,7 @@ void SubsTextEditCtrl::SetSyntaxStyle(int id, wxFont &font, std::string const& n void SubsTextEditCtrl::SetStyles() { wxFont font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); font.SetEncoding(wxFONTENCODING_DEFAULT); // this solves problems with some fonts not working properly - wxString fontname = to_wx(OPT_GET("Subtitle/Edit Box/Font Face")->GetString()); + wxString fontname = FontFace("Subtitle/Edit Box"); if (!fontname.empty()) font.SetFaceName(fontname); font.SetPointSize(OPT_GET("Subtitle/Edit Box/Font Size")->GetInt()); diff --git a/aegisub/src/utils.cpp b/aegisub/src/utils.cpp index c9b9a66ff..2037ccf84 100644 --- a/aegisub/src/utils.cpp +++ b/aegisub/src/utils.cpp @@ -64,6 +64,7 @@ #ifdef __APPLE__ #include +#include #endif /// @brief There shall be no kiB, MiB stuff here Pretty reading of size @@ -272,6 +273,31 @@ void AddFullScreenButton(wxWindow *) { } void SetFloatOnParent(wxWindow *) { } #endif +wxString FontFace(std::string opt_prefix) { + opt_prefix += "/Font Face"; + auto value = OPT_GET(opt_prefix)->GetString(); +#ifdef __WXOSX_COCOA__ + if (value.empty()) { + auto default_font = CTFontCreateUIFontForLanguage(kCTFontUserFontType, 0, nullptr); + auto default_font_name = CTFontCopyPostScriptName(default_font); + CFRelease(default_font); + + auto utf8_str = CFStringGetCStringPtr(default_font_name, kCFStringEncodingUTF8); + if (utf8_str) + value = utf8_str; + else { + char buffer[1024]; + CFStringGetCString(default_font_name, buffer, sizeof(buffer), kCFStringEncodingUTF8); + buffer[1023] = '\0'; + value = buffer; + } + + CFRelease(default_font_name); + } +#endif + return to_wx(value); +} + agi::fs::path FileSelector(wxString const& message, std::string const& option_name, std::string const& default_filename, std::string const& default_extension, wxString const& wildcard, int flags, wxWindow *parent) { wxString path; if (!option_name.empty()) diff --git a/aegisub/src/utils.h b/aegisub/src/utils.h index 9ea8cac82..9c4d4ff60 100644 --- a/aegisub/src/utils.h +++ b/aegisub/src/utils.h @@ -127,5 +127,7 @@ struct cast { } }; +wxString FontFace(std::string opt_prefix); + agi::fs::path OpenFileSelector(wxString const& message, std::string const& option_name, std::string const& default_filename, std::string const& default_extension, wxString const& wildcard, wxWindow *parent); agi::fs::path SaveFileSelector(wxString const& message, std::string const& option_name, std::string const& default_filename, std::string const& default_extension, wxString const& wildcard, wxWindow *parent);