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

matteocam matteo.campanelli at gmail.com
Thu Jun 25 15:16:01 PDT 2015


 include/svx/textchainflow.hxx               |   49 +++++++++++++++++++++++-----
 svx/source/svdraw/svdotextdecomposition.cxx |   44 +++++++++++++++++++++----
 2 files changed, 79 insertions(+), 14 deletions(-)

New commits:
commit d694690fd619c7be735551378f753cf6b84bb55f
Author: matteocam <matteo.campanelli at gmail.com>
Date:   Thu Jun 25 18:14:28 2015 -0400

    Written mechanisms for static OF/UF in proper classes
    
    Change-Id: Ica4b774670ae2bf25b5f6ee66f55c120e3e6b005

diff --git a/include/svx/textchainflow.hxx b/include/svx/textchainflow.hxx
index 5b4b7b5..e581965 100644
--- a/include/svx/textchainflow.hxx
+++ b/include/svx/textchainflow.hxx
@@ -20,22 +20,55 @@
 #ifndef INCLUDED_SVX_TEXTCHAINFLOW_HXX
 #define INCLUDED_SVX_TEXTCHAINFLOW_HXX
 
-#include <map>
-
-
 class SdrTextObj;
+class SdrOutliner;
+class NonOverflowingText;
+class OverflowingText;
+class TextChain;
 
-namespace rtl {
-    class OUString;
-}
+// XXX: Specialize class for Editing mode and non editing mode?
+// XXX: const qualifiers?
 
 class TextChainFlow {
 
     public:
-    TextChainFlow() {}
-    ~TextChainFlow() {}
+    TextChainFlow(SdrTextObj *pChainTarget);
+    ~TextChainFlow();
+
+    void CheckForFlowEvents(SdrOutliner *, SdrOutliner *);
+
+    bool IsOverflow();
+    bool IsUnderflow();
+
+    void ExecuteUnderflow(SdrOutliner *);
+    void ExecuteOverflow(SdrOutliner *, SdrOutliner *);
 
     protected:
+    TextChain *GetTextChain();
+
+    void impLeaveOnlyNonOverflowingText(SdrOutliner *);
+    void impMoveChainedTextToNextLink(SdrOutliner *);
+
+    OutlinerParaObject *impGetNonOverflowingParaObject(SdrOutliner *pOutliner);
+    OutlinerParaObject *impGetOverflowingParaObject(SdrOutliner *pOutliner);
+
+    private:
+
+    void impSetOutlinerToEmptyTxt(SdrOutliner *pOutliner);
+
+    SdrTextObj *mpTargetLink;
+    SdrTextObj *mpNextLink;
+
+    TextChain *mpTextChain;
+
+    bool bCheckedFlowEvents;
+
+    bool bUnderflow;
+    bool bOverflow;
+
+    OverflowingText *mpOverflowingTxt;
+    NonOverflowingText *mpNonOverflowingTxt;
+
 };
 
 #endif // INCLUDED_SVX_TEXTCHAINFLOW_HXX
diff --git a/svx/source/svdraw/svdotextdecomposition.cxx b/svx/source/svdraw/svdotextdecomposition.cxx
index 70c4f2c..2ba2012 100644
--- a/svx/source/svdraw/svdotextdecomposition.cxx
+++ b/svx/source/svdraw/svdotextdecomposition.cxx
@@ -24,6 +24,7 @@
 #include <svx/svdotext.hxx>
 #include <svx/svdmodel.hxx>
 #include <svx/textchain.hxx>
+#include <svx/textchainflow.hxx>
 #include <basegfx/vector/b2dvector.hxx>
 #include <sdr/primitive2d/sdrtextprimitive2d.hxx>
 #include <drawinglayer/primitive2d/textprimitive2d.hxx>
@@ -861,7 +862,7 @@ OutlinerParaObject *SdrTextObj::impGetOverflowingParaObject(SdrOutliner *pOutlin
     // Draw everything
     OutlinerParaObject *pNewText = pOutliner->CreateParaObject();
     return pNewText;
- }
+}
 
 void SdrTextObj::impMoveChainedTextToNextLink(SdrOutliner *pOutliner, SdrTextObj *pNextTextObj) const
 {
@@ -1638,6 +1639,36 @@ void SdrTextObj::impDecomposeChainedTextPrimitive(
 
     /* Begin underflow handling */
 
+     // any parameter in the constructor?
+     // We need the outliner we get the overflow info from as well as
+     //  the outliner for "drawing" (e.g. a drawing or chaining outliner)
+     // maybe the latter ones can be passed at the time of overflow and such
+    TextChainFlow aTxtChainFlow(const_cast<SdrTextObj*>(this));
+    bool bIsOverflow;
+
+    aTxtChainFlow.CheckForFlowEvents(&rOutliner, NULL); // seconod parameter is to check whether you have to "prepare" the outliner's parameters
+
+    if (aTxtChainFlow.IsUnderflow() && !IsInEditMode())
+    {
+        // underflow-induced overflow
+        aTxtChainFlow.ExecuteUnderflow(&rOutliner);
+        bIsOverflow = aTxtChainFlow.IsOverflow();
+    } else {
+        bIsOverflow = aTxtChainFlow.IsOverflow();
+    }
+
+    if (bIsOverflow && !IsInEditMode()) {
+        // Initialize Chaining Outliner
+        SdrOutliner &rChainingOutl = pModel->GetChainingOutliner(this);
+        ImpInitDrawOutliner( rChainingOutl );
+        rChainingOutl.SetUpdateMode(true);
+
+        aTxtChainFlow.ExecuteOverflow(&rOutliner, &rChainingOutl);
+    }
+
+    /*
+
+    // Begin old code
     bool bIsPageUnderflow = !rOutliner.IsPageOverflow() && !IsInEditMode();
     if (bIsPageUnderflow) {
 
@@ -1646,7 +1677,6 @@ void SdrTextObj::impDecomposeChainedTextPrimitive(
             OutlinerParaObject *pNextLinkWholeText = pNextLink->GetOutlinerParaObject();
 
             // making whole text
-
             OutlinerParaObject *pCurText;
             pCurText = rOutliner.CreateParaObject(); // XXX: this is editing outliner in editing version
 
@@ -1662,19 +1692,19 @@ void SdrTextObj::impDecomposeChainedTextPrimitive(
             const_cast<SdrTextObj*>(this)->NbcSetOutlinerParaObject(pNewText);
         }
     } // You might be done at this point, unless there is an overflow and that's handled in std way.
-
+    */
     /* End underflow handling */
 
 
     /* Begin overflow handling */ // might be caused from underflow handling above
-
+    /*
     // If overflow occurs we have to cut the text at the right point
     // 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();
 
-        /* Leave only non overflowing text */
+        // Leave only non overflowing text
         impLeaveOnlyNonOverflowingText(&rOutliner);
 
         // Initialize Chaining Outliner
@@ -1682,7 +1712,7 @@ void SdrTextObj::impDecomposeChainedTextPrimitive(
         ImpInitDrawOutliner( rChainingOutl );
         rChainingOutl.SetUpdateMode(true);
 
-        /* Transfer of text to next link */
+        // Transfer of text to next link
         if (GetNextLinkInChain()
             && !GetPreventChainable() ) // we don't transfer text while dragging because of resizing
         {
@@ -1690,6 +1720,8 @@ void SdrTextObj::impDecomposeChainedTextPrimitive(
         }
 
     }
+
+    */
     /* End overflow handling */
 
     // set visualizing page at Outliner; needed e.g. for PageNumberField decomposition


More information about the Libreoffice-commits mailing list