Author: jghali
Date: Mon Nov  4 08:44:03 2019
New Revision: 23321

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=23321
Log:
Improve drawing of item outlines when moving multiple items inside group

Modified:
    trunk/Scribus/scribus/canvasmode.cpp

Modified: trunk/Scribus/scribus/canvasmode.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23321&path=/trunk/Scribus/scribus/canvasmode.cpp
==============================================================================
--- trunk/Scribus/scribus/canvasmode.cpp        (original)
+++ trunk/Scribus/scribus/canvasmode.cpp        Mon Nov  4 08:44:03 2019
@@ -638,11 +638,12 @@
                if (docSelectionCount < m_canvas->moveWithBoxesOnlyThreshold)
                {
                        PageItem *currItem;
-//                     p->translate(x, y);
-                       for (int a=0; a<docSelectionCount; ++a)
-                       {
-                               currItem = m_doc->m_Selection->itemAt(a);
-                               if (!m_doc->Items->contains(currItem))
+                       for (int i = 0; i < docSelectionCount; ++i)
+                       {
+                               currItem = m_doc->m_Selection->itemAt(i);
+                               if (!currItem->Parent && 
!m_doc->Items->contains(currItem))
+                                       continue;
+                               if (currItem->Parent && 
!currItem->Parent->groupItemList.contains(currItem))
                                        continue;
                                p->save();
                                if (docSelectionCount < 
m_canvas->moveWithFullOutlinesThreshold /*&& currItem->rotation() == 0*/)
@@ -686,36 +687,35 @@
                                                }
 #endif  // GESTURE_FRAME_PREVIEW
                                                {
+                                                       QTransform itemTrans = 
currItem->getTransform(deltax, deltay);
+                                                       double visualWidth = 
currItem->visualWidth();
+                                                       double visualHeight = 
currItem->visualHeight();
+                                                       double visualLineWidth 
= currItem->visualLineWidth();
+                                                       double matRot = 
getRotationDFromMatrix(itemTrans);
+                                                       double matScaleX, 
matScaleY;
+                                                       
getScaleFromMatrix(itemTrans, matScaleX, matScaleY);
+
                                                        p->save();
                                                        
p->setBrush(m_brush["outline"]);
                                                        
p->setPen(m_pen["outline"]);
-                                                       
p->translate(currItem->xPos(), currItem->yPos());
-                                                       p->translate(deltax, 
deltay);
-                                                       if 
(currItem->rotation() != 0)
-                                                       {
+                                                       
p->setWorldTransform(itemTrans, true);
+                                                       if (matRot != 0)
                                                                
p->setRenderHint(QPainter::Antialiasing);
-                                                               
p->rotate(currItem->rotation());
-                                                       }
+                                                       p->scale(scalex /** 
matScaleX*/, scaley /** matScaleY*/);
                                                        if (currItem->isLine())
-                                                               p->translate(0, 
-currItem->visualLineWidth() / 2.0);
+                                                               
p->drawRect(QRectF(0.0, -visualLineWidth / 2.0, currItem->visualWidth(), 
currItem->visualHeight()));
                                                        else
-                                                               
p->translate(-currItem->visualLineWidth() / 2.0, -currItem->visualLineWidth() / 
2.0);
-                                                       p->scale(scalex, 
scaley);
-                                                       p->drawRect(QRectF(0.0, 
0.0, currItem->visualWidth(), currItem->visualHeight()));
+                                                               
p->drawRect(QRectF(-visualLineWidth / 2.0, -visualLineWidth / 2.0, 
currItem->visualWidth(), currItem->visualHeight()));
                                                        p->restore();
+
                                                        p->save();
                                                        
p->setBrush(m_brush["outline"]);
                                                        
p->setPen(m_pen["outline"]);
-                                                       
p->translate(currItem->xPos(), currItem->yPos());
-                                                       p->translate(deltax, 
deltay);
-                                                       if 
(currItem->rotation() != 0)
-                                                       {
+                                                       
p->setWorldTransform(itemTrans, true);
+                                                       if (matRot != 0)
                                                                
p->setRenderHint(QPainter::Antialiasing);
-                                                               
p->rotate(currItem->rotation());
-                                                       }
-                                                       p->scale(scalex, 
scaley);
+                                                       p->scale(scalex /** 
matScaleX*/, scaley /** matScaleY*/);
                                                        
p->drawPath(currItem->PoLine.toQPainterPath(false));
-                                                       
//currItem->DrawPolyL(p, currItem->Clip);
                                                        p->restore();
                                                }
                                        }


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

Reply via email to