From 323e97c60370f06bb30e57580c8c4fce39df95f7 Mon Sep 17 00:00:00 2001 From: Dirk Hohndel Date: Thu, 14 Jan 2021 17:08:13 -0800 Subject: mobile/UI: remember the system default font size We need to do this before the preferences are loaded, or the system default size is lost. Given that our other sizes are all relative to this value, that would be a problem. With this we can now ensure that we always have the right font size for smaller, regular, and larger theme settings. Also removes some obsolete commented out code. Signed-off-by: Dirk Hohndel --- core/metrics.cpp | 1 - core/qt-gui.h | 2 +- mobile-widgets/themeinterface.cpp | 45 +++++++++++++++++++++------------------ mobile-widgets/themeinterface.h | 1 + subsurface-helper.cpp | 8 +++++-- subsurface-mobile-main.cpp | 6 +++++- 6 files changed, 37 insertions(+), 26 deletions(-) diff --git a/core/metrics.cpp b/core/metrics.cpp index 23bf14253..9351bcb0d 100644 --- a/core/metrics.cpp +++ b/core/metrics.cpp @@ -24,7 +24,6 @@ IconMetrics::IconMetrics() : QFont defaultModelFont() { QFont font; -// font.setPointSizeF(font.pointSizeF() * 0.8); return font; } diff --git a/core/qt-gui.h b/core/qt-gui.h index dc0fb2348..8915b7ccd 100644 --- a/core/qt-gui.h +++ b/core/qt-gui.h @@ -10,7 +10,7 @@ void set_non_bt_addresses(); #if defined(SUBSURFACE_MOBILE) #include -void run_mobile_ui(); +void run_mobile_ui(double initial_font_size); #else void run_ui(); #endif diff --git a/mobile-widgets/themeinterface.cpp b/mobile-widgets/themeinterface.cpp index 38a569746..8dcfc1903 100644 --- a/mobile-widgets/themeinterface.cpp +++ b/mobile-widgets/themeinterface.cpp @@ -56,13 +56,7 @@ ThemeInterface::ThemeInterface() // get current theme m_currentTheme = qPrefDisplay::theme(); update_theme(); - - // check system font and create QFontInfo in order to reliably get the point size - QFontInfo qfi(defaultModelFont()); - m_basePointSize = qfi.pointSize(); - - // set initial font size - set_currentScale(qPrefDisplay::mobile_scale()); + m_basePointSize = -1.0; // simply a placeholder to declare 'this isn't set, yet' } void ThemeInterface::set_currentTheme(const QString &theme) @@ -73,6 +67,12 @@ void ThemeInterface::set_currentTheme(const QString &theme) emit currentThemeChanged(); } +void ThemeInterface::setInitialFontSize(double fontSize) +{ + m_basePointSize = fontSize; + set_currentScale(qPrefDisplay::mobile_scale()); +} + double ThemeInterface::currentScale() { return qPrefDisplay::mobile_scale(); @@ -80,27 +80,30 @@ double ThemeInterface::currentScale() void ThemeInterface::set_currentScale(double newScale) { + static bool needSignals = true; // make sure the signals fire the first time + if (!IS_FP_SAME(newScale, qPrefDisplay::mobile_scale())) { - double factor = newScale / qPrefDisplay::mobile_scale(); qPrefDisplay::set_mobile_scale(newScale); emit currentScaleChanged(); - - // Set current font size - m_basePointSize *= factor; - defaultModelFont().setPointSizeF(m_basePointSize); + needSignals = true; } - // adjust all used font sizes - m_regularPointSize = m_basePointSize; - emit regularPointSizeChanged(); + if (needSignals) { + // adjust all used font sizes + m_regularPointSize = m_basePointSize * newScale; + defaultModelFont().setPointSizeF(m_regularPointSize); + emit regularPointSizeChanged(); - m_headingPointSize = m_regularPointSize * 1.2; - emit headingPointSizeChanged(); + m_headingPointSize = m_regularPointSize * 1.2; + emit headingPointSizeChanged(); - m_smallPointSize = m_regularPointSize * 0.8; - emit smallPointSizeChanged(); + m_smallPointSize = m_regularPointSize * 0.8; + emit smallPointSizeChanged(); - m_titlePointSize = m_regularPointSize * 1.5; - emit titlePointSizeChanged(); + m_titlePointSize = m_regularPointSize * 1.5; + emit titlePointSizeChanged(); + + needSignals = false; + } } void ThemeInterface::update_theme() diff --git a/mobile-widgets/themeinterface.h b/mobile-widgets/themeinterface.h index e4e61144f..922d6531e 100644 --- a/mobile-widgets/themeinterface.h +++ b/mobile-widgets/themeinterface.h @@ -37,6 +37,7 @@ class ThemeInterface : public QObject { public: static ThemeInterface *instance(); double currentScale(); + void setInitialFontSize(double fontSize); public slots: void set_currentTheme(const QString &theme); diff --git a/subsurface-helper.cpp b/subsurface-helper.cpp index c8cb8f8ee..11f471a8b 100644 --- a/subsurface-helper.cpp +++ b/subsurface-helper.cpp @@ -69,7 +69,7 @@ void exit_ui() } #ifdef SUBSURFACE_MOBILE -void run_mobile_ui() +void run_mobile_ui(double initial_font_size) { #if defined(Q_OS_ANDROID) // work around an odd interaction between the OnePlus flavor of Android and Qt font handling @@ -127,9 +127,13 @@ void run_mobile_ui() ctxt->setContextProperty("diveModel", MobileModels::instance()->listModel()); set_non_bt_addresses(); + // we need to setup the initial font size before the QML UI is instantiated + ThemeInterface *themeInterface = ThemeInterface::instance(); + themeInterface->setInitialFontSize(initial_font_size); + ctxt->setContextProperty("connectionListModel", &connectionListModel); ctxt->setContextProperty("logModel", MessageHandlerModel::self()); - ctxt->setContextProperty("subsurfaceTheme", ThemeInterface::instance()); + ctxt->setContextProperty("subsurfaceTheme", themeInterface); qmlRegisterUncreatableType("org.subsurfacedivelog.mobile",1,0,"ExportType","Enum is not a type"); diff --git a/subsurface-mobile-main.cpp b/subsurface-mobile-main.cpp index 89a1f4c64..2b224b595 100644 --- a/subsurface-mobile-main.cpp +++ b/subsurface-mobile-main.cpp @@ -19,6 +19,7 @@ #include "core/settings/qPrefCloudStorage.h" #include +#include #include #include #include @@ -60,6 +61,9 @@ int main(int argc, char **argv) parse_xml_init(); taglist_init_global(); + + // grab the system font size before we overwrite this when we load preferences + double initial_font_size = QGuiApplication::font().pointSizeF(); init_ui(); if (prefs.default_file_behavior == LOCAL_DEFAULT_FILE) set_filename(prefs.default_filename); @@ -76,7 +80,7 @@ int main(int argc, char **argv) init_proxy(); if (!quit) - run_mobile_ui(); + run_mobile_ui(initial_font_size); exit_ui(); taglist_free(g_tag_list); parse_xml_exit(); -- cgit v1.2.3-70-g09d2