Chris@954: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@954: Chris@954: /* Chris@954: Sonic Visualiser Chris@954: An audio file viewer and annotation editor. Chris@954: Centre for Digital Music, Queen Mary, University of London. Chris@954: Chris@954: This program is free software; you can redistribute it and/or Chris@954: modify it under the terms of the GNU General Public License as Chris@954: published by the Free Software Foundation; either version 2 of the Chris@954: License, or (at your option) any later version. See the file Chris@954: COPYING included with this distribution for more information. Chris@954: */ Chris@954: Chris@954: #include "SVSplash.h" Chris@954: Chris@954: #include "../version.h" Chris@954: Chris@954: #include Chris@954: #include Chris@2300: #include Chris@954: #include Chris@954: Chris@2463: #include "system/System.h" Chris@2463: Chris@955: #include Chris@955: Chris@954: #include Chris@954: using namespace std; Chris@954: Chris@954: SVSplash::SVSplash() Chris@954: { Chris@954: setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint); Chris@2463: Chris@2463: bool darkTheme = OSReportsDarkThemeActive(); Chris@954: Chris@2463: QPixmap *p1 = new QPixmap(QString(":icons/scalable/sv-splash.png")); Chris@954: Chris@954: int w = p1->width(), h = p1->height(); Chris@2300: QScreen *screen = QApplication::primaryScreen(); Chris@2300: QRect desk = screen->availableGeometry(); Chris@954: Chris@954: double dpratio = devicePixelRatio(); Chris@954: double widthMultiple = double(desk.width()) / double(w); Chris@954: Chris@954: int sw = w, sh = h; Chris@954: Chris@2463: if (widthMultiple > 2.5 || dpratio > 1.0 || darkTheme) { Chris@954: Chris@1770: // Hi-dpi either via pixel doubling or simply via lots of Chris@2463: // pixels - or dark theme splash, for which we only have an Chris@2463: // svg version Chris@954: Chris@1770: double factor = widthMultiple / 2.5; Chris@1770: if (factor < 1.0) factor = 1.0; Chris@1770: sw = int(floor(w * factor)); Chris@1770: sh = int(floor(h * factor)); Chris@954: Chris@1770: delete p1; Chris@1770: m_pixmap = new QPixmap(int(floor(sw * dpratio)), Chris@1770: int(floor(sh * dpratio))); Chris@954: Chris@1770: // cerr << "pixmap size = " << m_pixmap->width() << " * " Chris@1770: // << m_pixmap->height() << endl; Chris@1770: Chris@2463: m_pixmap->fill(Qt::white); Chris@2463: QString filename = "sv-splash"; Chris@2463: if (darkTheme) { Chris@2463: filename = "sv-splash-dark"; Chris@2463: } Chris@2463: QSvgRenderer renderer(QString(":icons/scalable/%1.svg").arg(filename)); Chris@1770: QPainter painter(m_pixmap); Chris@1770: renderer.render(&painter); Chris@1770: painter.end(); Chris@954: Chris@954: } else { Chris@1770: // The "low dpi" case Chris@1770: m_pixmap = p1; Chris@954: } Chris@954: Chris@954: setFixedWidth(sw); Chris@954: setFixedHeight(sh); Chris@954: setGeometry(desk.x() + desk.width()/2 - sw/2, Chris@1770: desk.y() + desk.height()/2 - sh/2, Chris@1770: sw, sh); Chris@954: } Chris@954: Chris@954: SVSplash::~SVSplash() Chris@954: { Chris@954: delete m_pixmap; Chris@954: } Chris@954: Chris@954: void Chris@954: SVSplash::finishSplash(QWidget *w) Chris@954: { Chris@954: finish(w); Chris@954: } Chris@954: Chris@954: void Chris@954: SVSplash::drawContents(QPainter *painter) Chris@954: { Chris@2300: // Qt 5.13 deprecates QFontMetrics::width(), but its suggested Chris@2300: // replacement (horizontalAdvance) was only added in Qt 5.11 Chris@2300: // which is too new for us Chris@2300: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" Chris@2300: Chris@954: painter->drawPixmap(rect(), *m_pixmap, m_pixmap->rect()); Chris@954: QString text = QString("v%1").arg(SV_VERSION); Chris@2463: painter->setPen(OSReportsDarkThemeActive() ? Qt::white : Qt::black); Chris@954: painter->drawText Chris@1770: (width() - painter->fontMetrics().width(text) - (width()/50), Chris@1770: (width()/70) + painter->fontMetrics().ascent(), Chris@1770: text); Chris@954: } Chris@954: Chris@954: