From 593bae3969b720161d11670fc52442028faec542 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Thu, 6 Oct 2016 19:12:25 +0300 Subject: [PATCH 1/4] Fixed build on Windows. --HG-- branch : develop --- src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.h | 1 - src/libs/vtools/tools/vabstracttool.h | 4 ++-- src/libs/vtools/visualization/line/visline.h | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.h b/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.h index cabef4603..342d766fb 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.h +++ b/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.h @@ -42,7 +42,6 @@ #include #include -#include "../../../visualization/visualization.h" #include "../../../visualization/line/visline.h" #include "../vdrawtool.h" #include "../vgeometry/vabstractcurve.h" diff --git a/src/libs/vtools/tools/vabstracttool.h b/src/libs/vtools/tools/vabstracttool.h index 35aa07daa..b445c9ff9 100644 --- a/src/libs/vtools/tools/vabstracttool.h +++ b/src/libs/vtools/tools/vabstracttool.h @@ -40,9 +40,9 @@ #include "../ifc/xml/vabstractpattern.h" #include "../ifc/xml/vabstractpattern.h" -#include "../visualization/visualization.h" +#include "../vtools/visualization/visualization.h" #include "../vmisc/vabstractapplication.h" -#include "../vwidgets/../vmisc/def.h" +#include "../vmisc/def.h" #include "../vwidgets/vmaingraphicsscene.h" #include "vdatatool.h" diff --git a/src/libs/vtools/visualization/line/visline.h b/src/libs/vtools/visualization/line/visline.h index a604766cc..4bf49b1dd 100644 --- a/src/libs/vtools/visualization/line/visline.h +++ b/src/libs/vtools/visualization/line/visline.h @@ -41,7 +41,7 @@ #include #include -#include "../visualization.h" +#include "../vtools/visualization/visualization.h" #include "../vmisc/def.h" From 9da0b5cab51a35058cae40cfce746cc7a45f5fab Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Thu, 6 Oct 2016 19:13:06 +0300 Subject: [PATCH 2/4] Refactoring methods GetMinPrinterFields and GetPrinterFields. --HG-- branch : develop --- .../dialogs/dialoglayoutsettings.cpp | 43 ++---------------- .../valentina/dialogs/dialoglayoutsettings.h | 4 +- src/libs/vmisc/def.cpp | 44 +++++++++++++++++++ src/libs/vmisc/def.h | 4 ++ 4 files changed, 52 insertions(+), 43 deletions(-) diff --git a/src/app/valentina/dialogs/dialoglayoutsettings.cpp b/src/app/valentina/dialogs/dialoglayoutsettings.cpp index 1637a3ce9..6cb62b425 100644 --- a/src/app/valentina/dialogs/dialoglayoutsettings.cpp +++ b/src/app/valentina/dialogs/dialoglayoutsettings.cpp @@ -583,7 +583,7 @@ void DialogLayoutSettings::DialogAccepted() } else { - const QMarginsF minFields = RoundMargins(GetMinPrinterFields()); + const QMarginsF minFields = RoundMargins(MinPrinterFields()); const QMarginsF fields = RoundMargins(GetFields()); if (fields.left() < minFields.left() || fields.right() < minFields.right() || fields.top() < minFields.top() || fields.bottom() < minFields.bottom()) @@ -959,28 +959,13 @@ QMarginsF DialogLayoutSettings::RoundMargins(const QMarginsF &margins) const } //--------------------------------------------------------------------------------------------------------------------- -QMarginsF DialogLayoutSettings::GetMinPrinterFields() const +QMarginsF DialogLayoutSettings::MinPrinterFields() const { QPrinterInfo printer = QPrinterInfo::printerInfo(ui->comboBoxPrinter->currentText()); if (not printer.isNull()) { QSharedPointer pr = QSharedPointer(new QPrinter(printer)); -#if QT_VERSION >= QT_VERSION_CHECK(5, 3, 0) - QPageLayout layout = pr->pageLayout(); - layout.setUnits(QPageLayout::Millimeter); - const QMarginsF minMargins = layout.minimumMargins(); - - QMarginsF min; - min.setLeft(UnitConvertor(minMargins.left(), Unit::Mm, Unit::Px)); - min.setRight(UnitConvertor(minMargins.right(), Unit::Mm, Unit::Px)); - min.setTop(UnitConvertor(minMargins.top(), Unit::Mm, Unit::Px)); - min.setBottom(UnitConvertor(minMargins.bottom(), Unit::Mm, Unit::Px)); - return min; -#else - pr->setFullPage(false); - pr->setPageMargins(0, 0, 0, 0, QPrinter::Millimeter); - return GetPrinterFields(QSharedPointer(new QPrinter(printer))); -#endif //QT_VERSION >= QT_VERSION_CHECK(5, 3, 0) + return GetMinPrinterFields(pr); } else { @@ -1158,25 +1143,3 @@ void DialogLayoutSettings::SetAdditionalOptions(bool value) SetUnitePages(value); SetStripOptimization(value); } - -//--------------------------------------------------------------------------------------------------------------------- -QMarginsF DialogLayoutSettings::GetPrinterFields(const QSharedPointer &printer) -{ - if (printer.isNull()) - { - return QMarginsF(); - } - - qreal left = 0; - qreal top = 0; - qreal right = 0; - qreal bottom = 0; - printer->getPageMargins(&left, &top, &right, &bottom, QPrinter::Millimeter); - // We can't use Unit::Px because our dpi in most cases is different - QMarginsF def; - def.setLeft(UnitConvertor(left, Unit::Mm, Unit::Px)); - def.setRight(UnitConvertor(right, Unit::Mm, Unit::Px)); - def.setTop(UnitConvertor(top, Unit::Mm, Unit::Px)); - def.setBottom(UnitConvertor(bottom, Unit::Mm, Unit::Px)); - return def; -} diff --git a/src/app/valentina/dialogs/dialoglayoutsettings.h b/src/app/valentina/dialogs/dialoglayoutsettings.h index 69f26e2a8..0a2115d86 100644 --- a/src/app/valentina/dialogs/dialoglayoutsettings.h +++ b/src/app/valentina/dialogs/dialoglayoutsettings.h @@ -159,7 +159,7 @@ private: QSizeF TemplateSize(const PaperSizeTemplate &tmpl) const; QSizeF RoundTemplateSize(qreal width, qreal height) const; QMarginsF RoundMargins(const QMarginsF &margins) const; - QMarginsF GetMinPrinterFields() const; + QMarginsF MinPrinterFields() const; QMarginsF GetDefPrinterFields() const; Unit PaperUnit() const; @@ -176,8 +176,6 @@ private: void SheetSize(const QSizeF &size); void SetAdditionalOptions(bool value); - - static QMarginsF GetPrinterFields(const QSharedPointer &printer); }; #endif // DIALOGLAYOUTSETTINGS_H diff --git a/src/libs/vmisc/def.cpp b/src/libs/vmisc/def.cpp index 9aeb2904a..af7e43258 100644 --- a/src/libs/vmisc/def.cpp +++ b/src/libs/vmisc/def.cpp @@ -1849,6 +1849,50 @@ QSharedPointer PreparePrinter(const QPrinterInfo &info, QPrinter::Prin return printer; } +//--------------------------------------------------------------------------------------------------------------------- +QMarginsF GetMinPrinterFields(const QSharedPointer &printer) +{ +#if QT_VERSION >= QT_VERSION_CHECK(5, 3, 0) + QPageLayout layout = printer->pageLayout(); + layout.setUnits(QPageLayout::Millimeter); + const QMarginsF minMargins = layout.minimumMargins(); + + QMarginsF min; + min.setLeft(UnitConvertor(minMargins.left(), Unit::Mm, Unit::Px)); + min.setRight(UnitConvertor(minMargins.right(), Unit::Mm, Unit::Px)); + min.setTop(UnitConvertor(minMargins.top(), Unit::Mm, Unit::Px)); + min.setBottom(UnitConvertor(minMargins.bottom(), Unit::Mm, Unit::Px)); + return min; +#else + auto tempPrinter = QSharedPointer(new QPrinter(QPrinterInfo(* printer))); + tempPrinter->setFullPage(false); + tempPrinter->setPageMargins(0, 0, 0, 0, QPrinter::Millimeter); + return GetPrinterFields(tempPrinter); +#endif //QT_VERSION >= QT_VERSION_CHECK(5, 3, 0) +} + +//--------------------------------------------------------------------------------------------------------------------- +QMarginsF GetPrinterFields(const QSharedPointer &printer) +{ + if (printer.isNull()) + { + return QMarginsF(); + } + + qreal left = 0; + qreal top = 0; + qreal right = 0; + qreal bottom = 0; + printer->getPageMargins(&left, &top, &right, &bottom, QPrinter::Millimeter); + // We can't use Unit::Px because our dpi in most cases is different + QMarginsF def; + def.setLeft(UnitConvertor(left, Unit::Mm, Unit::Px)); + def.setRight(UnitConvertor(right, Unit::Mm, Unit::Px)); + def.setTop(UnitConvertor(top, Unit::Mm, Unit::Px)); + def.setBottom(UnitConvertor(bottom, Unit::Mm, Unit::Px)); + return def; +} + //--------------------------------------------------------------------------------------------------------------------- QPixmap darkenPixmap(const QPixmap &pixmap) { diff --git a/src/libs/vmisc/def.h b/src/libs/vmisc/def.h index 1cab5c9c9..e75f431ef 100644 --- a/src/libs/vmisc/def.h +++ b/src/libs/vmisc/def.h @@ -50,6 +50,7 @@ template class QSharedPointer; #endif /* Q_CC_MSVC */ class QComboBox; +class QMarginsF; #define SceneSize 50000 #define DefPointRadius 1.5//mm @@ -634,6 +635,9 @@ QString AbsoluteMPath(const QString &patternPath, const QString &relativeMPath) QSharedPointer PreparePrinter(const QPrinterInfo &info, QPrinter::PrinterMode mode = QPrinter::ScreenResolution) Q_REQUIRED_RESULT; +QMarginsF GetMinPrinterFields(const QSharedPointer &printer); +QMarginsF GetPrinterFields(const QSharedPointer &printer); + QPixmap darkenPixmap(const QPixmap &pixmap) Q_REQUIRED_RESULT; void ShowInGraphicalShell(const QString &filePath); From 27767e46e2eef4f32ec89b96e0d6ccb1e1542854 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Thu, 6 Oct 2016 19:28:58 +0300 Subject: [PATCH 3/4] Warn about invalid margins. ref #570. --HG-- branch : develop --- .../dialogs/dialoglayoutsettings.cpp | 32 ++++++------------- .../valentina/dialogs/dialoglayoutsettings.h | 1 - src/app/valentina/mainwindowsnogui.cpp | 7 +++- 3 files changed, 16 insertions(+), 24 deletions(-) diff --git a/src/app/valentina/dialogs/dialoglayoutsettings.cpp b/src/app/valentina/dialogs/dialoglayoutsettings.cpp index 6cb62b425..b44bb2be4 100644 --- a/src/app/valentina/dialogs/dialoglayoutsettings.cpp +++ b/src/app/valentina/dialogs/dialoglayoutsettings.cpp @@ -583,8 +583,8 @@ void DialogLayoutSettings::DialogAccepted() } else { - const QMarginsF minFields = RoundMargins(MinPrinterFields()); - const QMarginsF fields = RoundMargins(GetFields()); + const QMarginsF minFields = MinPrinterFields(); + const QMarginsF fields = GetFields(); if (fields.left() < minFields.left() || fields.right() < minFields.right() || fields.top() < minFields.top() || fields.bottom() < minFields.bottom()) { @@ -594,25 +594,24 @@ void DialogLayoutSettings::DialogAccepted() QMessageBox::Yes|QMessageBox::No, QMessageBox::No); if (answer == QMessageBox::No) { - const QMarginsF defFields = RoundMargins(GetDefPrinterFields()); - if (fields.left() < defFields.left()) + if (fields.left() < minFields.left()) { - ui->doubleSpinBoxLeftField->setValue(UnitConvertor(defFields.left(), Unit::Px, LayoutUnit())); + ui->doubleSpinBoxLeftField->setValue(UnitConvertor(minFields.left(), Unit::Px, LayoutUnit())); } - if (fields.right() < defFields.right()) + if (fields.right() < minFields.right()) { - ui->doubleSpinBoxRightField->setValue(UnitConvertor(defFields.right(), Unit::Px, LayoutUnit())); + ui->doubleSpinBoxRightField->setValue(UnitConvertor(minFields.right(), Unit::Px, LayoutUnit())); } - if (fields.top() < defFields.top()) + if (fields.top() < minFields.top()) { - ui->doubleSpinBoxTopField->setValue(UnitConvertor(defFields.top(), Unit::Px, LayoutUnit())); + ui->doubleSpinBoxTopField->setValue(UnitConvertor(minFields.top(), Unit::Px, LayoutUnit())); } - if (fields.bottom() < defFields.bottom()) + if (fields.bottom() < minFields.bottom()) { - ui->doubleSpinBoxBottomField->setValue(UnitConvertor(defFields.bottom(), Unit::Px, + ui->doubleSpinBoxBottomField->setValue(UnitConvertor(minFields.bottom(), Unit::Px, LayoutUnit())); } @@ -947,17 +946,6 @@ QSizeF DialogLayoutSettings::RoundTemplateSize(qreal width, qreal height) const return QSizeF(width, height); } -//--------------------------------------------------------------------------------------------------------------------- -QMarginsF DialogLayoutSettings::RoundMargins(const QMarginsF &margins) const -{ - QMarginsF newMargins; - newMargins.setLeft(qRound(margins.left() * 100.0) / 100.0); - newMargins.setRight(qRound(margins.right() * 100.0) / 100.0); - newMargins.setTop(qRound(margins.top() * 100.0) / 100.0); - newMargins.setBottom(qRound(margins.bottom() * 100.0) / 100.0); - return newMargins; -} - //--------------------------------------------------------------------------------------------------------------------- QMarginsF DialogLayoutSettings::MinPrinterFields() const { diff --git a/src/app/valentina/dialogs/dialoglayoutsettings.h b/src/app/valentina/dialogs/dialoglayoutsettings.h index 0a2115d86..4350baf55 100644 --- a/src/app/valentina/dialogs/dialoglayoutsettings.h +++ b/src/app/valentina/dialogs/dialoglayoutsettings.h @@ -158,7 +158,6 @@ private: QSizeF Template(); QSizeF TemplateSize(const PaperSizeTemplate &tmpl) const; QSizeF RoundTemplateSize(qreal width, qreal height) const; - QMarginsF RoundMargins(const QMarginsF &margins) const; QMarginsF MinPrinterFields() const; QMarginsF GetDefPrinterFields() const; diff --git a/src/app/valentina/mainwindowsnogui.cpp b/src/app/valentina/mainwindowsnogui.cpp index 423d5650e..b5ac49e0b 100644 --- a/src/app/valentina/mainwindowsnogui.cpp +++ b/src/app/valentina/mainwindowsnogui.cpp @@ -964,7 +964,12 @@ void MainWindowsNoGUI::SetPrinterSettings(QPrinter *printer, const PrintType &pr const qreal top = FromPixel(margins.top(), Unit::Mm); const qreal right = FromPixel(margins.right(), Unit::Mm); const qreal bottom = FromPixel(margins.bottom(), Unit::Mm); - printer->setPageMargins(left, top, right, bottom, QPrinter::Millimeter); + const bool success = printer->setPageMargins(left, top, right, bottom, QPrinter::Millimeter); + + if (not success) + { + qWarning() << tr("Cannot set printer margins"); + } switch(printType) { From 8d455952f89719821ee92d1f768a6a5c6fe66053 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Thu, 6 Oct 2016 19:42:13 +0300 Subject: [PATCH 4/4] The warning is accessible only if build with Qt 5.3. ref #570. --HG-- branch : develop --- src/app/valentina/mainwindowsnogui.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/app/valentina/mainwindowsnogui.cpp b/src/app/valentina/mainwindowsnogui.cpp index b5ac49e0b..d2451958c 100644 --- a/src/app/valentina/mainwindowsnogui.cpp +++ b/src/app/valentina/mainwindowsnogui.cpp @@ -964,12 +964,16 @@ void MainWindowsNoGUI::SetPrinterSettings(QPrinter *printer, const PrintType &pr const qreal top = FromPixel(margins.top(), Unit::Mm); const qreal right = FromPixel(margins.right(), Unit::Mm); const qreal bottom = FromPixel(margins.bottom(), Unit::Mm); - const bool success = printer->setPageMargins(left, top, right, bottom, QPrinter::Millimeter); +#if QT_VERSION >= QT_VERSION_CHECK(5, 3, 0) + const bool success = printer->setPageMargins(QMarginsF(left, top, right, bottom), QPageLayout::Millimeter); if (not success) { qWarning() << tr("Cannot set printer margins"); } +#else + printer->setPageMargins(left, top, right, bottom, QPrinter::Millimeter); +#endif //QT_VERSION >= QT_VERSION_CHECK(5, 3, 0) switch(printType) {