diff --git a/src/app/valentina/dialogs/dialoglayoutsettings.cpp b/src/app/valentina/dialogs/dialoglayoutsettings.cpp index 1637a3ce9..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(GetMinPrinterFields()); - 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())); } @@ -948,39 +947,13 @@ QSizeF DialogLayoutSettings::RoundTemplateSize(qreal width, qreal height) const } //--------------------------------------------------------------------------------------------------------------------- -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::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 +1131,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..4350baf55 100644 --- a/src/app/valentina/dialogs/dialoglayoutsettings.h +++ b/src/app/valentina/dialogs/dialoglayoutsettings.h @@ -158,8 +158,7 @@ private: QSizeF Template(); 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 +175,6 @@ private: void SheetSize(const QSizeF &size); void SetAdditionalOptions(bool value); - - static QMarginsF GetPrinterFields(const QSharedPointer &printer); }; #endif // DIALOGLAYOUTSETTINGS_H diff --git a/src/app/valentina/mainwindowsnogui.cpp b/src/app/valentina/mainwindowsnogui.cpp index 423d5650e..d2451958c 100644 --- a/src/app/valentina/mainwindowsnogui.cpp +++ b/src/app/valentina/mainwindowsnogui.cpp @@ -964,7 +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); +#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) { 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); 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"