diff options
-rw-r--r-- | core/metrics.cpp | 1 | ||||
-rw-r--r-- | core/qt-gui.h | 2 | ||||
-rw-r--r-- | mobile-widgets/themeinterface.cpp | 45 | ||||
-rw-r--r-- | mobile-widgets/themeinterface.h | 1 | ||||
-rw-r--r-- | subsurface-helper.cpp | 8 | ||||
-rw-r--r-- | 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 <QQuickWindow> -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<QMLManager>("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 <QApplication> +#include <QFont> #include <QLocale> #include <QLoggingCategory> #include <QStringList> @@ -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(); |