From 00cb5fafe2a56b18cca357f2d398ebf3f85a8aa3 Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Tue, 30 Jul 2013 20:28:23 +0200 Subject: [PATCH] Make DpiScaler entirely dependent on absolute font height in px :C --- src/libtomahawk/utils/DpiScaler.cpp | 26 +++++++++++++------------- src/libtomahawk/utils/DpiScaler.h | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/libtomahawk/utils/DpiScaler.cpp b/src/libtomahawk/utils/DpiScaler.cpp index b58592fb3..1c50b2af9 100644 --- a/src/libtomahawk/utils/DpiScaler.cpp +++ b/src/libtomahawk/utils/DpiScaler.cpp @@ -92,44 +92,44 @@ DpiScaler::scaledY( const QPaintDevice* pd, int y ) qreal DpiScaler::ratioX( const QPaintDevice* pd ) { - qreal basePpp = s_baseDpi / 72.; //72*(1.333)=96 dpi - - qreal ratioFromPpp = getPpp() / basePpp; + qreal ratioFromFH = ratioFromFontHeight(); qreal ratioYFromDpi = pd->logicalDpiY() / s_baseDpi; //using Y because we compare with height //if the error is less than 1%, we trust that the logical DPI setting has the best value - if ( qAbs( ratioFromPpp / ratioYFromDpi - 1 ) < 0.01 ) + if ( qAbs( ratioFromFH / ratioYFromDpi - 1 ) < 0.01 ) return pd->logicalDpiX() / s_baseDpi; else - return ratioFromPpp; + return ratioFromFH; } qreal DpiScaler::ratioY( const QPaintDevice* pd ) { - qreal basePpp = s_baseDpi / 72.; //72*(1.333)=96 dpi - - qreal ratioFromPpp = getPpp() / basePpp; + qreal ratioFromFH = ratioFromFontHeight(); qreal ratioYFromDpi = pd->logicalDpiY() / s_baseDpi; //using Y because we compare with height //if the error is less than 1%, we trust that the logical DPI setting has the best value - if ( qAbs( ratioFromPpp / ratioYFromDpi - 1 ) < 0.01 ) + if ( qAbs( ratioFromFH / ratioYFromDpi - 1 ) < 0.01 ) return ratioYFromDpi; else - return ratioFromPpp; + return ratioFromFH; } qreal -DpiScaler::getPpp() +DpiScaler::ratioFromFontHeight() { int fS = TomahawkUtils::defaultFontSize(); QFont f; f.setPointSize( fS ); int fH = QFontMetrics( f ).ascent() + 1; //a font's em-height should be ascent + 1px (baseline) - qreal ppp = fH / (qreal)fS; //pixels per point - return ppp; + + qreal basePpp = s_baseDpi / 72.; //72*(1.333)=96 dpi + qreal baseFontHeight = 7 * basePpp; //we assume a minimum font size of 7pt + + qreal ratioFromFontHeights = qMax( fH / baseFontHeight, 1. ); + return ratioFromFontHeights; } diff --git a/src/libtomahawk/utils/DpiScaler.h b/src/libtomahawk/utils/DpiScaler.h index 0b1e11f37..97b67ac7a 100644 --- a/src/libtomahawk/utils/DpiScaler.h +++ b/src/libtomahawk/utils/DpiScaler.h @@ -52,7 +52,7 @@ public: private: inline static qreal ratioX( const QPaintDevice* pd ); inline static qreal ratioY( const QPaintDevice* pd ); - inline static qreal getPpp(); + inline static qreal ratioFromFontHeight(); qreal m_ratioX; qreal m_ratioY;