[Libreoffice-commits] core.git: Branch 'feature/gsoc14-draw-chained-text-boxes' - 3 commits - include/editeng include/svx svx/source

matteocam matteo.campanelli at gmail.com
Mon Jun 15 11:22:22 PDT 2015


 include/editeng/overflowingtxt.hxx          |    2 -
 include/svx/svdotext.hxx                    |    7 ++-
 svx/source/svdraw/svdotext.cxx              |   22 +++++++++++
 svx/source/svdraw/svdotextdecomposition.cxx |   55 +++++++++-------------------
 4 files changed, 46 insertions(+), 40 deletions(-)

New commits:
commit 9aa0cc23f6e7fcf7bad76ec66bec397bb1267b31
Author: matteocam <matteo.campanelli at gmail.com>
Date:   Mon Jun 15 14:20:20 2015 -0400

    Prevent decomposition primitives to be called recursively
    
    Change-Id: Iab626d01c7b2850feb1f5d792373615a65e32070

diff --git a/svx/source/svdraw/svdotextdecomposition.cxx b/svx/source/svdraw/svdotextdecomposition.cxx
index 6a0e40d..b030462 100644
--- a/svx/source/svdraw/svdotextdecomposition.cxx
+++ b/svx/source/svdraw/svdotextdecomposition.cxx
@@ -775,6 +775,7 @@ OutlinerParaObject *SdrTextObj::impGetNonOverflowingParaObject(SdrOutliner *pOut
      return pOutliner->CreateParaObject();
 }
 
+/* Following function should not be called while decomposing static text */
 void SdrTextObj::impLeaveOnlyNonOverflowingText(SdrOutliner *pOutliner) const
 {
     OutlinerParaObject *pNewText = impGetNonOverflowingParaObject(pOutliner);
@@ -1566,36 +1567,6 @@ void SdrTextObj::impDecomposeChainedTextPrimitive(
         const drawinglayer::primitive2d::SdrChainedTextPrimitive2D& rSdrChainedTextPrimitive,
         const drawinglayer::geometry::ViewInformation2D& aViewInformation) const
 {
-    /* // Previous code - To maybe be resumed later on
-    // FIXME(matteocam)
-    // fprintf(stderr, "Object #0 = %p, Object #1 = %p\n",
-    //              pPage->GetObj(0), pPage->GetObj(1));
-
-    //impMoveChainedTextToNextLink(pNextTextObj); // just do it
-
-    // put overflowing text in next text box
-    if (IsToBeChained()) {
-        SdrTextObj *pNextTextObj = GetNextLinkInChain();
-        assert (pNextTextObj);
-        // NOTE: Commented because we do not need to do this anymore (maybe and for now)
-        //impMoveChainedTextToNextLink(pNextTextObj); // XXX: it actually moves the overflowing text currently
-
-        // XXX:
-        //const_cast<SdrTextObj*>(this)->impLeaveOnlyNonOverflowingText();
-        // Let's reset the status now to prevent infinite loops
-        const_cast<SdrTextObj*>(this)->SetToBeChained( false );
-        impLeaveOnlyNonOverflowingText();
-
-        //SdrOutliner rOutl = pNextTextObj->ImpGetDrawOutliner();
-        //pNextTextObj->BegTextEdit( rOutl );
-        // XXX: Also, will all those calls currently in impMoveChainedTextToNextLink be necessary too?
-
-    }*/
-
-    /* -- Beginning code from impDecomposeAutoFitText -- */
-    // XXX: The idea is, _for_now_, to do exactly what it does there but without the text stretching,
-    //      hopefully to get a "neutral" decomposition
-
     // decompose matrix to have position and size of text
     basegfx::B2DVector aScale, aTranslate;
     double fRotate, fShearX;
@@ -1659,13 +1630,21 @@ void SdrTextObj::impDecomposeChainedTextPrimitive(
     if ( rOutliner.IsPageOverflow() && !IsInEditMode()) {
         // Save the overflowing text before changing the outliner's state
         const_cast<SdrTextObj*>(this)->mpOverflowingText = rOutliner.GetOverflowingText();
-        impLeaveOnlyNonOverflowingText(&rOutliner);
+
+        /* Leave only non overflowing text */
+        OutlinerParaObject *pNewTextCurBox = impGetNonOverflowingParaObject(&rOutliner);
+        // we need this when we are in editing mode
+        // XXX: we use next line just to be sure for now
+        if (pEdtOutl != NULL)
+            pEdtOutl->SetText(*pNewTextCurBox);
+        // adds it to current outliner anyway (useful in static decomposition)
+        rOutliner.SetText(*pNewTextCurBox);
 
         /* Get chaining outliner  here */
         // Code adapted from ImpGetDrawOutliner
         SdrOutliner &rChainingOutl = pModel->GetChainingOutliner(this);
         ImpInitDrawOutliner( rChainingOutl );
-        rOutliner.SetUpdateMode(true);
+        rChainingOutl.SetUpdateMode(true);
 
         /* Transfer of text to next link */
         if (GetNextLinkInChain()
commit b570fb9b63b01823d99345736e55385fcc1734fc
Author: matteocam <matteo.campanelli at gmail.com>
Date:   Fri Jun 12 12:11:37 2015 -0400

    Special case of dragging handled. Transfer of text by decomposition prevented
    
    Change-Id: Ib84d087a73e957583047a3206171dfe3ab906b7f

diff --git a/include/editeng/overflowingtxt.hxx b/include/editeng/overflowingtxt.hxx
index 1546835..973729f 100644
--- a/include/editeng/overflowingtxt.hxx
+++ b/include/editeng/overflowingtxt.hxx
@@ -56,7 +56,7 @@ class NonOverflowingText {
                   mPreOverflowingTxt(preOverflowingTxt)
                 {
                     if (pHeadParas == NULL) // Redundant line for debugging
-                        DBG_ASSERT( pHeadParas != NULL, "pHeadParas is null?!" );
+                        DBG_ASSERT( pHeadParas != NULL, "pHeadParas is null?! All text is overflowing then" );
                 }
 };
 
diff --git a/include/svx/svdotext.hxx b/include/svx/svdotext.hxx
index 0bb58c5..9fd6262 100644
--- a/include/svx/svdotext.hxx
+++ b/include/svx/svdotext.hxx
@@ -215,8 +215,11 @@ public:
     const Point& GetTextEditOffset() const { return maTextEditOffset; }
     void SetTextEditOffset(const Point& rNew) { maTextEditOffset = rNew; }
 
+    virtual SdrObject* getFullDragClone() const SAL_OVERRIDE;
+
 protected:
     OverflowingText *mpOverflowingText = NULL;
+    bool mbIsUnchainableClone = false;
 
     //FIXME(matteocam)
     // the successor in a chain
@@ -353,6 +356,8 @@ public:
     bool IsToBeChained() const;
     SdrTextObj *GetNextLinkInChain() const;
     bool IsChainable() const { return GetNextLinkInChain() != NULL; }
+    void SetPreventChainable();
+    bool GetPreventChainable() const;
 
     SdrObjKind GetTextKind() const { return eTextKind; }
 
diff --git a/svx/source/svdraw/svdotext.cxx b/svx/source/svdraw/svdotext.cxx
index cef2fff..03b8388 100644
--- a/svx/source/svdraw/svdotext.cxx
+++ b/svx/source/svdraw/svdotext.cxx
@@ -2060,6 +2060,28 @@ SdrTextObj* SdrTextObj::GetNextLinkInChain() const
 
 }
 
+void SdrTextObj::SetPreventChainable()
+{
+    mbIsUnchainableClone = true;
+}
+
+bool SdrTextObj::GetPreventChainable() const
+{
+    return mbIsUnchainableClone;
+}
+
+ SdrObject* SdrTextObj::getFullDragClone() const
+ {
+    SdrObject *pClone = SdrAttrObj::getFullDragClone();
+    SdrTextObj *pTextObjClone = dynamic_cast<SdrTextObj *>(pClone);
+    if (pTextObjClone != NULL) {
+        // Avoid transferring of text for chainable object during dragging
+        pTextObjClone->SetPreventChainable();
+    }
+
+    return pClone;
+ }
+
 IMPL_LINK(SdrTextObj,ImpDecomposeChainedText,bool*,bIsPageOverflow)
 {
     onOverflowStatusEvent( *bIsPageOverflow );
diff --git a/svx/source/svdraw/svdotextdecomposition.cxx b/svx/source/svdraw/svdotextdecomposition.cxx
index 1f845c8..6a0e40d 100644
--- a/svx/source/svdraw/svdotextdecomposition.cxx
+++ b/svx/source/svdraw/svdotextdecomposition.cxx
@@ -1655,7 +1655,8 @@ void SdrTextObj::impDecomposeChainedTextPrimitive(
     /* Begin overflow handling */
 
     // If overflow occurs we have to cut the text at the right point
-    if ( rOutliner.IsPageOverflow() ) {
+    // If in edit mode ImpEditEngine should have taken care of this
+    if ( rOutliner.IsPageOverflow() && !IsInEditMode()) {
         // Save the overflowing text before changing the outliner's state
         const_cast<SdrTextObj*>(this)->mpOverflowingText = rOutliner.GetOverflowingText();
         impLeaveOnlyNonOverflowingText(&rOutliner);
@@ -1666,10 +1667,12 @@ void SdrTextObj::impDecomposeChainedTextPrimitive(
         ImpInitDrawOutliner( rChainingOutl );
         rOutliner.SetUpdateMode(true);
 
-        /* Actual transfer of text */
-
-        if (GetNextLinkInChain())
+        /* Transfer of text to next link */
+        if (GetNextLinkInChain()
+            && !GetPreventChainable() ) // we don't transfer text while dragging because of resizing
+        {
             impMoveChainedTextToNextLink(&rChainingOutl, GetNextLinkInChain());
+        }
 
     }
     /* End overflow handling */
commit ae8b6ee72f72f11b015a4673e81ca8b2945dcf5f
Author: matteocam <matteo.campanelli at gmail.com>
Date:   Fri Jun 12 10:27:33 2015 -0400

    mpOverflowingText moved as protected member
    
    Change-Id: I5f3ec0447c16e3939d30474396fea0952b13d7f0

diff --git a/include/svx/svdotext.hxx b/include/svx/svdotext.hxx
index 0552029..0bb58c5 100644
--- a/include/svx/svdotext.hxx
+++ b/include/svx/svdotext.hxx
@@ -215,10 +215,8 @@ public:
     const Point& GetTextEditOffset() const { return maTextEditOffset; }
     void SetTextEditOffset(const Point& rNew) { maTextEditOffset = rNew; }
 
-    // FIXME(matteocam) // XXX: move as protected
-    OverflowingText *mpOverflowingText = NULL;
-
 protected:
+    OverflowingText *mpOverflowingText = NULL;
 
     //FIXME(matteocam)
     // the successor in a chain
diff --git a/svx/source/svdraw/svdotextdecomposition.cxx b/svx/source/svdraw/svdotextdecomposition.cxx
index 748e980..1f845c8 100644
--- a/svx/source/svdraw/svdotextdecomposition.cxx
+++ b/svx/source/svdraw/svdotextdecomposition.cxx
@@ -1660,7 +1660,6 @@ void SdrTextObj::impDecomposeChainedTextPrimitive(
         const_cast<SdrTextObj*>(this)->mpOverflowingText = rOutliner.GetOverflowingText();
         impLeaveOnlyNonOverflowingText(&rOutliner);
 
-        // XXX: Order transfer of stuff in next link here
         /* Get chaining outliner  here */
         // Code adapted from ImpGetDrawOutliner
         SdrOutliner &rChainingOutl = pModel->GetChainingOutliner(this);


More information about the Libreoffice-commits mailing list