Author: jghali
Date: Fri Jun 21 23:08:25 2019
New Revision: 23042

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=23042
Log:
Preparatory work for more complete fix of #15718

Modified:
    trunk/Scribus/scribus/pageitem.cpp
    trunk/Scribus/scribus/pageitem.h
    trunk/Scribus/scribus/pageitem_textframe.cpp

Modified: trunk/Scribus/scribus/pageitem.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23042&path=/trunk/Scribus/scribus/pageitem.cpp
==============================================================================
--- trunk/Scribus/scribus/pageitem.cpp  (original)
+++ trunk/Scribus/scribus/pageitem.cpp  Fri Jun 21 23:08:25 2019
@@ -9462,6 +9462,99 @@
        return arrowRect;
 }
 
+QRegion PageItem::textInteractionRegion(double xOffset, double yOffset) const
+{
+       QRegion res;
+
+       QTransform pp;
+       if (this->isGroupChild())
+               pp.translate(gXpos, gYpos);
+       else
+               pp.translate(m_xPos - xOffset, m_yPos - yOffset);
+       pp.rotate(m_rotation);
+
+       if (textFlowUsesBoundingBox())
+       {
+               QRectF bb = getVisualBoundingRect();
+               if (isGroupChild())
+               {
+                       bb.translate(-m_xPos, -m_yPos);
+                       bb.translate(gXpos, gYpos);
+               }
+               res = QRegion(bb.toRect());
+       }
+       else if ((textFlowUsesImageClipping()) && (!imageClip.empty()))
+       {
+               QList<uint> Segs;
+               QPolygon Clip2 = flattenPath(imageClip, Segs);
+               res = QRegion(pp.map(Clip2)).intersected(QRegion(pp.map(Clip)));
+       }
+       else if ((textFlowUsesContourLine()) && (!ContourLine.empty()))
+       {
+               QList<uint> Segs;
+               QPolygon Clip2 = flattenPath(ContourLine, Segs);
+               res = QRegion(pp.map(Clip2));
+       }
+       else
+       {
+               if (isSymbol() || isGroup())
+               {
+                       if (imageFlippedH())
+                       {
+                               pp.translate(m_width, 0);
+                               pp.scale(-1, 1);
+                       }
+                       if (imageFlippedV())
+                       {
+                               pp.translate(0, m_height);
+                               pp.scale(1, -1);
+                       }
+               }
+               if ((((lineColorVal != CommonStrings::None) || 
(!patternStrokeVal.isEmpty()) || (GrTypeStroke > 0)) && (m_lineWidth > 1)) || 
(!NamedLStyle.isEmpty()))
+               {
+//                     QVector<double> m_array;
+                       QPainterPath ppa;
+                       QPainterPath result;
+                       if (itemType() == PageItem::PolyLine)
+                               ppa = PoLine.toQPainterPath(false);
+                       else
+                               ppa = PoLine.toQPainterPath(true);
+                       if (NamedLStyle.isEmpty())
+                       {
+                               QPainterPathStroker stroke;
+                               stroke.setCapStyle(PLineEnd);
+                               stroke.setJoinStyle(PLineJoin);
+                               stroke.setDashPattern(Qt::SolidLine);
+                               stroke.setWidth(m_lineWidth);
+                               result = stroke.createStroke(ppa);
+                       }
+                       else
+                       {
+                               multiLine ml = doc()->MLineStyles[NamedLStyle];
+                               int ind = ml.size()-1;
+                               if ((ml[ind].Color != CommonStrings::None) && 
(ml[ind].Width != 0))
+                               {
+                                       QPainterPathStroker stroke;
+                                       
stroke.setCapStyle(static_cast<Qt::PenCapStyle>(ml[ind].LineEnd));
+                                       
stroke.setJoinStyle(static_cast<Qt::PenJoinStyle>(ml[ind].LineJoin));
+                                       stroke.setDashPattern(Qt::SolidLine);
+                                       stroke.setWidth(ml[ind].Width);
+                                       result = stroke.createStroke(ppa);
+                               }
+                       }
+                       res = QRegion(pp.map(Clip));
+                       QList<QPolygonF> pl = result.toSubpathPolygons();
+                       for (int b = 0; b < pl.count(); b++)
+                       {
+                               res = 
res.united(QRegion(pp.map(pl[b].toPolygon())));
+                       }
+               }
+               else
+                       res = QRegion(pp.map(Clip));
+       }
+       return  res;
+}
+
 bool PageItem::pointWithinItem(int x, const int y) const
 {
        const_cast<PageItem*>(this)-> setRedrawBounding();

Modified: trunk/Scribus/scribus/pageitem.h
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23042&path=/trunk/Scribus/scribus/pageitem.h
==============================================================================
--- trunk/Scribus/scribus/pageitem.h    (original)
+++ trunk/Scribus/scribus/pageitem.h    Fri Jun 21 23:08:25 2019
@@ -58,6 +58,7 @@
 
 class QFrame;
 class QGridLayout;
+class QRegion;
 class ResourceCollection;
 class ScPainter;
 class ScribusDoc;
@@ -315,6 +316,7 @@
        virtual QRectF getEndArrowBoundingRect() const;
        virtual QRectF getEndArrowOldBoundingRect() const;
 
+       virtual QRegion textInteractionRegion(double xOffset, double yOffset) 
const;
 
        //>> ********* Functions related to drawing the item *********
 

Modified: trunk/Scribus/scribus/pageitem_textframe.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23042&path=/trunk/Scribus/scribus/pageitem_textframe.cpp
==============================================================================
--- trunk/Scribus/scribus/pageitem_textframe.cpp        (original)
+++ trunk/Scribus/scribus/pageitem_textframe.cpp        Fri Jun 21 23:08:25 2019
@@ -98,97 +98,6 @@
        connect(&itemText,SIGNAL(changed(int,int)), this, 
SLOT(slotInvalidateLayout(int,int)));
 }
 
-static QRegion itemShape(PageItem* docItem, double xOffset, double yOffset)
-{
-       QRegion res;
-       QTransform pp;
-       if (docItem->isGroupChild())
-               pp.translate(docItem->gXpos, docItem->gYpos);
-       else
-               pp.translate(docItem->xPos() - xOffset, docItem->yPos() - 
yOffset);
-       pp.rotate(docItem->rotation());
-       if (docItem->textFlowUsesBoundingBox())
-       {
-               QRectF bb = docItem->getVisualBoundingRect();
-               if (docItem->isGroupChild())
-               {
-                       bb.translate(-docItem->xPos(), -docItem->yPos());
-                       bb.translate(docItem->gXpos, docItem->gYpos);
-               }
-               res = QRegion(bb.toRect());
-       }
-       else if ((docItem->textFlowUsesImageClipping()) && 
(!docItem->imageClip.empty()))
-       {
-               QList<uint> Segs;
-               QPolygon Clip2 = flattenPath(docItem->imageClip, Segs);
-               res = 
QRegion(pp.map(Clip2)).intersected(QRegion(pp.map(docItem->Clip)));
-       }
-       else if ((docItem->textFlowUsesContourLine()) && 
(!docItem->ContourLine.empty()))
-       {
-               QList<uint> Segs;
-               QPolygon Clip2 = flattenPath(docItem->ContourLine, Segs);
-               res = QRegion(pp.map(Clip2));
-       }
-       else
-       {
-               if (docItem->isSymbol() || docItem->isGroup())
-               {
-                       if (docItem->imageFlippedH())
-                       {
-                               pp.translate(docItem->width(), 0);
-                               pp.scale(-1, 1);
-                       }
-                       if (docItem->imageFlippedV())
-                       {
-                               pp.translate(0, docItem->height());
-                               pp.scale(1, -1);
-                       }
-               }
-               if ((((docItem->lineColor() != CommonStrings::None) || 
(!docItem->patternStrokeVal.isEmpty()) || (docItem->GrTypeStroke > 0)) && 
(docItem->lineWidth() > 1)) || (!docItem->NamedLStyle.isEmpty()))
-               {
-//                     QVector<double> m_array;
-                       QPainterPath ppa;
-                       QPainterPath result;
-                       if (docItem->itemType() == PageItem::PolyLine)
-                               ppa = docItem->PoLine.toQPainterPath(false);
-                       else
-                               ppa = docItem->PoLine.toQPainterPath(true);
-                       if (docItem->NamedLStyle.isEmpty())
-                       {
-                               QPainterPathStroker stroke;
-                               stroke.setCapStyle(docItem->lineEnd());
-                               stroke.setJoinStyle(docItem->lineJoin());
-                               stroke.setDashPattern(Qt::SolidLine);
-                               stroke.setWidth(docItem->lineWidth());
-                               result = stroke.createStroke(ppa);
-                       }
-                       else
-                       {
-                               multiLine ml = 
docItem->doc()->MLineStyles[docItem->NamedLStyle];
-                               int ind = ml.size()-1;
-                               if ((ml[ind].Color != CommonStrings::None) && 
(ml[ind].Width != 0))
-                               {
-                                       QPainterPathStroker stroke;
-                                       
stroke.setCapStyle(static_cast<Qt::PenCapStyle>(ml[ind].LineEnd));
-                                       
stroke.setJoinStyle(static_cast<Qt::PenJoinStyle>(ml[ind].LineJoin));
-                                       stroke.setDashPattern(Qt::SolidLine);
-                                       stroke.setWidth(ml[ind].Width);
-                                       result = stroke.createStroke(ppa);
-                               }
-                       }
-                       res = QRegion(pp.map(docItem->Clip));
-                       QList<QPolygonF> pl = result.toSubpathPolygons();
-                       for (int b = 0; b < pl.count(); b++)
-                       {
-                               res = 
res.united(QRegion(pp.map(pl[b].toPolygon())));
-                       }
-               }
-               else
-                       res = QRegion(pp.map(docItem->Clip));
-       }
-       return  res;
-}
-
 QRegion PageItem_TextFrame::calcAvailableRegion()
 {
        QRegion result(this->Clip);
@@ -207,9 +116,9 @@
 
                int LayerLev = m_Doc->layerLevelFromID(m_layerID);
                int docItemsCount = m_Doc->Items->count();
-               ScPage* Mp=nullptr;
-               ScPage* Dp=nullptr;
-               PageItem* docItem=nullptr;
+               ScPage* Mp = nullptr;
+               ScPage* Dp = nullptr;
+               PageItem* docItem = nullptr;
                int LayerLevItem;
                QList<PageItem*> thisList;
                if (!OnMasterPage.isEmpty())
@@ -234,7 +143,7 @@
                                {
                                        if (docItem->textFlowAroundObject())
                                        {
-                                               QRegion itemRgn = 
itemShape(docItem, Mp->xOffset() - Dp->xOffset(), Mp->yOffset() - 
Dp->yOffset());
+                                               QRegion itemRgn = 
docItem->textInteractionRegion(Mp->xOffset() - Dp->xOffset(), Mp->yOffset() - 
Dp->yOffset());
                                                result = result.subtracted( 
canvasToLocalMat.map(itemRgn) );
                                        }
                                }
@@ -267,7 +176,7 @@
                                        docItem = 
Parent->asGroupFrame()->groupItemList.at(a);
                                        if (docItem->textFlowAroundObject())
                                        {
-                                               QRegion itemRgn = 
itemShape(docItem, 0, 0);
+                                               QRegion itemRgn = 
docItem->textInteractionRegion(0, 0);
                                                result = result.subtracted( 
canvasToLocalMat.map(itemRgn) );
                                        }
                                }
@@ -283,7 +192,7 @@
                                        {
                                                if 
(docItem->textFlowAroundObject())
                                                {
-                                                       QRegion itemRgn = 
itemShape(docItem, 0, 0);
+                                                       QRegion itemRgn = 
docItem->textInteractionRegion(0, 0);
                                                        result = 
result.subtracted( canvasToLocalMat.map(itemRgn) );
                                                }
                                        }


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

Reply via email to