From 96c7ddeea8e590726ef3c28faead8205bb45ac41 Mon Sep 17 00:00:00 2001 From: "moneromooo.monero" Date: Sun, 20 Nov 2016 12:36:14 +0000 Subject: Add QR code display on the receive page This embeds MIT licenced code from Project Nayuki: https://www.nayuki.io/page/qr-code-generator-library The C++ part of the code is embedded in src/QR-Code-generator. See src/QR-Code-generator/Readme.markdown for more info. --- src/libwalletqt/QRCodeImageProvider.cpp | 17 +++++++++++++++++ src/libwalletqt/QRCodeImageProvider.h | 11 +++++++++++ 2 files changed, 28 insertions(+) create mode 100644 src/libwalletqt/QRCodeImageProvider.cpp create mode 100644 src/libwalletqt/QRCodeImageProvider.h (limited to 'src/libwalletqt') diff --git a/src/libwalletqt/QRCodeImageProvider.cpp b/src/libwalletqt/QRCodeImageProvider.cpp new file mode 100644 index 00000000..217d3d7d --- /dev/null +++ b/src/libwalletqt/QRCodeImageProvider.cpp @@ -0,0 +1,17 @@ +#include "QrCode.hpp" + +#include "QRCodeImageProvider.h" + +QImage QRCodeImageProvider::requestImage(const QString &id, QSize *size, const QSize &requestedSize) +{ + using namespace qrcodegen; + + QrCode qrcode = QrCode::encodeText(id.toStdString().c_str(), QrCode::Ecc::MEDIUM); + QImage img = QImage(qrcode.size, qrcode.size, QImage::Format_Mono); + for (int y = 0; y < qrcode.size; ++y) + for (int x = 0; x < qrcode.size; ++x) + img.setPixel(x, y, qrcode.getModule(x, y)); + if (size) + *size = QSize(qrcode.size, qrcode.size); + return img; +} diff --git a/src/libwalletqt/QRCodeImageProvider.h b/src/libwalletqt/QRCodeImageProvider.h new file mode 100644 index 00000000..930b731a --- /dev/null +++ b/src/libwalletqt/QRCodeImageProvider.h @@ -0,0 +1,11 @@ +#include +#include + +class QRCodeImageProvider: public QQuickImageProvider +{ +public: + QRCodeImageProvider(): QQuickImageProvider(QQuickImageProvider::Image) {} + + QImage requestImage(const QString &id, QSize *size, const QSize &requestedSize); +}; + -- cgit v1.2.3