5 #if defined(HAVE_CONFIG_H) 21 #include <QApplication> 22 #include <QCloseEvent> 23 #include <QDesktopWidget> 25 #include <QRadialGradient> 27 #include <boost/bind.hpp> 30 QWidget(0, f), curAlignment(0), m_node(node)
33 int paddingRight = 50;
35 int titleVersionVSpace = 17;
36 int titleCopyrightVSpace = 40;
38 float fontFactor = 1.0;
39 float devicePixelRatio = 1.0;
40 #if QT_VERSION > 0x050100 41 devicePixelRatio =
static_cast<QGuiApplication*
>(QCoreApplication::instance())->devicePixelRatio();
46 QString versionText = QString(
"Version %1").arg(QString::fromStdString(
FormatFullVersion()));
50 QString font = QApplication::font().toString();
53 QSize splashSize(480*devicePixelRatio,320*devicePixelRatio);
54 pixmap = QPixmap(splashSize);
56 #if QT_VERSION > 0x050100 58 pixmap.setDevicePixelRatio(devicePixelRatio);
61 QPainter pixPaint(&
pixmap);
62 pixPaint.setPen(QColor(100,100,100));
65 QRadialGradient gradient(QPoint(0,0), splashSize.width()/devicePixelRatio);
66 gradient.setColorAt(0, Qt::white);
67 gradient.setColorAt(1, QColor(247,247,247));
68 QRect rGradient(QPoint(0,0), splashSize);
69 pixPaint.fillRect(rGradient, gradient);
72 QRect rectIcon(QPoint(-150,-122), QSize(430,430));
74 const QSize requiredSize(1024,1024);
75 QPixmap icon(networkStyle->
getAppIcon().pixmap(requiredSize));
77 pixPaint.drawPixmap(rectIcon, icon);
80 pixPaint.setFont(QFont(font, 33*fontFactor));
81 QFontMetrics fm = pixPaint.fontMetrics();
82 int titleTextWidth = fm.width(titleText);
83 if (titleTextWidth > 176) {
84 fontFactor = fontFactor * 176 / titleTextWidth;
87 pixPaint.setFont(QFont(font, 33*fontFactor));
88 fm = pixPaint.fontMetrics();
89 titleTextWidth = fm.width(titleText);
90 pixPaint.drawText(
pixmap.width()/devicePixelRatio-titleTextWidth-paddingRight,paddingTop,titleText);
92 pixPaint.setFont(QFont(font, 15*fontFactor));
95 fm = pixPaint.fontMetrics();
96 int versionTextWidth = fm.width(versionText);
97 if(versionTextWidth > titleTextWidth+paddingRight-10) {
98 pixPaint.setFont(QFont(font, 10*fontFactor));
99 titleVersionVSpace -= 5;
101 pixPaint.drawText(
pixmap.width()/devicePixelRatio-titleTextWidth-paddingRight+2,paddingTop+titleVersionVSpace,versionText);
105 pixPaint.setFont(QFont(font, 10*fontFactor));
106 const int x =
pixmap.width()/devicePixelRatio-titleTextWidth-paddingRight;
107 const int y = paddingTop+titleCopyrightVSpace;
108 QRect copyrightRect(x, y,
pixmap.width() - x - paddingRight,
pixmap.height() - y);
109 pixPaint.drawText(copyrightRect, Qt::AlignLeft | Qt::AlignTop | Qt::TextWordWrap, copyrightText);
114 QFont boldFont = QFont(font, 10*fontFactor);
115 boldFont.setWeight(QFont::Bold);
116 pixPaint.setFont(boldFont);
117 fm = pixPaint.fontMetrics();
119 pixPaint.drawText(
pixmap.width()/devicePixelRatio-titleAddTextWidth-10,15,
titleAddText);
128 QRect r(QPoint(), QSize(
pixmap.size().width()/devicePixelRatio,
pixmap.size().height()/devicePixelRatio));
130 setFixedSize(r.size());
131 move(QApplication::desktop()->screenGeometry().center() - r.center());
134 installEventFilter(
this);
143 if (ev->type() == QEvent::KeyPress) {
144 QKeyEvent *keyEvent =
static_cast<QKeyEvent *
>(ev);
145 if(keyEvent->text()[0] ==
'q') {
149 return QObject::eventFilter(obj, ev);
164 static void InitMessage(
SplashScreen *splash,
const std::string &message)
166 QMetaObject::invokeMethod(splash,
"showMessage",
167 Qt::QueuedConnection,
168 Q_ARG(QString, QString::fromStdString(message)),
169 Q_ARG(
int, Qt::AlignBottom|Qt::AlignHCenter),
170 Q_ARG(QColor, QColor(55,55,55)));
173 static void ShowProgress(
SplashScreen *splash,
const std::string &title,
int nProgress,
bool resume_possible)
175 InitMessage(splash, title + std::string(
"\n") +
176 (resume_possible ?
_(
"(press q to shutdown and continue later)")
177 :
_(
"press q to shutdown")) +
220 QPainter painter(
this);
221 painter.drawPixmap(0, 0,
pixmap);
222 QRect r = rect().adjusted(5, 5, -5, -5);
bool eventFilter(QObject *obj, QEvent *ev)
void unsubscribeFromCoreSignals()
Disconnect core signals to splash screen.
bool(* handler)(HTTPRequest *req, const std::string &strReq)
std::unique_ptr< interfaces::Handler > m_handler_show_progress
void ConnectWallet(std::unique_ptr< interfaces::Wallet > wallet)
Connect wallet signals to splash screen.
void closeEvent(QCloseEvent *event)
std::unique_ptr< interfaces::Handler > m_handler_load_wallet
Class for the splashscreen with information of the running client.
std::unique_ptr< interfaces::Handler > m_handler_init_message
virtual void startShutdown()=0
Start shutdown.
std::list< std::unique_ptr< interfaces::Wallet > > m_connected_wallets
const QIcon & getAppIcon() const
SplashScreen(interfaces::Node &node, Qt::WindowFlags f, const NetworkStyle *networkStyle)
void subscribeToCoreSignals()
Connect core signals to splash screen.
const QString & getTitleAddText() const
void paintEvent(QPaintEvent *event)
void showMessage(const QString &message, int alignment, const QColor &color)
Show message and progress.
std::list< std::unique_ptr< interfaces::Handler > > m_connected_wallet_handlers
virtual std::unique_ptr< Handler > handleShowProgress(ShowProgressFn fn)=0
std::string FormatFullVersion()
std::string CopyrightHolders(const std::string &strPrefix)
virtual std::unique_ptr< Handler > handleLoadWallet(LoadWalletFn fn)=0
void slotFinish(QWidget *mainWin)
Slot to call finish() method as it's not defined as slot.
const char * titleAddText
interfaces::Node & m_node
Top-level interface for a bitcoin node (bsha3d process).
std::string _(const char *psz)
Translation function.
virtual std::unique_ptr< Handler > handleInitMessage(InitMessageFn fn)=0