mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-02-03 12:11:56 +00:00
Merge bitcoin-core/gui#71: Fix visual quality of text in QR image
6954156b4091bc1e561502f0eef0cece56c76eec qt: Fix visual quality of text in QR image (Hennadii Stepanov)
8071c75d45e12c2bca04b170c687bebd30ad19ac qt, refactor: Limit scope of QPainter object (Hennadii Stepanov)
Pull request description:
Master (197450f80868fe752c6107955e5da80704212b34):

This PR (6954156b4091bc1e561502f0eef0cece56c76eec):
- macOS 10.15.6

- Linux Mint 20

Fix #54
Fix https://github.com/bitcoin/bitcoin/issues/19103
---
The first commit is easy to review with [`git diff --word-diff`](8071c75d45).
ACKs for top commit:
jonasschnelli:
Tested ACK 6954156b4091bc1e561502f0eef0cece56c76eec - tested on macOS 10.15. Fixes the problem.
Tree-SHA512: 6ecb3397d2a5094c5f00ee05fc09520751568404e000a8691b6de7e57f38c2d5da628694e5e45a2b4cc302a846bbc00014c40820233eb026d3ebd4f68c2c9913
This commit is contained in:
commit
49984b44cf
@ -9,6 +9,7 @@
|
||||
#include <QApplication>
|
||||
#include <QClipboard>
|
||||
#include <QDrag>
|
||||
#include <QFontDatabase>
|
||||
#include <QMenu>
|
||||
#include <QMimeData>
|
||||
#include <QMouseEvent>
|
||||
@ -64,26 +65,28 @@ bool QRImageWidget::setQR(const QString& data, const QString& text)
|
||||
}
|
||||
QRcode_free(code);
|
||||
|
||||
QImage qrAddrImage = QImage(QR_IMAGE_SIZE, QR_IMAGE_SIZE + (text.isEmpty() ? 0 : 20), QImage::Format_RGB32);
|
||||
const int qr_image_size = QR_IMAGE_SIZE + (text.isEmpty() ? 0 : 2 * QR_IMAGE_MARGIN);
|
||||
QImage qrAddrImage(qr_image_size, qr_image_size, QImage::Format_RGB32);
|
||||
qrAddrImage.fill(0xffffff);
|
||||
QPainter painter(&qrAddrImage);
|
||||
painter.drawImage(0, 0, qrImage.scaled(QR_IMAGE_SIZE, QR_IMAGE_SIZE));
|
||||
{
|
||||
QPainter painter(&qrAddrImage);
|
||||
painter.drawImage(QR_IMAGE_MARGIN, 0, qrImage.scaled(QR_IMAGE_SIZE, QR_IMAGE_SIZE));
|
||||
|
||||
if (!text.isEmpty()) {
|
||||
QFont font = GUIUtil::fixedPitchFont();
|
||||
font.setStyleStrategy(QFont::NoAntialias);
|
||||
QRect paddedRect = qrAddrImage.rect();
|
||||
if (!text.isEmpty()) {
|
||||
QRect paddedRect = qrAddrImage.rect();
|
||||
paddedRect.setHeight(QR_IMAGE_SIZE + QR_IMAGE_TEXT_MARGIN);
|
||||
|
||||
// calculate ideal font size
|
||||
qreal font_size = GUIUtil::calculateIdealFontSize(paddedRect.width() - 20, text, font);
|
||||
font.setPointSizeF(font_size);
|
||||
QFont font = GUIUtil::fixedPitchFont();
|
||||
font.setStretch(QFont::SemiCondensed);
|
||||
font.setLetterSpacing(QFont::AbsoluteSpacing, 1);
|
||||
const qreal font_size = GUIUtil::calculateIdealFontSize(paddedRect.width() - 2 * QR_IMAGE_TEXT_MARGIN, text, font);
|
||||
font.setPointSizeF(font_size);
|
||||
|
||||
painter.setFont(font);
|
||||
paddedRect.setHeight(QR_IMAGE_SIZE+12);
|
||||
painter.drawText(paddedRect, Qt::AlignBottom|Qt::AlignCenter, text);
|
||||
painter.setFont(font);
|
||||
painter.drawText(paddedRect, Qt::AlignBottom | Qt::AlignCenter, text);
|
||||
}
|
||||
}
|
||||
|
||||
painter.end();
|
||||
setPixmap(QPixmap::fromImage(qrAddrImage));
|
||||
|
||||
return true;
|
||||
|
||||
@ -12,7 +12,9 @@
|
||||
static const int MAX_URI_LENGTH = 255;
|
||||
|
||||
/* Size of exported QR Code image */
|
||||
static const int QR_IMAGE_SIZE = 300;
|
||||
static constexpr int QR_IMAGE_SIZE = 300;
|
||||
static constexpr int QR_IMAGE_TEXT_MARGIN = 10;
|
||||
static constexpr int QR_IMAGE_MARGIN = 2 * QR_IMAGE_TEXT_MARGIN;
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QMenu;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user