@@ -26,18 +26,12 @@ SplashScreen::SplashScreen(Qt::WindowFlags f, const NetworkStyle *networkStyle)
2626 QWidget(0 , f), curAlignment(0 )
2727{
2828 // set reference point, paddings
29- int paddingRight = 50 ;
30- int paddingTop = 50 ;
31- int titleVersionVSpace = 17 ;
29+ int paddingRight = 50 ;
30+ int paddingTop = 50 ;
31+ int titleVersionVSpace = 17 ;
3232 int titleCopyrightVSpaceCore = 40 ;
3333 int titleCopyrightVSpaceClassic = 54 ;
3434
35- float fontFactor = 1.0 ;
36- float devicePixelRatio = 1.0 ;
37- #if QT_VERSION > 0x050100
38- devicePixelRatio = ((QGuiApplication*)QCoreApplication::instance ())->devicePixelRatio ();
39- #endif
40-
4135 // define text to place
4236 QString titleText = tr (" Bitcoin Classic" );
4337 QString versionText = QString (" Version %1" ).arg (QString::fromStdString (FormatFullVersion ()));
@@ -48,16 +42,30 @@ SplashScreen::SplashScreen(Qt::WindowFlags f, const NetworkStyle *networkStyle)
4842 QString font = QApplication::font ().toString ();
4943
5044 // create a bitmap according to device pixelratio
51- QSize splashSize (480 *devicePixelRatio,320 *devicePixelRatio);
45+ float devicePixelRatio;
46+ bool useMorePixels = false ;
47+ #if QT_VERSION > 0x050100
48+ devicePixelRatio = qobject_cast<QGuiApplication*>(QCoreApplication::instance ())->devicePixelRatio ();
49+ if (qFuzzyCompare (devicePixelRatio, (float ) 1 )) {
50+ useMorePixels = true ;
51+ devicePixelRatio = logicalDpiX () / (float ) 96 ;
52+ }
53+ #else
54+ devicePixelRatio = 1.0 ;
55+ #endif
56+
57+ QSize splashSize (480 * devicePixelRatio, 320 * devicePixelRatio);
5258 pixmap = QPixmap (splashSize);
5359
5460#if QT_VERSION > 0x050100
55- // change to HiDPI if it makes sense
56- pixmap.setDevicePixelRatio (devicePixelRatio);
61+ if (!useMorePixels) // change to HiDPI if it makes sense
62+ pixmap.setDevicePixelRatio (devicePixelRatio);
5763#endif
5864
5965 QPainter pixPaint (&pixmap);
6066 pixPaint.setPen (QColor (100 ,100 ,100 ));
67+ if (useMorePixels) // change to HiDPI if it makes sense
68+ pixPaint.scale (devicePixelRatio, devicePixelRatio);
6169
6270 // draw a slightly radial gradient
6371 QRadialGradient gradient (QPoint (0 ,0 ), splashSize.width ()/devicePixelRatio);
@@ -74,18 +82,20 @@ SplashScreen::SplashScreen(Qt::WindowFlags f, const NetworkStyle *networkStyle)
7482
7583 pixPaint.drawPixmap (rectIcon, icon);
7684
77- // check font size and drawing with
78- pixPaint.setFont (QFont (font, 33 *fontFactor));
79- QFontMetrics fm = pixPaint.fontMetrics ();
85+ // check font size and drawing width
86+ float fontFactor = 1.0 ;
87+ if (useMorePixels) // fonts are set in Point, but we used painter::scale(), so we have to counter that.
88+ fontFactor /= devicePixelRatio;
89+ pixPaint.setFont (QFont (font, 33 * fontFactor));
90+ QFontMetrics fm (pixPaint.fontMetrics ());
8091 int titleTextWidth = fm.width (titleText);
81- if (titleTextWidth > 160 ) {
82- // strange font rendering, Arial probably not found
83- fontFactor = 0.75 ;
92+ if (titleTextWidth > 160 ) { // strange font rendering, Arial probably not found
93+ fontFactor *= 0.75 ;
94+ pixPaint.setFont (QFont (font, 33 * fontFactor));
95+ fm = pixPaint.fontMetrics ();
96+ titleTextWidth = fm.width (titleText);
8497 }
8598
86- pixPaint.setFont (QFont (font, 33 *fontFactor));
87- fm = pixPaint.fontMetrics ();
88- titleTextWidth = fm.width (titleText);
8999 pixPaint.drawText (pixmap.width ()/devicePixelRatio-titleTextWidth-paddingRight,paddingTop,titleText);
90100
91101 pixPaint.setFont (QFont (font, 15 *fontFactor));
@@ -118,6 +128,9 @@ SplashScreen::SplashScreen(Qt::WindowFlags f, const NetworkStyle *networkStyle)
118128 // Set window title
119129 setWindowTitle (titleText + " " + titleAddText);
120130
131+ if (useMorePixels) // if scaling uses more pixels, actually allow the windows to have larger pixelsize
132+ devicePixelRatio = 1 ;
133+
121134 // Resize window and move to center of desktop, disallow resizing
122135 QRect r (QPoint (), QSize (pixmap.size ().width ()/devicePixelRatio,pixmap.size ().height ()/devicePixelRatio));
123136 resize (r.size ());
0 commit comments