Skip to content

Commit 49984b4

Browse files
committed
Merge bitcoin-core/gui#71: Fix visual quality of text in QR image
6954156 qt: Fix visual quality of text in QR image (Hennadii Stepanov) 8071c75 qt, refactor: Limit scope of QPainter object (Hennadii Stepanov) Pull request description: Master (197450f): ![DeepinScreenshot_select-area_20200824001800](https://user-images.githubusercontent.com/32963518/90988962-96283680-e59f-11ea-8e20-42e9b23033f5.png) This PR (6954156): - macOS 10.15.6 ![Screenshot from 2020-09-07 15-40-30](https://user-images.githubusercontent.com/32963518/92390251-2c716600-f123-11ea-96f0-0e9d35810c76.png) - Linux Mint 20 ![Screenshot from 2020-09-07 15-48-13](https://user-images.githubusercontent.com/32963518/92390272-36936480-f123-11ea-8fee-4de23bb40ed9.png) Fix #54 Fix bitcoin/bitcoin#19103 --- The first commit is easy to review with [`git diff --word-diff`](bitcoin-core/gui@8071c75?w=1). ACKs for top commit: jonasschnelli: Tested ACK 6954156 - tested on macOS 10.15. Fixes the problem. Tree-SHA512: 6ecb3397d2a5094c5f00ee05fc09520751568404e000a8691b6de7e57f38c2d5da628694e5e45a2b4cc302a846bbc00014c40820233eb026d3ebd4f68c2c9913
2 parents 9af7c19 + 6954156 commit 49984b4

File tree

2 files changed

+20
-15
lines changed

2 files changed

+20
-15
lines changed

src/qt/qrimagewidget.cpp

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include <QApplication>
1010
#include <QClipboard>
1111
#include <QDrag>
12+
#include <QFontDatabase>
1213
#include <QMenu>
1314
#include <QMimeData>
1415
#include <QMouseEvent>
@@ -64,26 +65,28 @@ bool QRImageWidget::setQR(const QString& data, const QString& text)
6465
}
6566
QRcode_free(code);
6667

67-
QImage qrAddrImage = QImage(QR_IMAGE_SIZE, QR_IMAGE_SIZE + (text.isEmpty() ? 0 : 20), QImage::Format_RGB32);
68+
const int qr_image_size = QR_IMAGE_SIZE + (text.isEmpty() ? 0 : 2 * QR_IMAGE_MARGIN);
69+
QImage qrAddrImage(qr_image_size, qr_image_size, QImage::Format_RGB32);
6870
qrAddrImage.fill(0xffffff);
69-
QPainter painter(&qrAddrImage);
70-
painter.drawImage(0, 0, qrImage.scaled(QR_IMAGE_SIZE, QR_IMAGE_SIZE));
71+
{
72+
QPainter painter(&qrAddrImage);
73+
painter.drawImage(QR_IMAGE_MARGIN, 0, qrImage.scaled(QR_IMAGE_SIZE, QR_IMAGE_SIZE));
7174

72-
if (!text.isEmpty()) {
73-
QFont font = GUIUtil::fixedPitchFont();
74-
font.setStyleStrategy(QFont::NoAntialias);
75-
QRect paddedRect = qrAddrImage.rect();
75+
if (!text.isEmpty()) {
76+
QRect paddedRect = qrAddrImage.rect();
77+
paddedRect.setHeight(QR_IMAGE_SIZE + QR_IMAGE_TEXT_MARGIN);
7678

77-
// calculate ideal font size
78-
qreal font_size = GUIUtil::calculateIdealFontSize(paddedRect.width() - 20, text, font);
79-
font.setPointSizeF(font_size);
79+
QFont font = GUIUtil::fixedPitchFont();
80+
font.setStretch(QFont::SemiCondensed);
81+
font.setLetterSpacing(QFont::AbsoluteSpacing, 1);
82+
const qreal font_size = GUIUtil::calculateIdealFontSize(paddedRect.width() - 2 * QR_IMAGE_TEXT_MARGIN, text, font);
83+
font.setPointSizeF(font_size);
8084

81-
painter.setFont(font);
82-
paddedRect.setHeight(QR_IMAGE_SIZE+12);
83-
painter.drawText(paddedRect, Qt::AlignBottom|Qt::AlignCenter, text);
85+
painter.setFont(font);
86+
painter.drawText(paddedRect, Qt::AlignBottom | Qt::AlignCenter, text);
87+
}
8488
}
8589

86-
painter.end();
8790
setPixmap(QPixmap::fromImage(qrAddrImage));
8891

8992
return true;

src/qt/qrimagewidget.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212
static const int MAX_URI_LENGTH = 255;
1313

1414
/* Size of exported QR Code image */
15-
static const int QR_IMAGE_SIZE = 300;
15+
static constexpr int QR_IMAGE_SIZE = 300;
16+
static constexpr int QR_IMAGE_TEXT_MARGIN = 10;
17+
static constexpr int QR_IMAGE_MARGIN = 2 * QR_IMAGE_TEXT_MARGIN;
1618

1719
QT_BEGIN_NAMESPACE
1820
class QMenu;

0 commit comments

Comments
 (0)