From 4e06414552d0cd6fb2106769440978c04f90e453 Mon Sep 17 00:00:00 2001 From: Aapo Date: Sat, 28 Nov 2020 02:03:37 +0200 Subject: [PATCH] [TD] Add comments and more transparent tolerance position adjustment calculation. --- src/Mod/TechDraw/Gui/QGCustomText.cpp | 11 +++++++++++ src/Mod/TechDraw/Gui/QGCustomText.h | 3 ++- src/Mod/TechDraw/Gui/QGIViewDimension.cpp | 8 +++++--- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/Mod/TechDraw/Gui/QGCustomText.cpp b/src/Mod/TechDraw/Gui/QGCustomText.cpp index 78ba50285a..42328402d4 100644 --- a/src/Mod/TechDraw/Gui/QGCustomText.cpp +++ b/src/Mod/TechDraw/Gui/QGCustomText.cpp @@ -210,11 +210,22 @@ QRectF QGCustomText::tightBoundingRect() const qreal x_adj = (result.width() - tight.width())/4.0; qreal y_adj = (result.height() - tight.height())/4.0; + // Adjust the bounding box 50% towards the Qt tightBoundingRect(), + // except chomp some extra empty space above the font (2*y_adj) result.adjust(x_adj, 2*y_adj, -x_adj, -y_adj); return result; } +// Calculate the amount of difference between tight and relaxed bounding boxes +QPointF QGCustomText::tightBoundingAdjust() const +{ + QRectF original = QGraphicsTextItem::boundingRect(); + QRectF tight = tightBoundingRect(); + + return QPointF(tight.x()-original.x(), tight.y()-original.y()); +} + QColor QGCustomText::getNormalColor() //preference! { return PreferencesGui::normalQColor(); diff --git a/src/Mod/TechDraw/Gui/QGCustomText.h b/src/Mod/TechDraw/Gui/QGCustomText.h index 8834d200d5..debd0dee88 100644 --- a/src/Mod/TechDraw/Gui/QGCustomText.h +++ b/src/Mod/TechDraw/Gui/QGCustomText.h @@ -49,6 +49,7 @@ public: virtual void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0 ); virtual QRectF boundingRect() const override; QRectF tightBoundingRect() const; + QPointF tightBoundingAdjust() const; void setHighlighted(bool state); virtual void setPrettyNormal(); @@ -83,7 +84,7 @@ protected: Base::Reference getParmGroup(void); bool isHighlighted; - bool tightBounding; + bool tightBounding; // Option to use tighter boundingRect(), works only for plaintext QGCustomText QColor m_colCurrent; QColor m_colNormal; diff --git a/src/Mod/TechDraw/Gui/QGIViewDimension.cpp b/src/Mod/TechDraw/Gui/QGIViewDimension.cpp index d27ac52395..8de9711f98 100644 --- a/src/Mod/TechDraw/Gui/QGIViewDimension.cpp +++ b/src/Mod/TechDraw/Gui/QGIViewDimension.cpp @@ -270,9 +270,11 @@ void QGIDatumLabel::setPosFromCenter(const double &xCenter, const double &yCente } double tolRight = unitRight + width; - m_tolTextOver->justifyRightAt(tolRight, middle - overBox.height() + underBox.height()/4, false); - m_tolTextUnder->justifyRightAt(tolRight, middle + underBox.height()/4, false); - + // Adjust for difference in tight and original bounding box sizes, note the y-coord down system + QPointF tol_adj = m_tolTextOver->tightBoundingAdjust(); + m_tolTextOver->justifyRightAt(tolRight + tol_adj.x(), middle - tol_adj.y(), false); + tol_adj = m_tolTextUnder->tightBoundingAdjust(); + m_tolTextUnder->justifyRightAt(tolRight + tol_adj.x(), middle + overBox.height() - tol_adj.y(), false); } void QGIDatumLabel::setLabelCenter()