Browse Source

qt: Change splash screen to normal window

Makes it possible to move, minimize, unminimize the window while
Bitcoin Core is initializing.
0.10
Wladimir J. van der Laan 10 years ago
parent
commit
a49f11d9ed
  1. 7
      src/qt/bitcoin.cpp
  2. 55
      src/qt/splashscreen.cpp
  3. 15
      src/qt/splashscreen.h

7
src/qt/bitcoin.cpp

@ -338,8 +338,7 @@ void BitcoinApplication::createWindow(bool isaTestNet) @@ -338,8 +338,7 @@ void BitcoinApplication::createWindow(bool isaTestNet)
void BitcoinApplication::createSplashScreen(bool isaTestNet)
{
SplashScreen *splash = new SplashScreen(QPixmap(), 0, isaTestNet);
splash->setAttribute(Qt::WA_DeleteOnClose);
SplashScreen *splash = new SplashScreen(0, isaTestNet);
splash->show();
connect(this, SIGNAL(splashFinished(QWidget*)), splash, SLOT(slotFinish(QWidget*)));
}
@ -423,8 +422,6 @@ void BitcoinApplication::initializeResult(int retval) @@ -423,8 +422,6 @@ void BitcoinApplication::initializeResult(int retval)
}
#endif
emit splashFinished(window);
// If -min option passed, start window minimized.
if(GetBoolArg("-min", false))
{
@ -434,6 +431,8 @@ void BitcoinApplication::initializeResult(int retval) @@ -434,6 +431,8 @@ void BitcoinApplication::initializeResult(int retval)
{
window->show();
}
emit splashFinished(window);
#ifdef ENABLE_WALLET
// Now that initialization/startup is done, process any command-line
// bitcoin: URIs or payment requests:

55
src/qt/splashscreen.cpp

@ -15,11 +15,12 @@ @@ -15,11 +15,12 @@
#include <QApplication>
#include <QPainter>
#include <QDesktopWidget>
SplashScreen::SplashScreen(const QPixmap &pixmap, Qt::WindowFlags f, bool isTestNet) :
QSplashScreen(pixmap, f)
SplashScreen::SplashScreen(Qt::WindowFlags f, bool isTestNet) :
QWidget(0, f), curAlignment(0)
{
setAutoFillBackground(true);
//setAutoFillBackground(true);
// set reference point, paddings
int paddingRight = 50;
@ -38,15 +39,14 @@ SplashScreen::SplashScreen(const QPixmap &pixmap, Qt::WindowFlags f, bool isTest @@ -38,15 +39,14 @@ SplashScreen::SplashScreen(const QPixmap &pixmap, Qt::WindowFlags f, bool isTest
QString font = "Arial";
// load the bitmap for writing some text over it
QPixmap newPixmap;
if(isTestNet) {
newPixmap = QPixmap(":/images/splash_testnet");
pixmap = QPixmap(":/images/splash_testnet");
}
else {
newPixmap = QPixmap(":/images/splash");
pixmap = QPixmap(":/images/splash");
}
QPainter pixPaint(&newPixmap);
QPainter pixPaint(&pixmap);
pixPaint.setPen(QColor(100,100,100));
// check font size and drawing with
@ -61,7 +61,7 @@ SplashScreen::SplashScreen(const QPixmap &pixmap, Qt::WindowFlags f, bool isTest @@ -61,7 +61,7 @@ SplashScreen::SplashScreen(const QPixmap &pixmap, Qt::WindowFlags f, bool isTest
pixPaint.setFont(QFont(font, 33*fontFactor));
fm = pixPaint.fontMetrics();
titleTextWidth = fm.width(titleText);
pixPaint.drawText(newPixmap.width()-titleTextWidth-paddingRight,paddingTop,titleText);
pixPaint.drawText(pixmap.width()-titleTextWidth-paddingRight,paddingTop,titleText);
pixPaint.setFont(QFont(font, 15*fontFactor));
@ -72,11 +72,11 @@ SplashScreen::SplashScreen(const QPixmap &pixmap, Qt::WindowFlags f, bool isTest @@ -72,11 +72,11 @@ SplashScreen::SplashScreen(const QPixmap &pixmap, Qt::WindowFlags f, bool isTest
pixPaint.setFont(QFont(font, 10*fontFactor));
titleVersionVSpace -= 5;
}
pixPaint.drawText(newPixmap.width()-titleTextWidth-paddingRight+2,paddingTop+titleVersionVSpace,versionText);
pixPaint.drawText(pixmap.width()-titleTextWidth-paddingRight+2,paddingTop+titleVersionVSpace,versionText);
// draw copyright stuff
pixPaint.setFont(QFont(font, 10*fontFactor));
pixPaint.drawText(newPixmap.width()-titleTextWidth-paddingRight,paddingTop+titleCopyrightVSpace,copyrightText);
pixPaint.drawText(pixmap.width()-titleTextWidth-paddingRight,paddingTop+titleCopyrightVSpace,copyrightText);
// draw testnet string if testnet is on
if(isTestNet) {
@ -85,12 +85,22 @@ SplashScreen::SplashScreen(const QPixmap &pixmap, Qt::WindowFlags f, bool isTest @@ -85,12 +85,22 @@ SplashScreen::SplashScreen(const QPixmap &pixmap, Qt::WindowFlags f, bool isTest
pixPaint.setFont(boldFont);
fm = pixPaint.fontMetrics();
int testnetAddTextWidth = fm.width(testnetAddText);
pixPaint.drawText(newPixmap.width()-testnetAddTextWidth-10,15,testnetAddText);
pixPaint.drawText(pixmap.width()-testnetAddTextWidth-10,15,testnetAddText);
}
pixPaint.end();
this->setPixmap(newPixmap);
// Set window title
if(isTestNet)
setWindowTitle(titleText + " " + testnetAddText);
else
setWindowTitle(titleText);
// Resize window and move to center of desktop, disallow resizing
QRect r(QPoint(), pixmap.size());
resize(r.size());
setFixedSize(r.size());
move(QApplication::desktop()->screenGeometry().center() - r.center());
subscribeToCoreSignals();
}
@ -102,7 +112,8 @@ SplashScreen::~SplashScreen() @@ -102,7 +112,8 @@ SplashScreen::~SplashScreen()
void SplashScreen::slotFinish(QWidget *mainWin)
{
finish(mainWin);
hide();
deleteLater();
}
static void InitMessage(SplashScreen *splash, const std::string &message)
@ -146,3 +157,21 @@ void SplashScreen::unsubscribeFromCoreSignals() @@ -146,3 +157,21 @@ void SplashScreen::unsubscribeFromCoreSignals()
pwalletMain->ShowProgress.disconnect(boost::bind(ShowProgress, this, _1, _2));
#endif
}
void SplashScreen::showMessage(const QString &message, int alignment, const QColor &color)
{
curMessage = message;
curAlignment = alignment;
curColor = color;
update();
}
void SplashScreen::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawPixmap(0, 0, pixmap);
QRect r = rect().adjusted(5, 5, -5, -5);
painter.setPen(curColor);
painter.drawText(r, curAlignment, curMessage);
}

15
src/qt/splashscreen.h

@ -9,23 +9,34 @@ @@ -9,23 +9,34 @@
/** class for the splashscreen with information of the running client
*/
class SplashScreen : public QSplashScreen
class SplashScreen : public QWidget
{
Q_OBJECT
public:
explicit SplashScreen(const QPixmap &pixmap, Qt::WindowFlags f, bool isTestNet);
explicit SplashScreen(Qt::WindowFlags f, bool isTestNet);
~SplashScreen();
protected:
void paintEvent(QPaintEvent *event);
public slots:
/** Slot to call finish() method as it's not defined as slot */
void slotFinish(QWidget *mainWin);
/** Show message and progress */
void showMessage(const QString &message, int alignment, const QColor &color);
private:
/** Connect core signals to splash screen */
void subscribeToCoreSignals();
/** Disconnect core signals to splash screen */
void unsubscribeFromCoreSignals();
QPixmap pixmap;
QString curMessage;
QColor curColor;
int curAlignment;
};
#endif // SPLASHSCREEN_H

Loading…
Cancel
Save