You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
4.4 KiB
145 lines
4.4 KiB
// Copyright (c) 2011-2014 The Bitcoin developers |
|
// Distributed under the MIT/X11 software license, see the accompanying |
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php. |
|
|
|
#include "splashscreen.h" |
|
|
|
#include "clientversion.h" |
|
#include "init.h" |
|
#include "ui_interface.h" |
|
#include "util.h" |
|
#ifdef ENABLE_WALLET |
|
#include "wallet.h" |
|
#endif |
|
|
|
#include <QApplication> |
|
#include <QPainter> |
|
|
|
SplashScreen::SplashScreen(const QPixmap &pixmap, Qt::WindowFlags f, bool isTestNet) : |
|
QSplashScreen(pixmap, f) |
|
{ |
|
setAutoFillBackground(true); |
|
|
|
// set reference point, paddings |
|
int paddingRight = 50; |
|
int paddingTop = 50; |
|
int titleVersionVSpace = 17; |
|
int titleCopyrightVSpace = 40; |
|
|
|
float fontFactor = 1.0; |
|
|
|
// define text to place |
|
QString titleText = tr("Bitcoin Core"); |
|
QString versionText = QString("Version %1").arg(QString::fromStdString(FormatFullVersion())); |
|
QString copyrightText = QChar(0xA9)+QString(" 2009-%1 ").arg(COPYRIGHT_YEAR) + QString(tr("The Bitcoin Core developers")); |
|
QString testnetAddText = QString(tr("[testnet]")); // define text to place as single text object |
|
|
|
QString font = "Arial"; |
|
|
|
// load the bitmap for writing some text over it |
|
QPixmap newPixmap; |
|
if(isTestNet) { |
|
newPixmap = QPixmap(":/images/splash_testnet"); |
|
} |
|
else { |
|
newPixmap = QPixmap(":/images/splash"); |
|
} |
|
|
|
QPainter pixPaint(&newPixmap); |
|
pixPaint.setPen(QColor(100,100,100)); |
|
|
|
// check font size and drawing with |
|
pixPaint.setFont(QFont(font, 33*fontFactor)); |
|
QFontMetrics fm = pixPaint.fontMetrics(); |
|
int titleTextWidth = fm.width(titleText); |
|
if(titleTextWidth > 160) { |
|
// strange font rendering, Arial probably not found |
|
fontFactor = 0.75; |
|
} |
|
|
|
pixPaint.setFont(QFont(font, 33*fontFactor)); |
|
fm = pixPaint.fontMetrics(); |
|
titleTextWidth = fm.width(titleText); |
|
pixPaint.drawText(newPixmap.width()-titleTextWidth-paddingRight,paddingTop,titleText); |
|
|
|
pixPaint.setFont(QFont(font, 15*fontFactor)); |
|
|
|
// if the version string is to long, reduce size |
|
fm = pixPaint.fontMetrics(); |
|
int versionTextWidth = fm.width(versionText); |
|
if(versionTextWidth > titleTextWidth+paddingRight-10) { |
|
pixPaint.setFont(QFont(font, 10*fontFactor)); |
|
titleVersionVSpace -= 5; |
|
} |
|
pixPaint.drawText(newPixmap.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); |
|
|
|
// draw testnet string if testnet is on |
|
if(isTestNet) { |
|
QFont boldFont = QFont(font, 10*fontFactor); |
|
boldFont.setWeight(QFont::Bold); |
|
pixPaint.setFont(boldFont); |
|
fm = pixPaint.fontMetrics(); |
|
int testnetAddTextWidth = fm.width(testnetAddText); |
|
pixPaint.drawText(newPixmap.width()-testnetAddTextWidth-10,15,testnetAddText); |
|
} |
|
|
|
pixPaint.end(); |
|
|
|
this->setPixmap(newPixmap); |
|
|
|
subscribeToCoreSignals(); |
|
} |
|
|
|
SplashScreen::~SplashScreen() |
|
{ |
|
unsubscribeFromCoreSignals(); |
|
} |
|
|
|
void SplashScreen::slotFinish(QWidget *mainWin) |
|
{ |
|
finish(mainWin); |
|
} |
|
|
|
static void InitMessage(SplashScreen *splash, const std::string &message) |
|
{ |
|
QMetaObject::invokeMethod(splash, "showMessage", |
|
Qt::QueuedConnection, |
|
Q_ARG(QString, QString::fromStdString(message)), |
|
Q_ARG(int, Qt::AlignBottom|Qt::AlignHCenter), |
|
Q_ARG(QColor, QColor(55,55,55))); |
|
} |
|
|
|
static void ShowProgress(SplashScreen *splash, const std::string &title, int nProgress) |
|
{ |
|
InitMessage(splash, title + strprintf("%d", nProgress) + "%"); |
|
} |
|
|
|
#ifdef ENABLE_WALLET |
|
static void ConnectWallet(SplashScreen *splash, CWallet* wallet) |
|
{ |
|
wallet->ShowProgress.connect(boost::bind(ShowProgress, splash, _1, _2)); |
|
} |
|
#endif |
|
|
|
void SplashScreen::subscribeToCoreSignals() |
|
{ |
|
// Connect signals to client |
|
uiInterface.InitMessage.connect(boost::bind(InitMessage, this, _1)); |
|
#ifdef ENABLE_WALLET |
|
uiInterface.LoadWallet.connect(boost::bind(ConnectWallet, this, _1)); |
|
#endif |
|
} |
|
|
|
void SplashScreen::unsubscribeFromCoreSignals() |
|
{ |
|
// Disconnect signals from client |
|
uiInterface.InitMessage.disconnect(boost::bind(InitMessage, this, _1)); |
|
#ifdef ENABLE_WALLET |
|
if(pwalletMain) |
|
pwalletMain->ShowProgress.disconnect(boost::bind(ShowProgress, this, _1, _2)); |
|
#endif |
|
}
|
|
|