aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2014-09-18 13:14:38 +0200
committerWladimir J. van der Laan <laanwj@gmail.com>2014-09-18 13:21:26 +0200
commita49f11d9edf2f7dbce154ca370494a8f86e013d0 (patch)
tree906f50b1935438b6d9c8bf5d51b61be8e3d4dc00 /src
parent7fd881367544fcc9e70130bf448a181794da26ab (diff)
downloadbitcoin-a49f11d9edf2f7dbce154ca370494a8f86e013d0.tar.xz
qt: Change splash screen to normal window
Makes it possible to move, minimize, unminimize the window while Bitcoin Core is initializing.
Diffstat (limited to 'src')
-rw-r--r--src/qt/bitcoin.cpp7
-rw-r--r--src/qt/splashscreen.cpp55
-rw-r--r--src/qt/splashscreen.h15
3 files changed, 58 insertions, 19 deletions
diff --git a/src/qt/bitcoin.cpp b/src/qt/bitcoin.cpp
index 6cc6b99ceb..676f218f20 100644
--- a/src/qt/bitcoin.cpp
+++ b/src/qt/bitcoin.cpp
@@ -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)
}
#endif
- emit splashFinished(window);
-
// If -min option passed, start window minimized.
if(GetBoolArg("-min", false))
{
@@ -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:
diff --git a/src/qt/splashscreen.cpp b/src/qt/splashscreen.cpp
index 5dd110b36a..b6443d47ff 100644
--- a/src/qt/splashscreen.cpp
+++ b/src/qt/splashscreen.cpp
@@ -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
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
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
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
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()
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()
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);
+}
+
diff --git a/src/qt/splashscreen.h b/src/qt/splashscreen.h
index d79038d81d..1151d6c111 100644
--- a/src/qt/splashscreen.h
+++ b/src/qt/splashscreen.h
@@ -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