Author: jghali
Date: Wed Jan 20 23:21:26 2021
New Revision: 24414

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=24414
Log:
#16431: Page numbers placed in masterpages not displayed correctly when objects 
are grouped

Modified:
    trunk/Scribus/scribus/canvas.cpp

Modified: trunk/Scribus/scribus/canvas.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=24414&path=/trunk/Scribus/scribus/canvas.cpp
==============================================================================
--- trunk/Scribus/scribus/canvas.cpp    (original)
+++ trunk/Scribus/scribus/canvas.cpp    Wed Jan 20 23:21:26 2021
@@ -27,6 +27,7 @@
 #include "canvasmode.h"
 #include "pageitem_textframe.h"
 #include "pageitem_group.h"
+#include "pageitemiterator.h"
 #include "prefsmanager.h"
 #include "scpage.h"
 #include "scpainter.h"
@@ -1385,21 +1386,33 @@
                        continue;
                if ((m_viewMode.viewAsPreview) && (!currItem->printEnabled()))
                        continue;
-               double OldX = currItem->xPos();
-               double OldY = currItem->yPos();
-               double OldBX = currItem->BoundingX;
-               double OldBY = currItem->BoundingY;
+               double oldX = currItem->xPos();
+               double oldY = currItem->yPos();
+               double oldBX = currItem->BoundingX;
+               double oldBY = currItem->BoundingY;
                if (!currItem->ChangedMasterItem)
                {
                        //Hack to not check for undo changes, indicate drawing 
only
                        currItem->moveBy(-Mp->xOffset() + page->xOffset(), 
-Mp->yOffset() + page->yOffset(), true);
-                       currItem->BoundingX = OldBX - Mp->xOffset() + 
page->xOffset();
-                       currItem->BoundingY = OldBY - Mp->yOffset() + 
page->yOffset();
-               }
+                       currItem->BoundingX = oldBX - Mp->xOffset() + 
page->xOffset();
+                       currItem->BoundingY = oldBY - Mp->yOffset() + 
page->yOffset();
+               }
+               // Save PageItem's OwnPage and set its value to page number
+               // so that page number placed in text frames can work, also 
modify
+               // OwnPage of items embeded inside groups for same reason
                currItem->savedOwnPage = currItem->OwnPage;
                currItem->OwnPage = page->pageNr();
-//FIXME                                                if (!evSpon || 
forceRedraw)
-//                                     currItem->invalid = true;
+               if (currItem->isGroup())
+               {
+                       PageItem_Group *groupItem = currItem->asGroupFrame();
+                       PageItemIterator itemIt(groupItem->groupItemList, 
PageItemIterator::IterateInGroups);
+                       for ( ; *itemIt; ++itemIt)
+                       {
+                               PageItem* item = *itemIt;
+                               item->savedOwnPage = currItem->OwnPage;
+                               item->OwnPage = page->pageNr();
+                       }
+               }
                if 
(cullingArea.intersects(currItem->getBoundingRect().adjusted(0.0, 0.0, 1.0, 
1.0)))
                {
                        if (!((m_viewMode.operItemMoving) && 
(currItem->isSelected())))
@@ -1409,16 +1422,27 @@
                                currItem->DrawObj(painter, cullingArea);
                                currItem->DrawObj_Decoration(painter);
                        }
-//                                                     else 
-//                                                             qDebug() << 
"skip masterpage item (move/resizeEdit/selected)" << m_viewMode.operItemMoving 
<< currItem->isSelected();
+//                     else 
+//                             qDebug() << "skip masterpage item 
(move/resizeEdit/selected)" << m_viewMode.operItemMoving << 
currItem->isSelected();
+               }
+               // Restore items' OwnPage including those of item embedded 
inside groups 
+               if (currItem->isGroup())
+               {
+                       PageItem_Group *groupItem = currItem->asGroupFrame();
+                       PageItemIterator itemIt(groupItem->groupItemList, 
PageItemIterator::IterateInGroups);
+                       for ( ; *itemIt; ++itemIt)
+                       {
+                               PageItem* item = *itemIt;
+                               item->OwnPage = item->savedOwnPage;
+                       }
                }
                currItem->OwnPage = currItem->savedOwnPage;
                if (!currItem->ChangedMasterItem)
                {
                        //Hack to not check for undo changes, indicate drawing 
only
-                       currItem->setXYPos(OldX, OldY, true);
-                       currItem->BoundingX = OldBX;
-                       currItem->BoundingY = OldBY;
+                       currItem->setXYPos(oldX, oldY, true);
+                       currItem->BoundingX = oldBX;
+                       currItem->BoundingY = oldBY;
                }
        }
        if ((layerCount > 1) && ((layer.blendMode != 0) || (layer.transparency 
!= 1.0)) && (!layer.outlineMode))


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

Reply via email to