[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