5 #if defined(HAVE_CONFIG_H)
6 #include "config/bitcoin-config.h"
23 #include <QApplication>
24 #include <QCloseEvent>
25 #include <QDesktopWidget>
27 #include <QRadialGradient>
29 #include <boost/bind/bind.hpp>
32 QWidget(0, f), curAlignment(0)
35 int paddingRight = 50;
37 int titleVersionVSpace = 17;
38 int titleCopyrightVSpace = 40;
40 float fontFactor = 1.0;
41 float devicePixelRatio = 1.0;
42 #if QT_VERSION > 0x050100
43 devicePixelRatio = ((QGuiApplication*)QCoreApplication::instance())->devicePixelRatio();
47 QString titleText = tr(PACKAGE_NAME);
48 QString versionText = QString(
"Version %1").arg(QString::fromStdString(
FormatFullVersion()));
52 QString font =
"Comic Sans MS";
55 QSize splashSize(480*devicePixelRatio,320*devicePixelRatio);
56 pixmap = QPixmap(splashSize);
58 #if QT_VERSION > 0x050100
60 pixmap.setDevicePixelRatio(devicePixelRatio);
63 QPainter pixPaint(&
pixmap);
64 pixPaint.setPen(QColor(100,100,100));
67 QRadialGradient gradient(QPoint(0,0), splashSize.width()/devicePixelRatio);
68 gradient.setColorAt(0, Qt::white);
69 gradient.setColorAt(1, QColor(247,247,247));
70 QRect rGradient(QPoint(0,0), splashSize);
71 pixPaint.fillRect(rGradient, gradient);
74 QRect rectIcon(QPoint(-150,-122), QSize(430,430));
76 const QSize requiredSize(1024,1024);
77 QPixmap icon(networkStyle->
getAppIcon().pixmap(requiredSize));
79 pixPaint.drawPixmap(rectIcon, icon);
82 pixPaint.setFont(QFont(font, 33*fontFactor));
83 QFontMetrics fm = pixPaint.fontMetrics();
84 int titleTextWidth = fm.width(titleText);
85 if (titleTextWidth > 176) {
86 fontFactor = fontFactor * 176 / titleTextWidth;
89 pixPaint.setFont(QFont(font, 33*fontFactor));
90 fm = pixPaint.fontMetrics();
91 titleTextWidth = fm.width(titleText);
92 pixPaint.drawText(
pixmap.width()/devicePixelRatio-titleTextWidth-paddingRight,paddingTop,titleText);
94 pixPaint.setFont(QFont(font, 15*fontFactor));
97 fm = pixPaint.fontMetrics();
98 int versionTextWidth = fm.width(versionText);
99 if(versionTextWidth > titleTextWidth+paddingRight-10) {
100 pixPaint.setFont(QFont(font, 10*fontFactor));
101 titleVersionVSpace -= 5;
103 pixPaint.drawText(
pixmap.width()/devicePixelRatio-titleTextWidth-paddingRight+2,paddingTop+titleVersionVSpace,versionText);
107 pixPaint.setFont(QFont(font, 10*fontFactor));
108 const int x =
pixmap.width()/devicePixelRatio-titleTextWidth-paddingRight;
109 const int y = paddingTop+titleCopyrightVSpace;
110 QRect copyrightRect(x, y,
pixmap.width() - x - paddingRight,
pixmap.height() - y);
111 pixPaint.drawText(copyrightRect, Qt::AlignLeft | Qt::AlignTop | Qt::TextWordWrap, copyrightText);
116 QFont boldFont = QFont(font, 10*fontFactor);
117 boldFont.setWeight(QFont::Bold);
118 pixPaint.setFont(boldFont);
119 fm = pixPaint.fontMetrics();
121 pixPaint.drawText(
pixmap.width()/devicePixelRatio-titleAddTextWidth-10,15,
titleAddText);
130 QRect r(QPoint(), QSize(
pixmap.size().width()/devicePixelRatio,
pixmap.size().height()/devicePixelRatio));
132 setFixedSize(r.size());
133 move(QApplication::desktop()->screenGeometry().center() - r.center());
155 static void InitMessage(
SplashScreen *splash,
const std::string &message)
157 QMetaObject::invokeMethod(splash,
"showMessage",
158 Qt::QueuedConnection,
159 Q_ARG(QString, QString::fromStdString(message)),
160 Q_ARG(
int, Qt::AlignBottom|Qt::AlignHCenter),
161 Q_ARG(QColor, QColor(55,55,55)));
164 static void ShowProgress(
SplashScreen *splash,
const std::string &title,
int nProgress)
166 InitMessage(splash, title +
strprintf(
"%d", nProgress) +
"%");
172 wallet->
ShowProgress.connect(boost::bind(ShowProgress,
this,
173 boost::placeholders::_1,
174 boost::placeholders::_2));
183 boost::placeholders::_1));
185 boost::placeholders::_1,boost::placeholders::_2));
188 boost::placeholders::_1));
196 boost::placeholders::_1));
198 boost::placeholders::_1,
199 boost::placeholders::_2));
202 pwallet->
ShowProgress.disconnect(boost::bind(ShowProgress,
this,
203 boost::placeholders::_1,
204 boost::placeholders::_2));
219 QPainter painter(
this);
220 painter.drawPixmap(0, 0,
pixmap);
221 QRect r = rect().adjusted(5, 5, -5, -5);
boost::signals2::signal< void(CWallet *wallet)> LoadWallet
A wallet has been loaded.
boost::signals2::signal< void(const std::string &title, int nProgress)> ShowProgress
Show progress e.g.
boost::signals2::signal< void(const std::string &message)> InitMessage
Progress message during initialization.
A CWallet is an extension of a keystore, which also maintains a set of transactions and balances,...
boost::signals2::signal< void(const std::string &title, int nProgress)> ShowProgress
Show progress e.g.
const QString & getTitleAddText() const
const QIcon & getAppIcon() const
Class for the splashscreen with information of the running client.
void ConnectWallet(CWallet *)
Connect wallet signals to splash screen.
void paintEvent(QPaintEvent *event)
void showMessage(const QString &message, int alignment, const QColor &color)
Show message and progress.
void unsubscribeFromCoreSignals()
Disconnect core signals to splash screen.
void subscribeToCoreSignals()
Connect core signals to splash screen.
QList< CWallet * > connectedWallets
SplashScreen(Qt::WindowFlags f, const NetworkStyle *networkStyle)
void slotFinish(QWidget *mainWin)
Slot to call finish() method as it's not defined as slot.
void closeEvent(QCloseEvent *event)
std::string FormatFullVersion()
#define COPYRIGHT_YEAR
Copyright year (2009-this) Todo: update this when changing our copyright comments in the source.
const char * titleAddText
CClientUIInterface uiInterface
std::string CopyrightHolders(const std::string &strPrefix)