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