From 04e2d631bb67c3c0f3ee4570a9136ef57dcd09b3 Mon Sep 17 00:00:00 2001 From: wandererfan Date: Sun, 7 Dec 2025 13:35:05 -0500 Subject: [PATCH] [TD]fix tearing of page edges --- src/Mod/TechDraw/Gui/QGISVGTemplate.cpp | 38 +++++++++++++++++++++++-- src/Mod/TechDraw/Gui/QGISVGTemplate.h | 6 +++- src/Mod/TechDraw/Gui/QGVPage.cpp | 18 ------------ 3 files changed, 41 insertions(+), 21 deletions(-) diff --git a/src/Mod/TechDraw/Gui/QGISVGTemplate.cpp b/src/Mod/TechDraw/Gui/QGISVGTemplate.cpp index 9f795652e1..813005df0f 100644 --- a/src/Mod/TechDraw/Gui/QGISVGTemplate.cpp +++ b/src/Mod/TechDraw/Gui/QGISVGTemplate.cpp @@ -36,6 +36,8 @@ #include #include +#include +// #include #include #include @@ -147,8 +149,12 @@ using namespace TechDraw; QGISVGTemplate::QGISVGTemplate(QGSPage* scene) : QGITemplate(scene), m_svgItem(new QGraphicsSvgItem(this)), - m_svgRender(new QSvgRenderer()) + m_svgRender(new QSvgRenderer()), + m_pageRectangle(new QGraphicsRectItem(this)) { + m_pageRectangle->setZValue(ZVALUE::BACKGROUND); + + m_svgItem->setSharedRenderer(m_svgRender); m_svgItem->setFlags(QGraphicsItem::ItemClipsToShape); @@ -166,6 +172,7 @@ void QGISVGTemplate::openFile(const QFile& file) { Q_UNUSED(file); } void QGISVGTemplate::load(QByteArray svgCode) { + prepareGeometryChange(); applyWorkaround(svgCode); m_svgRender->load(svgCode); @@ -198,7 +205,7 @@ void QGISVGTemplate::load(QByteArray svgCode) } } -TechDraw::DrawSVGTemplate* QGISVGTemplate::getSVGTemplate() +TechDraw::DrawSVGTemplate* QGISVGTemplate::getSVGTemplate() const { if (pageTemplate && pageTemplate->isDerivedFrom()) { return static_cast(pageTemplate); @@ -213,10 +220,36 @@ void QGISVGTemplate::draw() if (!tmplte) { throw Base::RuntimeError("Template Feature not set for QGISVGTemplate"); } + + drawPageRectangle(); + QString templateSvg = tmplte->processTemplate(); load(templateSvg.toUtf8()); } +void QGISVGTemplate::drawPageRectangle() +{ + // Draw the white page + // Default to A3 landscape, though this is currently relevant + // only for opening corrupt docs, etc. + constexpr double PageWidthDefault{420.0}; + double pageWidth{PageWidthDefault}; + constexpr double PageHeightDefault{297.0}; + double pageHeight{PageHeightDefault}; + + DrawTemplate* ourTemplate = getTemplate(); + DrawPage* ourPage = ourTemplate ? ourTemplate->getParentPage() : nullptr; + if (ourTemplate && ourPage) { + pageWidth = Rez::guiX(ourPage->getPageWidth()); + pageHeight = Rez::guiX(ourPage->getPageHeight()); + } + QRectF paperRect(0, -pageHeight, pageWidth, pageHeight); + QBrush pageBrush(PreferencesGui::pageQColor()); + m_pageRectangle->setRect(paperRect); + m_pageRectangle->setBrush(pageBrush); +} + + void QGISVGTemplate::updateView(bool update) { if (update) { @@ -343,4 +376,5 @@ void QGISVGTemplate::createClickHandles() } } + #include diff --git a/src/Mod/TechDraw/Gui/QGISVGTemplate.h b/src/Mod/TechDraw/Gui/QGISVGTemplate.h index 8b2527cd06..b42526d6ba 100644 --- a/src/Mod/TechDraw/Gui/QGISVGTemplate.h +++ b/src/Mod/TechDraw/Gui/QGISVGTemplate.h @@ -55,9 +55,11 @@ public: int type() const override { return Type; } void draw() override; + void drawPageRectangle(); + void updateView(bool update = false) override; - TechDraw::DrawSVGTemplate* getSVGTemplate(); + TechDraw::DrawSVGTemplate* getSVGTemplate() const; std::vector getTextFields() override; protected: @@ -70,6 +72,8 @@ protected: private: QGraphicsSvgItem* m_svgItem; QSvgRenderer* m_svgRender; + QGraphicsRectItem* m_pageRectangle; + };// class QGISVGTemplate }// namespace TechDrawGui diff --git a/src/Mod/TechDraw/Gui/QGVPage.cpp b/src/Mod/TechDraw/Gui/QGVPage.cpp index a421783c27..7188fd7179 100644 --- a/src/Mod/TechDraw/Gui/QGVPage.cpp +++ b/src/Mod/TechDraw/Gui/QGVPage.cpp @@ -310,24 +310,6 @@ void QGVPage::drawBackground(QPainter* painter, const QRectF&) painter->drawRect( viewport()->rect().adjusted(-2, -2, 2, 2));//just bigger than viewport to prevent artifacts - // Default to A3 landscape, though this is currently relevant - // only for opening corrupt docs, etc. - float pageWidth = 420, pageHeight = 297; - - if (m_vpPage->getDrawPage()->hasValidTemplate()) { - pageWidth = Rez::guiX(m_vpPage->getDrawPage()->getPageWidth()); - pageHeight = Rez::guiX(m_vpPage->getDrawPage()->getPageHeight()); - } - - // Draw the white page - QRectF paperRect(0, -pageHeight, pageWidth, pageHeight); - QPolygon poly = mapFromScene(paperRect); - - QBrush pageBrush(PreferencesGui::pageQColor()); - painter->setBrush(pageBrush); - - painter->drawRect(poly.boundingRect()); - painter->restore(); }