Author: jghali
Date: Wed Apr 22 00:06:12 2020
New Revision: 23639

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=23639
Log:
Fix some precision issues with PageItem::getRedrawBounding()

Modified:
    trunk/Scribus/scribus/pageitem.cpp

Modified: trunk/Scribus/scribus/pageitem.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23639&path=/trunk/Scribus/scribus/pageitem.cpp
==============================================================================
--- trunk/Scribus/scribus/pageitem.cpp  (original)
+++ trunk/Scribus/scribus/pageitem.cpp  Wed Apr 22 00:06:12 2020
@@ -9958,17 +9958,26 @@
 
 QRect PageItem::getRedrawBounding(double viewScale) const
 {
-       int x = qRound(floor(BoundingX - m_oldLineWidth / 2.0 - 5) * viewScale);
-       int y = qRound(floor(BoundingY - m_oldLineWidth / 2.0 - 5) * viewScale);
-       int w = qRound(ceil(BoundingW + m_oldLineWidth + 10) * viewScale);
-       int h = qRound(ceil(BoundingH + m_oldLineWidth + 10) * viewScale);
-       QRect ret = QRect(0, 0, w - x, h - y);
+       double maxLineWidth = qMax(m_lineWidth, m_oldLineWidth);
+       QRectF boundingRect(-maxLineWidth / 2.0 - 5 / viewScale,
+                           -maxLineWidth / 2.0 - 5 / viewScale,
+                           BoundingW + maxLineWidth + 10 / viewScale,
+                           BoundingH + maxLineWidth + 10 / viewScale);
        QTransform t = getTransform();
-       ret = t.mapRect(ret);
-       ret.translate(qRound(-m_Doc->minCanvasCoordinate.x() * viewScale), 
qRound(-m_Doc->minCanvasCoordinate.y() * viewScale));
-       return ret;
-}
-
+       boundingRect = t.mapRect(boundingRect);
+
+       QRectF redrawBoundingF((boundingRect.x() - 
m_Doc->minCanvasCoordinate.x()) * viewScale,
+                              (boundingRect.y() - 
m_Doc->minCanvasCoordinate.y()) * viewScale,
+                               boundingRect.width() * viewScale,
+                               boundingRect.height() * viewScale);
+       redrawBoundingF = redrawBoundingF.normalized();
+
+       int x = floor(redrawBoundingF.left());
+       int y = floor(redrawBoundingF.top());
+       int w = ceil(redrawBoundingF.right()) - x;
+       int h = ceil(redrawBoundingF.bottom()) - y;
+       return QRect(x, y, w, h);
+}
 
 void PageItem::setRedrawBounding()
 {


_______________________________________________
scribus-commit mailing list
[email protected]
http://lists.scribus.net/mailman/listinfo/scribus-commit

Reply via email to