qt: Change splash screen to normal window
Makes it possible to move, minimize, unminimize the window while Bitcoin Core is initializing.
This commit is contained in:
parent
7fd8813675
commit
a49f11d9ed
3 changed files with 58 additions and 19 deletions
|
@ -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:
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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…
Reference in a new issue