From d68fcb8cc580a1a18abfc1332b7eee4f84021242 Mon Sep 17 00:00:00 2001 From: wandererfan Date: Mon, 3 Feb 2020 20:25:26 -0500 Subject: [PATCH] [TD]Fix rich text size/position in Svg export - still an issue with line spacing --- src/Mod/TechDraw/Gui/QGIRichAnno.cpp | 112 +++++++++++++++------------ src/Mod/TechDraw/Gui/QGIRichAnno.h | 5 ++ src/Mod/TechDraw/Gui/QGVPage.cpp | 4 + 3 files changed, 71 insertions(+), 50 deletions(-) diff --git a/src/Mod/TechDraw/Gui/QGIRichAnno.cpp b/src/Mod/TechDraw/Gui/QGIRichAnno.cpp index 38ae7b1c9bb0..b54ad551faec 100644 --- a/src/Mod/TechDraw/Gui/QGIRichAnno.cpp +++ b/src/Mod/TechDraw/Gui/QGIRichAnno.cpp @@ -22,23 +22,26 @@ #include "PreCompiled.h" #ifndef _PreComp_ - #include - #include - # include - # include - # include - # include - # include - - # include - # include - # include - # include - # include - # include - #include - - # include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +# include #endif #include @@ -77,7 +80,8 @@ using namespace TechDrawGui; //************************************************************** QGIRichAnno::QGIRichAnno(QGraphicsItem* myParent, - TechDraw::DrawRichAnno* anno) + TechDraw::DrawRichAnno* anno) : + m_isExporting(false) { setHandlesChildEvents(false); setAcceptHoverEvents(false); @@ -192,41 +196,49 @@ void QGIRichAnno::setTextItem() { // Base::Console().Message("QGIRA::setTextItem() - %s\n",getViewName()); TechDraw::DrawRichAnno* annoFeat = getFeature(); - - //convert point font sizes to (Rez,mm) font sizes - QRegExp rxFontSize(QString::fromUtf8("font-size:([0-9]*)pt;")); QString inHtml = QString::fromUtf8(annoFeat->AnnoText.getValue()); - QString match; - double mmPerPoint = 0.353; - double sizeConvert = Rez::getRezFactor() * mmPerPoint; - int pos = 0; - QStringList findList; - QStringList replList; - while ((pos = rxFontSize.indexIn(inHtml, pos)) != -1) { - QString found = rxFontSize.cap(0); - findList << found; - QString qsOldSize = rxFontSize.cap(1); - - QString repl = found; - double newSize = qsOldSize.toDouble(); - newSize = newSize * sizeConvert; - QString qsNewSize = QString::number(newSize, 'f', 2); - repl.replace(qsOldSize,qsNewSize); - replList << repl; - pos += rxFontSize.matchedLength(); - } - QString outHtml = inHtml; - int iRepl = 0; - //TODO: check list for duplicates? - for ( ; iRepl < findList.size(); iRepl++) { - outHtml = outHtml.replace(findList[iRepl], replList[iRepl]); - } - m_text->setHtml(outHtml); - - m_text->setTextWidth(Rez::guiX(annoFeat->MaxWidth.getValue())); + //don't do this multiplication if exporting to SVG as other apps interpret + //font sizes differently from QGraphicsTextItem (?) + if (!getExporting()) { + //convert point font sizes to (Rez,mm) font sizes + QRegExp rxFontSize(QString::fromUtf8("font-size:([0-9]*)pt;")); + QString match; + double mmPerPoint = 0.353; + double sizeConvert = Rez::getRezFactor() * mmPerPoint; + int pos = 0; + QStringList findList; + QStringList replList; + while ((pos = rxFontSize.indexIn(inHtml, pos)) != -1) { + QString found = rxFontSize.cap(0); + findList << found; + QString qsOldSize = rxFontSize.cap(1); + + QString repl = found; + double newSize = qsOldSize.toDouble(); + newSize = newSize * sizeConvert; + QString qsNewSize = QString::number(newSize, 'f', 2); + repl.replace(qsOldSize,qsNewSize); + replList << repl; + pos += rxFontSize.matchedLength(); + } + QString outHtml = inHtml; + int iRepl = 0; + //TODO: check list for duplicates? + for ( ; iRepl < findList.size(); iRepl++) { + outHtml = outHtml.replace(findList[iRepl], replList[iRepl]); + } + + m_text->setTextWidth(Rez::guiX(annoFeat->MaxWidth.getValue())); + m_text->setHtml(outHtml); + } else { + //TODO: fix line spacing. common solutions (style sheet, + // QTextBlock::setLineHeight(150, QTextBlockFormat::ProportionalHeight)) don't help + double realWidth = m_text->boundingRect().width(); + m_text->setTextWidth(realWidth); + m_text->setHtml(inHtml); + } -// m_text->showBox(annoFeat->ShowFrame.getValue()); if (annoFeat->ShowFrame.getValue()) { QRectF r = m_text->boundingRect().adjusted(1,1,-1,-1); m_rect->setPen(rectPen()); diff --git a/src/Mod/TechDraw/Gui/QGIRichAnno.h b/src/Mod/TechDraw/Gui/QGIRichAnno.h index fc2b0f20ba66..9d074338c293 100644 --- a/src/Mod/TechDraw/Gui/QGIRichAnno.h +++ b/src/Mod/TechDraw/Gui/QGIRichAnno.h @@ -80,6 +80,9 @@ class TechDrawGuiExport QGIRichAnno : public QGIView virtual TechDraw::DrawRichAnno* getFeature(void); QPen rectPen() const; + void setExporting(bool b) { m_isExporting = b; } + bool getExporting(void) { return m_isExporting; } + public Q_SLOTS: /* void textDragging(void);*/ @@ -92,6 +95,8 @@ public Q_SLOTS: virtual QVariant itemChange( GraphicsItemChange change, const QVariant &value ) override; + bool m_isExporting; + protected: /* QGMText* m_text;*/ QGCustomText* m_text; diff --git a/src/Mod/TechDraw/Gui/QGVPage.cpp b/src/Mod/TechDraw/Gui/QGVPage.cpp index 4106c3c0fc4d..9ca683f90f6d 100644 --- a/src/Mod/TechDraw/Gui/QGVPage.cpp +++ b/src/Mod/TechDraw/Gui/QGVPage.cpp @@ -763,9 +763,13 @@ void QGVPage::setExporting(bool enable) QList sceneItems = scene()->items(); for (auto& qgi:sceneItems) { QGIViewPart* qgiPart = dynamic_cast(qgi); + QGIRichAnno* qgiRTA = dynamic_cast(qgi); if(qgiPart) { qgiPart->setExporting(enable); } + if (qgiRTA) { + qgiRTA->setExporting(enable); + } } }