diff options
-rw-r--r-- | android.cpp | 8 | ||||
-rw-r--r-- | linux.c | 9 | ||||
-rw-r--r-- | macos.c | 8 | ||||
-rw-r--r-- | pref.h | 3 | ||||
-rw-r--r-- | qt-ui/preferences.cpp | 26 | ||||
-rw-r--r-- | windows.c | 11 |
6 files changed, 53 insertions, 12 deletions
diff --git a/android.cpp b/android.cpp index 66bc6cf3e..1e99a5ced 100644 --- a/android.cpp +++ b/android.cpp @@ -13,13 +13,19 @@ extern "C" { const char android_system_divelist_default_font[] = "Roboto"; const char *system_divelist_default_font = android_system_divelist_default_font; -const int system_divelist_default_font_size = 8; +double system_divelist_default_font_size = 8.0; void subsurface_OS_pref_setup(void) { // nothing } +bool subsurface_ignore_font(const char *font) +{ + // there are no old default fonts that we would want to ignore + return false; +} + const char *system_default_filename(void) { /* Replace this when QtCore/QStandardPaths getExternalStorageDirectory landed */ @@ -12,15 +12,22 @@ #include <unistd.h> #include <pwd.h> +// the DE should provide us with a default font and font size... const char linux_system_divelist_default_font[] = "Sans"; const char *system_divelist_default_font = linux_system_divelist_default_font; -const int system_divelist_default_font_size = 8; +double system_divelist_default_font_size = -1.0; void subsurface_OS_pref_setup(void) { // nothing } +bool subsurface_ignore_font(const char *font) +{ + // there are no old default fonts to ignore + return false; +} + void subsurface_user_info(struct user_info *user) { struct passwd *pwd = getpwuid(getuid()); @@ -30,13 +30,19 @@ void subsurface_user_info(struct user_info *info) const char mac_system_divelist_default_font[] = "Arial"; const char *system_divelist_default_font = mac_system_divelist_default_font; -const int system_divelist_default_font_size = 10; +double system_divelist_default_font_size = -1.0; void subsurface_OS_pref_setup(void) { // nothing } +bool subsurface_ignore_font(const char *font) +{ + // there are no old default fonts to ignore + return false; +} + const char *system_default_filename(void) { const char *home, *user; @@ -80,8 +80,9 @@ extern struct preferences prefs, default_prefs; #define PP_GRAPHS_ENABLED (prefs.pp_graphs.po2 || prefs.pp_graphs.pn2 || prefs.pp_graphs.phe) extern const char *system_divelist_default_font; -extern const int system_divelist_default_font_size; +extern double system_divelist_default_font_size; extern const char *system_default_filename(); +extern bool subsurface_ignore_font(const char *font); extern void subsurface_OS_pref_setup(); #ifdef __cplusplus diff --git a/qt-ui/preferences.cpp b/qt-ui/preferences.cpp index edd95d838..ddccc8ae0 100644 --- a/qt-ui/preferences.cpp +++ b/qt-ui/preferences.cpp @@ -333,14 +333,26 @@ void PreferencesDialog::loadSettings() s.endGroup(); s.beginGroup("Display"); - QFont defaultFont = s.value("divelist_font", qApp->font()).value<QFont>(); - defaultFont.setPointSizeF(s.value("font_size", qApp->font().pointSizeF()).toFloat()); + // get the font from the settings or our defaults + // respect the system default font size if none is explicitly set + QFont defaultFont = s.value("divelist_font", prefs.divelist_font).value<QFont>(); + if (IS_FP_SAME(system_divelist_default_font_size, -1.0)) { + prefs.font_size = qApp->font().pointSizeF(); + system_divelist_default_font_size = prefs.font_size; // this way we don't save it on exit + } + prefs.font_size = s.value("font_size", prefs.font_size).toFloat(); + // painful effort to ignore previous default fonts on Windows - ridiculous + QString fontName = defaultFont.toString(); + if (fontName.contains(",")) + fontName = fontName.left(fontName.indexOf(",")); + if (subsurface_ignore_font(fontName.toUtf8().constData())) { + defaultFont = QFont(prefs.divelist_font); + } else { + free((void *)prefs.divelist_font); + prefs.divelist_font = strdup(fontName.toUtf8().constData()); + } + defaultFont.setPointSizeF(prefs.font_size); qApp->setFont(defaultFont); - - GET_TXT("divelist_font", divelist_font); - GET_INT("font_size", font_size); - if (prefs.font_size < 0) - prefs.font_size = defaultFont.pointSizeF(); GET_INT("displayinvalid", display_invalid_dives); s.endGroup(); @@ -15,7 +15,7 @@ const char non_standard_system_divelist_default_font[] = "Calibri"; const char current_system_divelist_default_font[] = "Segoe UI"; const char *system_divelist_default_font = non_standard_system_divelist_default_font; -const int system_divelist_default_font_size = 9; +double system_divelist_default_font_size = -1; void subsurface_user(struct user_info *user) { /* Encourage use of at least libgit2-0.20 */ } @@ -28,6 +28,15 @@ void subsurface_OS_pref_setup(void) system_divelist_default_font = current_system_divelist_default_font; } +bool subsurface_ignore_font(const char *font) +{ + // if this is running on a recent enough version of Windows and the font + // passed in is the pre 4.3 default font, ignore it + if (isWin7Or8() && strcmp(font, non_standard_system_divelist_default_font) == 0) + return true; + return false; +} + const char *system_default_filename(void) { char datapath[MAX_PATH]; |