include/svx/textchainflow.hxx | 2 + svx/source/svdraw/svdotext.cxx | 42 ++++++++++++++++++++++++++++ svx/source/svdraw/svdotextdecomposition.cxx | 3 +- 3 files changed, 46 insertions(+), 1 deletion(-)
New commits: commit cb012b74d38f963f89eb1e16c6687e8f63f7bddb Author: matteocam <matteo.campane...@gmail.com> Date: Mon Jun 29 02:19:38 2015 -0400 TextChainFlow used for OF/UF in editing mode too Change-Id: If894d1e27240d5c7c7b37ed5cfcf2a9b468c81db diff --git a/include/svx/textchainflow.hxx b/include/svx/textchainflow.hxx index e581965..d76f371 100644 --- a/include/svx/textchainflow.hxx +++ b/include/svx/textchainflow.hxx @@ -41,6 +41,8 @@ class TextChainFlow { bool IsUnderflow(); void ExecuteUnderflow(SdrOutliner *); + + // Uses two outliners: one for the non-overfl text and one for overflowing (might be the same) void ExecuteOverflow(SdrOutliner *, SdrOutliner *); protected: diff --git a/svx/source/svdraw/svdotext.cxx b/svx/source/svdraw/svdotext.cxx index 1e8d526..8b47a40 100644 --- a/svx/source/svdraw/svdotext.cxx +++ b/svx/source/svdraw/svdotext.cxx @@ -2040,6 +2040,8 @@ void SdrTextObj::onUnderflowStatusEvent( ) void SdrTextObj::onChainingEvent() { + + if (!IsChainable() || GetNextLinkInChain() == NULL) return; @@ -2052,6 +2054,46 @@ void SdrTextObj::onChainingEvent() return; } + // Outliner for text transfer + SdrOutliner &aDrawOutliner = ImpGetDrawOutliner(); + + // XXX: Specializing the class? + // OBS: you don't need all the "setting parameters" crap for underflow with this + TextChainFlow aTxtChainFlow(this); + aTxtChainFlow.CheckForFlowEvents(pEdtOutl, NULL); + + + if (aTxtChainFlow.IsOverflow()) { + fprintf(stderr, "Overflow going on\n"); + + // One outliner is for non-overflowing text, the other for overflowing text + // In this case they can both be the drawing outliner + aTxtChainFlow.ExecuteOverflow(&aDrawOutliner, &aDrawOutliner); + } else if (aTxtChainFlow.IsUnderflow()) { + fprintf(stderr, "Underflow going on\n"); + // underflow-induced overflow + aTxtChainFlow.ExecuteUnderflow(&aDrawOutliner); + bool bIsOverflowFromUnderflow = aTxtChainFlow.IsOverflow(); + + // handle overflow + if (bIsOverflowFromUnderflow) { + fprintf(stderr, "Overflow going on (underflow induced)\n"); + // prevents infinite loops when setting text for editing outliner + GetTextChain()->SetNilChainingEvent(const_cast<SdrTextObj*>(this), true); + + aTxtChainFlow.ExecuteOverflow(&aDrawOutliner, &aDrawOutliner); + } + // Probably not necessary + //else { + // // No overflow: set the whole thing + // const_cast<SdrTextObj*>(this)->SetOutlinerParaObject(pNewText); + //} + } + + return; + + // Begin old code + bool bIsPageOverflow; bIsPageOverflow = pEdtOutl->IsPageOverflow(); diff --git a/svx/source/svdraw/svdotextdecomposition.cxx b/svx/source/svdraw/svdotextdecomposition.cxx index 2ba2012..0479632 100644 --- a/svx/source/svdraw/svdotextdecomposition.cxx +++ b/svx/source/svdraw/svdotextdecomposition.cxx @@ -1654,6 +1654,7 @@ void SdrTextObj::impDecomposeChainedTextPrimitive( aTxtChainFlow.ExecuteUnderflow(&rOutliner); bIsOverflow = aTxtChainFlow.IsOverflow(); } else { + // standard overflow (no underlow before) bIsOverflow = aTxtChainFlow.IsOverflow(); } @@ -1662,7 +1663,7 @@ void SdrTextObj::impDecomposeChainedTextPrimitive( SdrOutliner &rChainingOutl = pModel->GetChainingOutliner(this); ImpInitDrawOutliner( rChainingOutl ); rChainingOutl.SetUpdateMode(true); - + // We must pass the chaining outliner otherwise we would mess up decomposition aTxtChainFlow.ExecuteOverflow(&rOutliner, &rChainingOutl); } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits