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

matteocam matteo.campanelli at gmail.com
Mon Jul 13 11:11:31 PDT 2015


 editeng/source/outliner/overflowingtxt.cxx |   78 +++++++++++++++++++++++------
 include/editeng/overflowingtxt.hxx         |    3 +
 2 files changed, 65 insertions(+), 16 deletions(-)

New commits:
commit d35ecc609fa55835f3942656dcd9330c24dc4521
Author: matteocam <matteo.campanelli at gmail.com>
Date:   Mon Jul 13 14:08:00 2015 -0400

    Add impGetDeeplyMergedParaObject. But with juxtaposition semantics
    
    Change-Id: Idd8d8d39d7ddabc9bdfe416250c6611b21f74e11

diff --git a/editeng/source/outliner/overflowingtxt.cxx b/editeng/source/outliner/overflowingtxt.cxx
index eb6bfe5..6a73775 100644
--- a/editeng/source/outliner/overflowingtxt.cxx
+++ b/editeng/source/outliner/overflowingtxt.cxx
@@ -26,7 +26,7 @@
 #include <editeng/editobj.hxx>
 
 
-// Helper function for *OverflowingText classes
+/* Helper functions for *OverflowingText classes  */
 
 ESelection getLastPositionSel(const EditTextObject *pTObj)
 {
@@ -40,6 +40,34 @@ ESelection getLastPositionSel(const EditTextObject *pTObj)
     return aEndPos;
 }
 
+// Put a para next to each other in the same OutlinerParaObject
+OutlinerParaObject *impGetJuxtaposedParaObject(Outliner *pOutl,
+                                               OutlinerParaObject *pPObj1,
+                                               OutlinerParaObject *pPObj2)
+{
+    assert(pOutl && pPObj1 &&  pPObj2);
+
+    pOutl->SetText(*pPObj1);
+    pOutl->AddText(*pPObj2);
+    OutlinerParaObject *pPObj = pOutl->CreateParaObject();
+
+    return pPObj;
+}
+
+OutlinerParaObject *impGetDeeplyMergedParaObject(Outliner *pOutl,
+                                               OutlinerParaObject *pPObj1,
+                                               OutlinerParaObject *pPObj2)
+{ // XXX: For now just the same
+
+    assert(pOutl && pPObj1 &&  pPObj2);
+
+    pOutl->SetText(*pPObj1);
+    pOutl->AddText(*pPObj2);
+    OutlinerParaObject *pPObj = pOutl->CreateParaObject();
+
+    return pPObj;
+}
+
 // class OverflowingText
 
 OverflowingText::OverflowingText(EditTextObject *pTObj)
@@ -89,24 +117,35 @@ OutlinerParaObject *OverflowingText::GetJuxtaposedParaObject(Outliner *pOutl, Ou
         return NULL;
     }
 
-    // Simply Juxtaposing; no within-para merging
     OutlinerParaObject *pOverflowingPObj = new OutlinerParaObject(*mpContentTextObj);
     // the OutlinerParaObject constr. at the prev line gives no valid outliner mode, so we set it
     pOverflowingPObj->SetOutlinerMode(pOutl->GetOutlinerMode());
 
-    /* Actual Text Setting */
-    pOutl->SetText(*pOverflowingPObj);
+    // Simply Juxtaposing; no within-para merging
+    return impGetJuxtaposedParaObject(pOutl, pOverflowingPObj, pNextPObj);
+}
 
-    // Set selection position between new and old text
-    //maInsertionPointSel = impGetEndSelection(pOutl);  // XXX: Maybe setting in the constructor is just right
+OutlinerParaObject *OverflowingText::impMakeOverflowingParaObject(Outliner *pOutliner)
+{
+    if (mpContentTextObj == NULL) {
+        fprintf(stderr, "[Chaining] OverflowingText's mpContentTextObj is NULL!\n");
+        return NULL;
+    }
+
+    // Simply Juxtaposing; no within-para merging
+    OutlinerParaObject *pOverflowingPObj = new OutlinerParaObject(*mpContentTextObj);
+    // the OutlinerParaObject constr. at the prev line gives no valid outliner mode, so we set it
+    pOverflowingPObj->SetOutlinerMode(pOutliner->GetOutlinerMode());
 
-    pOutl->AddText(*pNextPObj);
+    return pOverflowingPObj;
+}
 
-    // End Text Setting
 
-    OutlinerParaObject *pPObj = pOutl->CreateParaObject();
-    //pPObj->SetOutlinerMode(pOutl->GetOutlinerMode());
-    return pPObj;
+OutlinerParaObject *OverflowingText::GetDeeplyMergedParaObject(Outliner *pOutliner, OutlinerParaObject *pNextPObj)
+{
+    OutlinerParaObject *pOverflowingPObj = impMakeOverflowingParaObject(pOutliner);
+
+    return impGetDeeplyMergedParaObject(pOutliner, pOverflowingPObj, pNextPObj);
 }
 
 // class OFlowChainedText
@@ -135,9 +174,13 @@ OutlinerParaObject *OFlowChainedText::CreateOverflowingParaObject(Outliner *pOut
     if (mpOverflowingTxt == NULL || pTextToBeMerged == NULL)
         return NULL;
 
-    return mpOverflowingTxt->GetJuxtaposedParaObject(pOutliner, pTextToBeMerged );
+    if (mbIsDeepMerge)
+        return mpOverflowingTxt->GetJuxtaposedParaObject(pOutliner, pTextToBeMerged );
+    else
+        return mpOverflowingTxt->GetDeeplyMergedParaObject(pOutliner, pTextToBeMerged );
 }
 
+
 OutlinerParaObject *OFlowChainedText::CreateNonOverflowingParaObject(Outliner *pOutliner)
 {
     if (mpNonOverflowingTxt == NULL)
@@ -162,12 +205,15 @@ UFlowChainedText::UFlowChainedText(Outliner *pOutl, bool bIsDeepMerge)
 
 OutlinerParaObject *UFlowChainedText::CreateMergedUnderflowParaObject(Outliner *pOutl, OutlinerParaObject *pNextLinkWholeText)
 {
+    OutlinerParaObject *pNewText = NULL;
     OutlinerParaObject *pCurText = mpUnderflowPObj;
 
-    // NewTextForCurBox = Txt(CurBox) ++ Txt(NextBox)
-    pOutl->SetText(*pCurText);
-    pOutl->AddText(*pNextLinkWholeText);
-    OutlinerParaObject *pNewText = pOutl->CreateParaObject();
+    if (mbIsDeepMerge) {
+        pNewText = impGetDeeplyMergedParaObject(pOutl, pCurText, pNextLinkWholeText);
+    } else {
+        // NewTextForCurBox = Txt(CurBox) ++ Txt(NextBox)
+        pNewText = impGetJuxtaposedParaObject(pOutl, pCurText, pNextLinkWholeText);
+    }
 
     return pNewText;
 
diff --git a/include/editeng/overflowingtxt.hxx b/include/editeng/overflowingtxt.hxx
index 345daa8..ae9b39e 100644
--- a/include/editeng/overflowingtxt.hxx
+++ b/include/editeng/overflowingtxt.hxx
@@ -42,6 +42,7 @@ class OverflowingText
 
 public:
         OutlinerParaObject *GetJuxtaposedParaObject(Outliner *, OutlinerParaObject *);
+        OutlinerParaObject *GetDeeplyMergedParaObject(Outliner *, OutlinerParaObject *);
         ESelection GetInsertionPointSel() const;
 
         //OUString GetHeadingLines() const;
@@ -53,6 +54,8 @@ private:
     // Constructor
     OverflowingText(EditTextObject *pTObj);
 
+    OutlinerParaObject *impMakeOverflowingParaObject(Outliner *pOutliner);
+
     const EditTextObject *mpContentTextObj;
 };
 


More information about the Libreoffice-commits mailing list