aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2016-03-28 16:43:40 -0500
committerGravatar Dirk Hohndel <dirk@hohndel.org>2016-03-28 17:05:29 -0500
commitdd0d88f9d74975bf9ee84dcf2e18948d2680356d (patch)
tree7718e4d277aa792ba415c1496415858ad51cea4f
parent8185d24e610e5655da8ccbcfcc4411ea2215fc1f (diff)
downloadsubsurface-dd0d88f9d74975bf9ee84dcf2e18948d2680356d.tar.gz
QML UI: take device pixel ratio into account when scaling pixmaps on iOS
This way warning icons and tank change icons and other event markers are no longer ridiculously tiny on retina screens. Oddly this doesn't appear to be needed on Android, only on iOS. Fixes #1033 Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--profile-widget/diveeventitem.cpp5
-rw-r--r--qt-mobile/qmlprofile.cpp2
-rw-r--r--subsurface-core/metrics.cpp8
-rw-r--r--subsurface-core/metrics.h3
4 files changed, 17 insertions, 1 deletions
diff --git a/profile-widget/diveeventitem.cpp b/profile-widget/diveeventitem.cpp
index b2e3db8c9..3e1de48f3 100644
--- a/profile-widget/diveeventitem.cpp
+++ b/profile-widget/diveeventitem.cpp
@@ -66,8 +66,13 @@ void DiveEventItem::setupPixmap()
#ifndef SUBSURFACE_MOBILE
int sz_bigger = metrics.sz_med + metrics.sz_small; // ex 40px
#else
+#if defined(Q_OS_IOS)
+ // on iOS devices we need to adjust for Device Pixel Ratio
+ int sz_bigger = metrics.sz_med * metrics.dpr;
+#else
int sz_bigger = metrics.sz_med;
#endif
+#endif
int sz_pix = sz_bigger/2; // ex 20px
#define EVENT_PIXMAP(PIX) QPixmap(QString(PIX)).scaled(sz_pix, sz_pix, Qt::KeepAspectRatio, Qt::SmoothTransformation)
diff --git a/qt-mobile/qmlprofile.cpp b/qt-mobile/qmlprofile.cpp
index 249a6b818..ad686561d 100644
--- a/qt-mobile/qmlprofile.cpp
+++ b/qt-mobile/qmlprofile.cpp
@@ -2,6 +2,7 @@
#include "qmlmanager.h"
#include "profile-widget/profilewidget2.h"
#include "subsurface-core/dive.h"
+#include "subsurface-core/metrics.h"
#include <QTransform>
#include <QScreen>
@@ -99,6 +100,7 @@ void QMLProfile::setDevicePixelRatio(qreal dpr)
if (dpr != m_devicePixelRatio) {
m_devicePixelRatio = dpr;
m_profileWidget->setFontPrintScale(0.8 * dpr);
+ updateDevicePixelRatio(dpr);
emit devicePixelRatioChanged();
}
}
diff --git a/subsurface-core/metrics.cpp b/subsurface-core/metrics.cpp
index db636794d..3c66528b8 100644
--- a/subsurface-core/metrics.cpp
+++ b/subsurface-core/metrics.cpp
@@ -15,7 +15,8 @@ IconMetrics::IconMetrics() :
sz_med(-1),
sz_big(-1),
sz_pic(-1),
- spacing(-1)
+ spacing(-1),
+ dpr(1.0)
{
}
@@ -57,3 +58,8 @@ const IconMetrics & defaultIconMetrics()
return dfltIconMetrics;
}
+
+void updateDevicePixelRatio(double dpr)
+{
+ dfltIconMetrics.dpr = dpr;
+}
diff --git a/subsurface-core/metrics.h b/subsurface-core/metrics.h
index 03d6b22e2..ca281b3b1 100644
--- a/subsurface-core/metrics.h
+++ b/subsurface-core/metrics.h
@@ -25,9 +25,12 @@ struct IconMetrics {
int sz_pic; // ex 128px
// icon spacing
int spacing; // ex 2px
+ // devicePixelRatio
+ double dpr; // 1.0 for traditional screens, HiDPI screens up to 3.0
IconMetrics();
};
const IconMetrics & defaultIconMetrics();
+void updateDevicePixelRatio(double dpr);
#endif // METRICS_H