r21264 by fschmid -

scribus-commit scribus-commit at lists.scribus.net
Sun May 1 08:28:06 UTC 2016


Author: fschmid
Date: Sun May  1 08:28:06 2016
New Revision: 21264

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=21264
Log:
Fixed Bug #13996: Grouping text frames will result in a loss of chained text arrows

Modified:
    trunk/Scribus/scribus/canvas.cpp
    trunk/Scribus/scribus/canvas.h

Modified: trunk/Scribus/scribus/canvas.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=21264&path=/trunk/Scribus/scribus/canvas.cpp
==============================================================================
--- trunk/Scribus/scribus/canvas.cpp	(original)
+++ trunk/Scribus/scribus/canvas.cpp	Sun May  1 08:28:06 2016
@@ -1529,8 +1529,8 @@
 				currItem->DrawObj(painter, cullingArea);
 				currItem->DrawObj_Decoration(painter);
 			}
-//			currItem->Redrawn = true;
-			if ((currItem->asTextFrame()) && ((currItem->nextInChain() != 0) || (currItem->prevInChain() != 0)))
+			getLinkedFrames(currItem);
+/*			if ((currItem->asTextFrame()) && ((currItem->nextInChain() != 0) || (currItem->prevInChain() != 0)))
 			{
 				PageItem *nextItem = currItem;
 				while (nextItem != 0)
@@ -1542,7 +1542,7 @@
 				}
 				if (!m_viewMode.linkedFramesToShow.contains(nextItem))
 					m_viewMode.linkedFramesToShow.append(nextItem);
-			}
+			}*/
 			/* FIXME:av -
 			what to fix exactly? - pm
 			*/
@@ -1692,6 +1692,32 @@
 				painter->drawRect(x, y, w, h);
 			painter->setAntialiasing(true);
 		}
+	}
+}
+
+void Canvas::getLinkedFrames(PageItem* currItem)
+{
+	if (currItem->isGroup())
+	{
+		for (int em = 0; em < currItem->groupItemList.count(); ++em)
+		{
+			PageItem* embedded = currItem->groupItemList.at(em);
+			getLinkedFrames(embedded);
+		}
+
+	}
+	else if ((currItem->asTextFrame()) && ((currItem->nextInChain() != 0) || (currItem->prevInChain() != 0)))
+	{
+		PageItem *nextItem = currItem;
+		while (nextItem != 0)
+		{
+			if (nextItem->prevInChain() != 0)
+				nextItem = nextItem->prevInChain();
+			else
+				break;
+		}
+		if (!m_viewMode.linkedFramesToShow.contains(nextItem))
+			m_viewMode.linkedFramesToShow.append(nextItem);
 	}
 }
 
@@ -2289,10 +2315,26 @@
 	//Calculate the link points of the frames
 	double x11 = pi1->xPos();
 	double y11 = pi1->yPos();
-	double x12 = x11+pi1->width();
-	double y12 = y11+pi1->height();
-	double x1mid = x11+(x12-x11)/2;
-	double y1mid = y11+(y12-y11)/2;
+	double x12 = x11 + pi1->width();
+	double y12 = y11 + pi1->height();
+	if (pi1->isGroupChild())
+	{
+		QTransform itemTrans = pi1->getTransform();
+		QPointF itPos = itemTrans.map(QPointF(0, 0));
+		x11 = itPos.x();
+		y11 = itPos.y();
+		double grScXi = 1.0;
+		double grScYi = 1.0;
+		getScaleFromMatrix(itemTrans, grScXi, grScYi);
+		if (itemTrans.m11() < 0)
+			x11 -= pi1->width() * grScXi;
+		if (itemTrans.m22() < 0)
+			y11 -= pi1->height() * grScYi;
+		x12 = x11 + pi1->width() * grScXi;
+		y12 = y11 + pi1->height() * grScYi;
+	}
+	double x1mid = x11 + (x12 - x11) / 2.0;
+	double y1mid = y11 + (y12 - y11) / 2.0;
 					
 	if (pi1->rotation()!=0.000)
 	{
@@ -2312,10 +2354,27 @@
 	a1 = a2 = b1 = b2 = 0;
 	double x21 = pi2->xPos();
 	double y21 = pi2->yPos();
-	double x22 = x21+pi2->width();
-	double y22 = y21+pi2->height();
-	double x2mid = x21 + pi2->width()/2;
-	double y2mid = y21 + pi2->height()/2;
+	double x22 = x21 + pi2->width();
+	double y22 = y21 + pi2->height();
+	if (pi2->isGroupChild())
+	{
+		QTransform itemTrans = pi2->getTransform();
+		QPointF itPos = itemTrans.map(QPointF(0, 0));
+		x21 = itPos.x();
+		y21 = itPos.y();
+		double grScXi = 1.0;
+		double grScYi = 1.0;
+		getScaleFromMatrix(itemTrans, grScXi, grScYi);
+		if (itemTrans.m11() < 0)
+			x21 -= pi2->width() * grScXi;
+		if (itemTrans.m22() < 0)
+			y11 -= pi2->height() * grScYi;
+		x22 = x21 + pi2->width() * grScXi;
+		y22 = y21 + pi2->height() * grScYi;
+	}
+
+	double x2mid = x21 + (x22 - x21) / 2.0;
+	double y2mid = y21 + (y22 - y21) / 2.0;
 					
 	if (pi2->rotation()!=0.000)
 	{

Modified: trunk/Scribus/scribus/canvas.h
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=21264&path=/trunk/Scribus/scribus/canvas.h
==============================================================================
--- trunk/Scribus/scribus/canvas.h	(original)
+++ trunk/Scribus/scribus/canvas.h	Sun May  1 08:28:06 2016
@@ -257,6 +257,7 @@
 	void drawControlsMeasurementLine(QPainter* pp);
 	void drawControlsDrawLine(QPainter* pp);
 	void drawControlsFreehandLine(QPainter* pp);
+	void getLinkedFrames(PageItem* currItem);
 	void getClipPathForPages(FPointArray* PoLine);
 	void calculateFrameLinkPoints(PageItem* pi1, PageItem* pi2, FPoint& start, FPoint& end);
 		




More information about the scribus-commit mailing list