aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/metrics.cpp1
-rw-r--r--core/qt-gui.h2
-rw-r--r--mobile-widgets/themeinterface.cpp45
-rw-r--r--mobile-widgets/themeinterface.h1
-rw-r--r--subsurface-helper.cpp8
-rw-r--r--subsurface-mobile-main.cpp6
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();