From f26f71a80b13a9ddf9428e520d74043747432e10 Mon Sep 17 00:00:00 2001 From: Dirk Hohndel Date: Fri, 15 Jan 2021 06:02:18 -0800 Subject: [PATCH] mobile/UI: fix font size when OS font is given in px Android appears to set its default font in pixels, not points. So guess the point size based on the font metric information. This is not perfect, but creates results that are good enough. Signed-off-by: Dirk Hohndel --- subsurface-mobile-main.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/subsurface-mobile-main.cpp b/subsurface-mobile-main.cpp index 2b224b595..454996fc7 100644 --- a/subsurface-mobile-main.cpp +++ b/subsurface-mobile-main.cpp @@ -20,6 +20,7 @@ #include #include +#include #include #include #include @@ -64,6 +65,14 @@ int main(int argc, char **argv) // grab the system font size before we overwrite this when we load preferences double initial_font_size = QGuiApplication::font().pointSizeF(); + if (initial_font_size < 0.0) { + // The OS provides a default font in pixels, not points; doing some crude math + // to reverse engineer that information by measuring the height of a 10pt font in pixels + QFont testFont; + testFont.setPointSizeF(10.0); + QFontMetrics fm(testFont); + initial_font_size = QGuiApplication::font().pixelSize() * 10.0 / fm.height(); + } init_ui(); if (prefs.default_file_behavior == LOCAL_DEFAULT_FILE) set_filename(prefs.default_filename);