From 28ea2f1c69320f00f564ce6b85983602f09aca4d Mon Sep 17 00:00:00 2001 From: Robin Stuart Date: Wed, 14 Dec 2016 23:33:17 +0000 Subject: [PATCH] Make GUI scalable --- backend_qt/qzint.cpp | 53 ++++++++++++++++++------------------- backend_qt/qzint.h | 4 +++ frontend_qt/barcodeitem.cpp | 10 ++++--- frontend_qt/barcodeitem.h | 5 +++- frontend_qt/mainWindow.ui | 51 ++++++++++------------------------- frontend_qt/mainwindow.cpp | 23 +++++++++++----- frontend_qt/mainwindow.h | 5 ++++ 7 files changed, 77 insertions(+), 74 deletions(-) diff --git a/backend_qt/qzint.cpp b/backend_qt/qzint.cpp index 98323f40..c81560fe 100644 --- a/backend_qt/qzint.cpp +++ b/backend_qt/qzint.cpp @@ -42,6 +42,8 @@ namespace Zint { m_option_3 = 0; m_hidetext = 0; m_dot_size = 4.0 / 5.0; + target_size_horiz = 0; + target_size_vert = 0; } QZint::~QZint() { @@ -115,6 +117,11 @@ namespace Zint { void QZint::setText(const QString & text) { m_text = text; } + + void QZint::setTargetSize(int width, int height) { + target_size_horiz = width; + target_size_vert = height; + } QString QZint::primaryMessage() { return m_primaryMessage; @@ -294,16 +301,20 @@ namespace Zint { } void QZint::render(QPainter & painter, const QRectF & paintRect, AspectRatioMode mode) { - encode(); bool textdone; - int comp_offset = 0, xoffset = m_whitespace, j, main_width = 0, addon_text_height = 0; + int comp_offset = 0; + int xoffset = m_whitespace; + int j, main_width = 0, addon_text_height = 0; int yoffset = 0; + + encode(); + QString caption = QString::fromUtf8((const char *) m_zintSymbol->text, -1); QFont fontSmall(fontstyle); fontSmall.setPixelSize(fontPixelSizeSmall); QFont fontLarge(fontstyle); fontLarge.setPixelSize(fontPixelSizeLarge); - + if (m_lastError.length()) { painter.setFont(fontLarge); painter.drawText(paintRect, Qt::AlignCenter, m_lastError); @@ -312,6 +323,7 @@ namespace Zint { painter.save(); painter.setClipRect(paintRect, Qt::IntersectClip); + qreal xtr = paintRect.x(); qreal ytr = paintRect.y(); @@ -334,8 +346,8 @@ namespace Zint { qreal gwidth = m_zintSymbol->width; qreal gheight = m_zintSymbol->height; if (m_zintSymbol->symbology == BARCODE_MAXICODE) { -// gheight *= (maxi_width); -// gwidth *= (maxi_width + 1); + gheight *= (maxi_width); + gwidth *= (maxi_width + 1); gwidth *= 2.0; gheight *= 2.0; } @@ -358,27 +370,14 @@ namespace Zint { textoffset = 0; } gwidth += m_zintSymbol->whitespace_width * 2; -// switch (mode) { -// case IgnoreAspectRatio: -// xsf = (qreal) paintRect.width() / gwidth; -// ysf = (qreal) paintRect.height() / gheight; -// break; -// -// case KeepAspectRatio: - if (paintRect.width() / gwidth < paintRect.height() / gheight) { - ysf = xsf = (qreal) paintRect.width() / gwidth; - ytr += (qreal) (paintRect.height() - gheight * ysf) / 2; - } else { - ysf = xsf = (qreal) paintRect.height() / gheight; - xtr += (qreal) (paintRect.width() - gwidth * xsf) / 2; - } -// break; - -// case CenterBarCode: -// xtr += ((qreal) paintRect.width() - gwidth * xsf) / 2; -// ytr += ((qreal) paintRect.height() - gheight * ysf) / 2; -// break; -// } + + if (paintRect.width() / gwidth < paintRect.height() / gheight) { + ysf = xsf = (qreal) paintRect.width() / gwidth; + ytr += (qreal) (paintRect.height() - gheight * ysf) / 2; + } else { + ysf = xsf = (qreal) paintRect.height() / gheight; + xtr += (qreal) (paintRect.width() - gwidth * xsf) / 2; + } painter.setBackground(QBrush(m_bgColor)); painter.fillRect(paintRect, QBrush(m_bgColor)); @@ -386,11 +385,11 @@ namespace Zint { painter.scale(xsf, ysf); QPen p; + p.setColor(m_fgColor); p.setWidth(m_borderWidth); painter.setPen(p); - QPainterPath pt; if (m_zintSymbol->symbology != BARCODE_MAXICODE) { /* Draw boundary bars or boxes around the symbol */ switch (m_border) { diff --git a/backend_qt/qzint.h b/backend_qt/qzint.h index 212c8945..c3192250 100644 --- a/backend_qt/qzint.h +++ b/backend_qt/qzint.h @@ -93,6 +93,8 @@ public: bool save_to_file(QString filename); void setHideText(bool hide); + + void setTargetSize(int width, int height); private: void encode(); @@ -119,6 +121,8 @@ private: int m_option_3; bool m_hidetext; float m_dot_size; + int target_size_horiz; + int target_size_vert; }; } #endif diff --git a/frontend_qt/barcodeitem.cpp b/frontend_qt/barcodeitem.cpp index 3639c2f5..9ab7cd04 100644 --- a/frontend_qt/barcodeitem.cpp +++ b/frontend_qt/barcodeitem.cpp @@ -20,15 +20,19 @@ BarcodeItem::BarcodeItem() : QGraphicsItem() { - w=550; - h=230; + w=693; + h=378; // Default widget size when created } - BarcodeItem::~BarcodeItem() { } +void BarcodeItem::setSize(int width, int height) { + w = width; + h = height; +} + QRectF BarcodeItem::boundingRect() const { return QRectF(0, 0, w, h); diff --git a/frontend_qt/barcodeitem.h b/frontend_qt/barcodeitem.h index 165e654e..3c5225b6 100644 --- a/frontend_qt/barcodeitem.h +++ b/frontend_qt/barcodeitem.h @@ -29,12 +29,15 @@ class BarcodeItem : public QGraphicsItem public: BarcodeItem(); ~BarcodeItem(); + void setSize(int width, int height); QRectF boundingRect() const; void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0); +private: + int w, h; + public: mutable Zint::QZint bc; - int w,h; Zint::QZint::AspectRatioMode ar; }; diff --git a/frontend_qt/mainWindow.ui b/frontend_qt/mainWindow.ui index f3affd47..ac697409 100644 --- a/frontend_qt/mainWindow.ui +++ b/frontend_qt/mainWindow.ui @@ -5,22 +5,24 @@ Qt::NonModal + + + 0 + 0 + 701 + 724 + + - + 0 0 - 590 - 600 - - - - - 590 - 600 + 420 + 500 @@ -41,32 +43,7 @@ - - - - 0 - 0 - - - - - 0 - 0 - - - - - 1000 - 1000 - - - - Resulting barcode shown here - - - false - - + @@ -331,8 +308,8 @@ Remember to place [square brackets] around AI data <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Your Data Here!</p></body></html> +</style></head><body style=" font-family:'Noto Sans [monotype]'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif';">Your Data Here!</span></p></body></html> false diff --git a/frontend_qt/mainwindow.cpp b/frontend_qt/mainwindow.cpp index a8f76f05..e18ec750 100644 --- a/frontend_qt/mainwindow.cpp +++ b/frontend_qt/mainwindow.cpp @@ -103,8 +103,10 @@ MainWindow::MainWindow(QWidget* parent, Qt::WindowFlags fl) /* createActions(); createMenus(); */ + scene = new QGraphicsScene(this); + setupUi(this); - view->setScene(new QGraphicsScene); + view->setScene(scene); m_fgcolor=qRgb(0,0,0); m_bgcolor=qRgb(0xff,0xff,0xff); @@ -114,8 +116,8 @@ MainWindow::MainWindow(QWidget* parent, Qt::WindowFlags fl) } bstyle->setCurrentIndex(10); change_options(); + scene->addItem(&m_bc); update_preview(); - view->scene()->addItem(&m_bc); connect(bstyle, SIGNAL(currentIndexChanged( int )), SLOT(change_options())); connect(bstyle, SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(heightb, SIGNAL(valueChanged( int )), SLOT(update_preview())); @@ -141,6 +143,12 @@ MainWindow::~MainWindow() { } +void MainWindow::resizeEvent(QResizeEvent* event) +{ + QWidget::resizeEvent(event); + update_preview(); +} + void MainWindow::reset_view() { m_fgcolor=qRgb(0,0,0); @@ -588,8 +596,10 @@ void MainWindow::maxi_primary() void MainWindow::update_preview() { - QString error; - m_bc.ar=(Zint::QZint::AspectRatioMode)1; + int width = view->geometry().width(); + int height = view->geometry().height(); + + //m_bc.ar=(Zint::QZint::AspectRatioMode)1; if(chkComposite->isChecked() == true) { m_bc.bc.setPrimaryMessage(txtData->text()); m_bc.bc.setText(txtComposite->toPlainText()); @@ -885,7 +895,8 @@ void MainWindow::update_preview() m_bc.bc.setWhitespace(spnWhitespace->value()); m_bc.bc.setFgColor(m_fgcolor); m_bc.bc.setBgColor(m_bgcolor); + m_bc.setSize(width - 10, height - 10); m_bc.update(); - view->scene()->update(); + scene->setSceneRect(0, 0, width - 10, height - 10); + scene->update(); } - diff --git a/frontend_qt/mainwindow.h b/frontend_qt/mainwindow.h index cf47695f..82af4b1c 100644 --- a/frontend_qt/mainwindow.h +++ b/frontend_qt/mainwindow.h @@ -20,6 +20,7 @@ #include #include #include +#include #include "ui_mainWindow.h" #include "barcodeitem.h" @@ -119,6 +120,9 @@ public slots: void maxi_primary(); void change_print_scale(); +protected: + void resizeEvent(QResizeEvent *event); + private slots: bool save(); void about(); @@ -134,6 +138,7 @@ private: QColor m_fgcolor,m_bgcolor; BarcodeItem m_bc; QWidget *m_optionWidget; + QGraphicsScene *scene; /* QMenu *fileMenu; QMenu *helpMenu; QAction *saveAct;