From 273aa76f8559da9ef542462eefee566b60c4c804 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Tue, 8 Jan 2019 17:26:43 +0000 Subject: [PATCH] GUI: Receive: Split up long addresses across multiple lines, in QR code image --- src/qt/receiverequestdialog.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/qt/receiverequestdialog.cpp b/src/qt/receiverequestdialog.cpp index c561d948be..fa597a9ce4 100644 --- a/src/qt/receiverequestdialog.cpp +++ b/src/qt/receiverequestdialog.cpp @@ -178,20 +178,29 @@ void ReceiveRequestDialog::update() } QRcode_free(code); - QImage qrAddrImage = QImage(QR_IMAGE_SIZE, QR_IMAGE_SIZE+20, QImage::Format_RGB32); + QFont font = GUIUtil::fixedPitchFont(); + font.setPixelSize(12); + QFontMetrics fm(font); + const int lines = (fm.width(info.address) / QR_IMAGE_SIZE) + 1; + QString split_address = info.address; + const int chars_per_line = (info.address.length() + lines - 1) / lines; + for (int i = 0; i < lines; ++i) { + split_address.insert((chars_per_line * i) + i, '\n'); + } + + QImage qrAddrImage = QImage(QR_IMAGE_SIZE, QR_IMAGE_SIZE + 16 + fm.height(), QImage::Format_RGB32); qrAddrImage.fill(0xffffff); QPainter painter(&qrAddrImage); painter.drawImage(0, 0, qrImage.scaled(QR_IMAGE_SIZE, QR_IMAGE_SIZE)); - QFont font = GUIUtil::fixedPitchFont(); QRect paddedRect = qrAddrImage.rect(); + paddedRect.setHeight(QR_IMAGE_SIZE + 8 + fm.height()); + painter.drawText(paddedRect, Qt::AlignBottom | Qt::AlignCenter | Qt::TextWordWrap, split_address); // calculate ideal font size qreal font_size = GUIUtil::calculateIdealFontSize(paddedRect.width() - 20, info.address, font); font.setPointSizeF(font_size); painter.setFont(font); - paddedRect.setHeight(QR_IMAGE_SIZE+12); - painter.drawText(paddedRect, Qt::AlignBottom|Qt::AlignCenter, info.address); painter.end(); ui->lblQRCode->setPixmap(QPixmap::fromImage(qrAddrImage));