File indexing completed on 2024-04-28 04:00:29
0001 /* 0002 SPDX-FileCopyrightText: 2010-2014 Sune Vuorela <sune@vuorela.dk> 0003 0004 SPDX-License-Identifier: MIT 0005 */ 0006 0007 #include "barcodeexamplewidget.h" 0008 // Qt 0009 #include <QDrag> 0010 #include <QGuiApplication> 0011 #include <QMimeData> 0012 #include <QPainter> 0013 #include <QResizeEvent> 0014 #include <QScreen> 0015 0016 using namespace Prison; 0017 0018 BarcodeExampleWidget::BarcodeExampleWidget(std::optional<Barcode> barcode, QWidget *parent) 0019 : QWidget(parent) 0020 , m_barcode(std::move(barcode)) 0021 { 0022 if (!barcode) { 0023 qDebug() << "unsupported barcode, showing a black square"; 0024 } 0025 } 0026 0027 BarcodeExampleWidget::BarcodeExampleWidget(BarcodeType barcode, QWidget *parent) 0028 : BarcodeExampleWidget(Barcode::create(barcode), parent) 0029 { 0030 } 0031 0032 void BarcodeExampleWidget::setData(const QString &data) 0033 { 0034 if (m_barcode) { 0035 m_barcode->setData(data); 0036 updateGeometry(); 0037 repaint(); 0038 } 0039 } 0040 0041 void BarcodeExampleWidget::paintEvent(QPaintEvent *event) 0042 { 0043 QPainter painter(this); 0044 if (m_barcode) { 0045 QRect targetrect = rect(); 0046 QImage image = m_barcode->toImage(targetrect.size()); 0047 if (!image.isNull()) { 0048 QRectF rect(targetrect.left() + targetrect.width() / 2 - image.size().width() / 2, 0049 targetrect.top() + targetrect.height() / 2 - image.size().height() / 2, 0050 targetrect.size().width(), 0051 targetrect.height()); 0052 painter.drawImage(rect.topLeft(), image, image.rect()); 0053 } else { 0054 painter.fillRect(QRectF(QPointF(0, 0), size()), Qt::cyan); 0055 } 0056 } else { 0057 painter.fillRect(QRectF(QPointF(0, 0), size()), Qt::black); 0058 } 0059 QWidget::paintEvent(event); 0060 } 0061 0062 void BarcodeExampleWidget::resizeEvent(QResizeEvent *event) 0063 { 0064 updateGeometry(); 0065 repaint(); 0066 QWidget::resizeEvent(event); 0067 } 0068 0069 void BarcodeExampleWidget::mousePressEvent(QMouseEvent *event) 0070 { 0071 if (m_barcode && event->buttons() & Qt::LeftButton) { 0072 QMimeData *data = new QMimeData(); 0073 data->setImageData(m_barcode->toImage(rect().size())); 0074 QDrag *drag = new QDrag(this); 0075 drag->setMimeData(data); 0076 drag->exec(); 0077 } else { 0078 QWidget::mousePressEvent(event); 0079 } 0080 } 0081 0082 QSize BarcodeExampleWidget::minimumSizeHint() const 0083 { 0084 if (m_barcode) 0085 return m_barcode->preferredSize(QGuiApplication::primaryScreen()->devicePixelRatio()).toSize(); 0086 return QSize(10, 10); 0087 } 0088 0089 BarcodeExampleWidget::~BarcodeExampleWidget() = default;