[Libreoffice-commits] core.git: Branch 'feature/gsoc14-draw-chained-text-boxes' - svx/source
matteocam
matteo.campanelli at gmail.com
Mon Jun 22 13:57:02 PDT 2015
svx/source/svdraw/svdotext.cxx | 55 ++++++++++++++++++----------
svx/source/svdraw/svdotextdecomposition.cxx | 5 +-
2 files changed, 40 insertions(+), 20 deletions(-)
New commits:
commit 5c5e9a24af2fc406234145a0bc99ec1ac8c8c2c6
Author: matteocam <matteo.campanelli at gmail.com>
Date: Mon Jun 22 16:56:34 2015 -0400
Handle UF and consequent OF in the same pass in editing mode
Change-Id: Ic46137a666342d9cea99973fc1ce1a3ff759824a
diff --git a/svx/source/svdraw/svdotext.cxx b/svx/source/svdraw/svdotext.cxx
index 49ef5b2..df1a01b 100644
--- a/svx/source/svdraw/svdotext.cxx
+++ b/svx/source/svdraw/svdotext.cxx
@@ -2036,33 +2036,52 @@ void SdrTextObj::onUnderflowStatusEvent( )
// 1) get the text of the other guy and add it to the last paragraph
// XXX: For now it's not merging anything just adding the while thing as a separate para
OutlinerParaObject *pNextLinkWholeText = pNextLink->GetOutlinerParaObject();
- if (pNextLinkWholeText) {
- OutlinerParaObject *pCurText;
+ if (!pNextLinkWholeText)
+ return;
+
+ OutlinerParaObject *pCurText;
- pCurText = pEdtOutl->CreateParaObject();
+ pCurText = pEdtOutl->CreateParaObject();
- // NewTextForCurBox = Txt(CurBox) ++ Txt(NextBox)
- aDrawOutliner.SetText(*pCurText);
- aDrawOutliner.AddText(*pNextLinkWholeText);
- OutlinerParaObject *pNewText = aDrawOutliner.CreateParaObject();
+ // NewTextForCurBox = Txt(CurBox) ++ Txt(NextBox)
+ // prepare for checking overflow
+ aDrawOutliner.SetUpdateMode(true);
+ aDrawOutliner.SetMaxAutoPaperSize(pEdtOutl->GetMaxAutoPaperSize());
+ aDrawOutliner.SetText(*pCurText);
+ aDrawOutliner.AddText(*pNextLinkWholeText);
- // 2) Set the text of the next guy to what is left
- // (since this happens automatically by overflow we just "order to" reset the destination box's text)
- GetTextChain()->SetOverwriteOnOverflow(pNextLink, true);
+ bool bIsOverflowFromUnderflow = aDrawOutliner.IsPageOverflow();
- // We make sure we don't handle underflow while handling underflow
- GetTextChain()->SetLinkHandlingUnderflow(this, true);
+ OutlinerParaObject *pNewText = aDrawOutliner.CreateParaObject();
- // Set the other box empty so if overflow does not occur we are fine
- pNextLink->NbcSetOutlinerParaObject(aDrawOutliner.GetEmptyParaObject());
+ // 2) Set the text of the next guy to what is left
+ // (since this happens automatically by overflow we just "order to" reset the destination box's text)
+ GetTextChain()->SetOverwriteOnOverflow(pNextLink, true);
- /*
- if (pEdtOutl != NULL)
- pEdtOutl->SetText(*pNewText);
- */
+ // We make sure we don't handle underflow while handling underflow
+ //GetTextChain()->SetLinkHandlingUnderflow(this, true);
+ // Set the other box empty so if overflow does not occur we are fine
+ pNextLink->NbcSetOutlinerParaObject(aDrawOutliner.GetEmptyParaObject());
+
+ // handle overflow
+ if (bIsOverflowFromUnderflow) {
+ // prevents infinite loops when setting text for editing outliner
+ GetTextChain()->SetNilChainingEvent(const_cast<SdrTextObj*>(this), true);
+ impLeaveOnlyNonOverflowingText(&aDrawOutliner);
+ impMoveChainedTextToNextLink(&aDrawOutliner, pNextLink);
+ } else {
const_cast<SdrTextObj*>(this)->SetOutlinerParaObject(pNewText);
}
+
+ /*
+ if (pEdtOutl != NULL)
+ pEdtOutl->SetText(*pNewText);
+ */
+
+ // Don't need this if handling everything here
+ //const_cast<SdrTextObj*>(this)->SetOutlinerParaObject(pNewText);
+
}
diff --git a/svx/source/svdraw/svdotextdecomposition.cxx b/svx/source/svdraw/svdotextdecomposition.cxx
index 6b00aacc..2ad4c40 100644
--- a/svx/source/svdraw/svdotextdecomposition.cxx
+++ b/svx/source/svdraw/svdotextdecomposition.cxx
@@ -783,10 +783,11 @@ void SdrTextObj::impLeaveOnlyNonOverflowingText(SdrOutliner *pOutliner) const
{
OutlinerParaObject *pNewText = impGetNonOverflowingParaObject(pOutliner);
- bool bInUnderflow = GetTextChain()->GetLinkHandlingUnderflow(const_cast<SdrTextObj*>(this));
+ //bool bInUnderflow = GetTextChain()->GetLinkHandlingUnderflow(const_cast<SdrTextObj*>(this));
// we need this when we are in editing mode (AND this is not an underflow-caused overflow)
- if (pEdtOutl != NULL && !bInUnderflow)
+ if (pEdtOutl != NULL /* && !bInUnderflow */) {
pEdtOutl->SetText(*pNewText);
+ }
// adds it to current outliner anyway (useful in static decomposition)
pOutliner->SetText(*pNewText);
/*if (bInUnderflow) // must make a broadcast to reset underflow (XXX: can I reset it from here?)
More information about the Libreoffice-commits
mailing list