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 <QPainter>
Chris@954: #include <QApplication>
Chris@954: #include <QDesktopWidget>
Chris@954: #include <QSvgRenderer>
Chris@954: 
Chris@955: #include <cmath>
Chris@955: 
Chris@954: #include <iostream>
Chris@954: using namespace std;
Chris@954: 
Chris@954: SVSplash::SVSplash()
Chris@954: {
Chris@954:     setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);
Chris@954:     
Chris@954:     QPixmap *p1 = new QPixmap(":icons/scalable/sv-splash.png");
Chris@954: 
Chris@954:     int w = p1->width(), h = p1->height();
Chris@954:     QRect desk = QApplication::desktop()->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@954:     if (widthMultiple > 2.5 || dpratio > 1.0) {
Chris@954: 
Chris@954: 	// Hi-dpi either via pixel doubling or simply via lots of
Chris@954: 	// pixels
Chris@954: 
Chris@954: 	double factor = widthMultiple / 2.5;
Chris@954: 	if (factor < 1.0) factor = 1.0;
Chris@954: 	sw = int(floor(w * factor));
Chris@954: 	sh = int(floor(h * factor));
Chris@954: 
Chris@954: 	delete p1;
Chris@954: 	m_pixmap = new QPixmap(int(floor(sw * dpratio)),
Chris@954: 			       int(floor(sh * dpratio)));
Chris@954: 
Chris@1288: //	cerr << "pixmap size = " << m_pixmap->width() << " * "
Chris@1288: //	     << m_pixmap->height() << endl;
Chris@954: 	
Chris@954: 	m_pixmap->fill(Qt::red);
Chris@954: 	QSvgRenderer renderer(QString(":icons/scalable/sv-splash.svg"));
Chris@954: 	QPainter painter(m_pixmap);
Chris@954: 	renderer.render(&painter);
Chris@954: 	painter.end();
Chris@954: 
Chris@954:     } else {
Chris@954: 	// The "low dpi" case
Chris@954: 	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@954: 		desk.y() + desk.height()/2 - sh/2,
Chris@954: 		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@954:     painter->drawPixmap(rect(), *m_pixmap, m_pixmap->rect());
Chris@954:     QString text = QString("v%1").arg(SV_VERSION);
Chris@954:     painter->drawText
Chris@954: 	(width() - painter->fontMetrics().width(text) - (width()/50),
Chris@956: 	 (width()/70) + painter->fontMetrics().ascent(),
Chris@954: 	 text);
Chris@954: }
Chris@954: 
Chris@954: