diff --git a/src/Mod/TechDraw/Gui/MDIViewPage.cpp b/src/Mod/TechDraw/Gui/MDIViewPage.cpp index a69c74f9c4..19fa837df7 100644 --- a/src/Mod/TechDraw/Gui/MDIViewPage.cpp +++ b/src/Mod/TechDraw/Gui/MDIViewPage.cpp @@ -331,12 +331,12 @@ void MDIViewPage::print() QPrinter printer(QPrinter::HighResolution); printer.setFullPage(true); - if (pageAttr.pageSize() == QPageSize::Custom) { + if (pageAttr.pageSizeId() == QPageSize::Custom) { printer.setPageSize( QPageSize(QSizeF(pageAttr.pageWidth(), pageAttr.pageHeight()), QPageSize::Millimeter)); } else { - printer.setPageSize(QPageSize(pageAttr.pageSize())); + printer.setPageSize(QPageSize(pageAttr.pageSizeId())); } printer.setPageOrientation(pageAttr.orientation()); @@ -352,12 +352,12 @@ void MDIViewPage::printPreview() QPrinter printer(QPrinter::HighResolution); printer.setFullPage(true); - if (pageAttr.pageSize() == QPageSize::Custom) { + if (pageAttr.pageSizeId() == QPageSize::Custom) { printer.setPageSize( QPageSize(QSizeF(pageAttr.pageWidth(), pageAttr.pageHeight()), QPageSize::Millimeter)); } else { - printer.setPageSize(QPageSize(pageAttr.pageSize())); + printer.setPageSize(QPageSize(pageAttr.pageSizeId())); } printer.setPageOrientation(pageAttr.orientation()); @@ -402,7 +402,7 @@ void MDIViewPage::print(QPrinter* printer) return; } } - if (doPrint && psPrtSetting != pageAttr.pageSize()) { + if (doPrint && psPrtSetting != pageAttr.pageSizeId()) { int ret = QMessageBox::warning( this, tr("Different paper size"), tr("The printer uses a different paper size than the drawing.\n" diff --git a/src/Mod/TechDraw/Gui/PagePrinter.cpp b/src/Mod/TechDraw/Gui/PagePrinter.cpp index e8548f0258..9186601bd1 100644 --- a/src/Mod/TechDraw/Gui/PagePrinter.cpp +++ b/src/Mod/TechDraw/Gui/PagePrinter.cpp @@ -55,6 +55,7 @@ #include "QGSPage.h" #include "Rez.h" #include "ViewProviderPage.h" +#include "DrawGuiUtil.h" using namespace TechDrawGui; using namespace TechDraw; @@ -67,9 +68,6 @@ constexpr double mmPerInch = 25.4; /* TRANSLATOR TechDrawGui::PagePrinter */ -//TYPESYSTEM_SOURCE_ABSTRACT(TechDrawGui::PagePrinter) - - //! retrieve the attributes of a DrawPage and its Template PaperAttributes PagePrinter::getPaperAttributes(TechDraw::DrawPage* dPage) { @@ -84,23 +82,19 @@ PaperAttributes PagePrinter::getPaperAttributes(TechDraw::DrawPage* dPage) width = pageTemplate->Width.getValue(); height = pageTemplate->Height.getValue(); } - // result.m_pagewidth = width; - // result.m_pageheight = height; - - //Qt's page size determination assumes Portrait orientation. To get the right paper size - //we need to ask in the proper form. - QPageSize::PageSizeId paperSizeID = + // Qt's page size determination assumes Portrait orientation. To get the right paper size + // we need to ask in the proper form. + QPageSize::PageSizeId paperSizeId = QPageSize::id(QSizeF(std::min(width, height), std::max(width, height)), QPageSize::Millimeter, QPageSize::FuzzyOrientationMatch); - auto paperSize = paperSizeID; - auto orientation = (QPageLayout::Orientation)dPage->getOrientation(); - if (paperSize == QPageSize::Ledger) { + auto orientation = static_cast(dPage->getOrientation()); + if (paperSizeId == QPageSize::Ledger) { // Ledger size paper orientation is reversed inside Qt orientation = (QPageLayout::Orientation)(1 - orientation); } - return {orientation, paperSize, width, height}; + return {orientation, paperSizeId, width, height}; } //! retrieve the attributes of a DrawPage by its viewProvider @@ -118,8 +112,20 @@ void PagePrinter::makePageLayout(TechDraw::DrawPage* dPage, QPageLayout& pageLay PaperAttributes attr = getPaperAttributes(dPage); width = attr.pageWidth(); height = attr.pageHeight(); - pageLayout.setPageSize(QPageSize(attr.pageSize())); - pageLayout.setOrientation(attr.orientation()); + if (attr.pageSizeId() == QPageSize::Custom) { + // Qt thinks about pages in portrait orientation + QPageSize customPageSize = + QPageSize(QSizeF(std::min(width, height), std::max(width, height)), QPageSize::Millimeter); + pageLayout.setPageSize(customPageSize); + QPageLayout::Orientation orient = width >= height ? + QPageLayout::Orientation::Landscape : + QPageLayout::Orientation::Portrait; + pageLayout.setOrientation(orient); + } else { + pageLayout.setPageSize(QPageSize(attr.pageSizeId())); + pageLayout.setOrientation(attr.orientation()); + + } pageLayout.setMode(QPageLayout::FullPageMode); pageLayout.setMargins(QMarginsF()); } @@ -254,9 +260,9 @@ void PagePrinter::printBannerPage(QPrinter* printer, QPainter& painter, QPageLay QFont savePainterFont = painter.font(); QFont painterFont; painterFont.setFamily(Preferences::labelFontQString()); - int fontSizeMM = Preferences::labelFontSizeMM(); + int fontSizeMM = (int)Preferences::labelFontSizeMM(); double dpmm = printer->resolution() / mmPerInch; - int fontSizePx = fontSizeMM * dpmm; + int fontSizePx = (int)fontSizeMM * dpmm; painterFont.setPixelSize(fontSizePx); painter.setFont(painterFont); @@ -351,7 +357,6 @@ void PagePrinter::printPdf(ViewProviderPage* vpPage, const std::string& file) QPdfWriter pdfWriter(outputFile); pdfWriter.setPdfVersion(Gui::Dialog::DlgSettingsPDF::evaluatePDFVersion()); QPageLayout pageLayout = pdfWriter.pageLayout(); - auto marginsdb = pageLayout.margins(QPageLayout::Millimeter); QString documentName = QString::fromUtf8(vpPage->getDrawPage()->getNameInDocument()); pdfWriter.setTitle(documentName); // default pdfWriter dpi is 1200. @@ -361,11 +366,10 @@ void PagePrinter::printPdf(ViewProviderPage* vpPage, const std::string& file) // set up the page layout auto dPage = vpPage->getDrawPage(); - double width = A4Heightmm; // default to A4 Landscape 297 x 210 - double height = A4Widthmm; + double width = dPage->getPageWidth(); + double height = dPage->getPageHeight(); makePageLayout(dPage, pageLayout, width, height); pdfWriter.setPageLayout(pageLayout); - marginsdb = pageLayout.margins(QPageLayout::Millimeter); // first page does not respect page layout unless painter is created after // pdfWriter layout is established. @@ -438,11 +442,12 @@ void PagePrinter::savePDF(ViewProviderPage* vpPage, const std::string& file) } -PaperAttributes::PaperAttributes() +PaperAttributes::PaperAttributes() : + m_orientation(QPageLayout::Orientation::Landscape), + m_paperSizeId(QPageSize::A4), + m_pagewidth(A4Heightmm), + m_pageheight(A4Widthmm) { // set default values to A4 Landscape - m_orientation = QPageLayout::Orientation::Landscape; - m_paperSize = QPageSize::A4; - m_pagewidth = A4Heightmm; - m_pageheight = A4Widthmm; } + diff --git a/src/Mod/TechDraw/Gui/PagePrinter.h b/src/Mod/TechDraw/Gui/PagePrinter.h index 19ff8a7288..2575ee8d34 100644 --- a/src/Mod/TechDraw/Gui/PagePrinter.h +++ b/src/Mod/TechDraw/Gui/PagePrinter.h @@ -52,11 +52,11 @@ class TechDrawGuiExport PaperAttributes public: PaperAttributes(); PaperAttributes(QPageLayout::Orientation orientation, - QPageSize::PageSizeId paperSize, + QPageSize::PageSizeId paperSizeId, double pageWidth, double pageHeight) : m_orientation(orientation) - , m_paperSize(paperSize) + , m_paperSizeId(paperSizeId) , m_pagewidth(pageWidth) , m_pageheight(pageHeight) {} @@ -65,9 +65,9 @@ public: { return m_orientation; } - QPageSize::PageSizeId pageSize() const + QPageSize::PageSizeId pageSizeId() const { - return m_paperSize; + return m_paperSizeId; } double pageWidth() const { @@ -80,7 +80,7 @@ public: private: QPageLayout::Orientation m_orientation; - QPageSize::PageSizeId m_paperSize; + QPageSize::PageSizeId m_paperSizeId; double m_pagewidth; double m_pageheight; };