1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
|
/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
/*
Sonic Visualiser
An audio file viewer and annotation editor.
Centre for Digital Music, Queen Mary, University of London.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version. See the file
COPYING included with this distribution for more information.
*/
#include "SVSplash.h"
#include "../version.h"
#include <QPainter>
#include <QApplication>
#include <QScreen>
#include <QSvgRenderer>
#include "system/System.h"
#include <cmath>
#include <iostream>
using namespace std;
SVSplash::SVSplash()
{
setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);
bool darkTheme = OSReportsDarkThemeActive();
QPixmap *p1 = new QPixmap(QString(":icons/scalable/sv-splash.png"));
int w = p1->width(), h = p1->height();
QScreen *screen = QApplication::primaryScreen();
QRect desk = screen->availableGeometry();
double dpratio = devicePixelRatio();
double widthMultiple = double(desk.width()) / double(w);
int sw = w, sh = h;
if (widthMultiple > 2.5 || dpratio > 1.0 || darkTheme) {
// Hi-dpi either via pixel doubling or simply via lots of
// pixels - or dark theme splash, for which we only have an
// svg version
double factor = widthMultiple / 2.5;
if (factor < 1.0) factor = 1.0;
sw = int(floor(w * factor));
sh = int(floor(h * factor));
delete p1;
m_pixmap = new QPixmap(int(floor(sw * dpratio)),
int(floor(sh * dpratio)));
// cerr << "pixmap size = " << m_pixmap->width() << " * "
// << m_pixmap->height() << endl;
m_pixmap->fill(Qt::white);
QString filename = "sv-splash";
if (darkTheme) {
filename = "sv-splash-dark";
}
QSvgRenderer renderer(QString(":icons/scalable/%1.svg").arg(filename));
QPainter painter(m_pixmap);
renderer.render(&painter);
painter.end();
} else {
// The "low dpi" case
m_pixmap = p1;
}
setFixedWidth(sw);
setFixedHeight(sh);
setGeometry(desk.x() + desk.width()/2 - sw/2,
desk.y() + desk.height()/2 - sh/2,
sw, sh);
}
SVSplash::~SVSplash()
{
delete m_pixmap;
}
void
SVSplash::finishSplash(QWidget *w)
{
finish(w);
}
void
SVSplash::drawContents(QPainter *painter)
{
painter->drawPixmap(rect(), *m_pixmap, m_pixmap->rect());
QString text = QString("v%1").arg(SV_VERSION);
painter->setPen(OSReportsDarkThemeActive() ? Qt::white : Qt::black);
painter->drawText
(width() - painter->fontMetrics().horizontalAdvance(text) - (width()/50),
(width()/70) + painter->fontMetrics().ascent(),
text);
}
|