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
