Author: jghali
Date: Tue Dec 10 09:22:31 2019
New Revision: 23416

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=23416
Log:
Fixes for line items in Canvas::frameHitTest() and Canvas::itemUnderCursor()

Modified:
    trunk/Scribus/scribus/canvas.cpp

Modified: trunk/Scribus/scribus/canvas.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23416&path=/trunk/Scribus/scribus/canvas.cpp
==============================================================================
--- trunk/Scribus/scribus/canvas.cpp    (original)
+++ trunk/Scribus/scribus/canvas.cpp    Tue Dec 10 09:22:31 2019
@@ -298,12 +298,14 @@
        // be huge, into account.
        // ### might be interesting to investigate if it would be painless to 
just change 
        // PageItem::getTransform.
-       double extraS = (item->visualHeight() - item->height()) / - 2.0;
+       double extraS = - item->visualLineWidth() / 2.0;
 //     if (item->lineColor() != CommonStrings::None)
 //             extraS = (item->lineWidth() / -2.0);
        if (item->isTextFrame() && (m_doc->appMode == modeEdit) && 
!item->asTextFrame()->availableRegion().contains(item->getTransform().inverted().map(canvasPoint.toPoint())))
                return OUTSIDE;
-       Canvas::FrameHandle result = 
frameHitTest(item->getTransform().inverted().map(canvasPoint), QRectF(extraS, 
extraS, item->visualWidth(), item->visualHeight()));
+       QRectF visualRect = item->isLine() ? QRectF(0, extraS, 
item->visualWidth(), item->visualHeight()) 
+                                              : QRectF(extraS, extraS, 
item->visualWidth(), item->visualHeight());
+       Canvas::FrameHandle result = 
frameHitTest(item->getTransform().inverted().map(canvasPoint), visualRect);
 //     qDebug() << "frameHitTest for item" << item->ItemNr 
 //             << item->getTransform().inverted().map(canvasPoint) 
 //             << item->getTransform().inverted() 
@@ -423,10 +425,22 @@
                                        itemPos.translate(-Mp->xOffset() + 
m_doc->currentPage()->xOffset(), -Mp->yOffset() + 
m_doc->currentPage()->yOffset());
                                }
                                currItem->getTransform(itemPos);
-                               QPainterPath 
currPath(itemPos.map(QPointF(0,0)));
-                               
currPath.lineTo(itemPos.map(QPointF(currItem->width(), 0)));
-                               
currPath.lineTo(itemPos.map(QPointF(currItem->width(), currItem->height())));
-                               currPath.lineTo(itemPos.map(QPointF(0, 
currItem->height())));
+                               QPainterPath currPath;
+                               if (currItem->isLine())
+                               {
+                                       double visualLineWidth = 
currItem->visualLineWidth();
+                                       
currPath.moveTo(itemPos.map(QPointF(0.0, -visualLineWidth / 2.0)));
+                                       
currPath.lineTo(itemPos.map(QPointF(currItem->width(), -visualLineWidth / 
2.0)));
+                                       
currPath.lineTo(itemPos.map(QPointF(currItem->width(),  visualLineWidth / 
2.0)));
+                                       
currPath.lineTo(itemPos.map(QPointF(0.0,  visualLineWidth / 2.0)));
+                               }
+                               else
+                               {
+                                       currPath.moveTo(itemPos.map(QPointF(0, 
0)));
+                                       
currPath.lineTo(itemPos.map(QPointF(currItem->width(), 0)));
+                                       
currPath.lineTo(itemPos.map(QPointF(currItem->width(), currItem->height())));
+                                       currPath.lineTo(itemPos.map(QPointF(0, 
currItem->height())));
+                               }
                                currPath.closeSubpath();
                                QPainterPath currClip;
                                
currClip.addPolygon(itemPos.map(QPolygonF(currItem->Clip)));
@@ -467,10 +481,22 @@
                if (m_doc->canSelectItemOnLayer(currItem->m_layerID))
                {
                        QTransform itemPos = currItem->getTransform();
-                       QPainterPath currPath(itemPos.map(QPointF(0,0)));
-                       currPath.lineTo(itemPos.map(QPointF(currItem->width(), 
0)));
-                       currPath.lineTo(itemPos.map(QPointF(currItem->width(), 
currItem->height())));
-                       currPath.lineTo(itemPos.map(QPointF(0, 
currItem->height())));
+                       QPainterPath currPath;
+                       if (currItem->isLine())
+                       {
+                               double visualLineWidth = 
currItem->visualLineWidth();
+                               currPath.moveTo(itemPos.map(QPointF(0.0, 
-visualLineWidth / 2.0)));
+                               
currPath.lineTo(itemPos.map(QPointF(currItem->width(), -visualLineWidth / 
2.0)));
+                               
currPath.lineTo(itemPos.map(QPointF(currItem->width(),  visualLineWidth / 
2.0)));
+                               currPath.lineTo(itemPos.map(QPointF(0.0,  
visualLineWidth / 2.0)));
+                       }
+                       else
+                       {
+                               currPath.moveTo(itemPos.map(QPointF(0, 0)));
+                               
currPath.lineTo(itemPos.map(QPointF(currItem->width(), 0)));
+                               
currPath.lineTo(itemPos.map(QPointF(currItem->width(), currItem->height())));
+                               currPath.lineTo(itemPos.map(QPointF(0, 
currItem->height())));
+                       }
                        currPath.closeSubpath();
                        QPainterPath currClip;
                        
currClip.addPolygon(itemPos.map(QPolygonF(currItem->Clip)));


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

Reply via email to