[Libreoffice-commits] core.git: Branch 'feature/gsoc14-draw-chained-text-boxes' - editeng/source include/editeng include/svx svx/source
matteocam
matteo.campanelli at gmail.com
Wed Jul 8 20:07:09 PDT 2015
editeng/source/outliner/overflowingtxt.cxx | 10 +++++
include/editeng/overflowingtxt.hxx | 4 +-
include/svx/textchainflow.hxx | 11 ++++-
svx/source/svdraw/svdedxv.cxx | 2 -
svx/source/svdraw/textchainflow.cxx | 57 ++++++++++++++++-------------
5 files changed, 53 insertions(+), 31 deletions(-)
New commits:
commit b0273e17cdf5a0f0877c3bc64543b333727cfdc7
Author: matteocam <matteo.campanelli at gmail.com>
Date: Wed Jul 8 23:06:07 2015 -0400
Test for actual cursor overflow
Change-Id: Ia306b8ee15d986c773787a500a23a886caf20087
diff --git a/editeng/source/outliner/overflowingtxt.cxx b/editeng/source/outliner/overflowingtxt.cxx
index 03ed385..304e04b 100644
--- a/editeng/source/outliner/overflowingtxt.cxx
+++ b/editeng/source/outliner/overflowingtxt.cxx
@@ -126,6 +126,16 @@ OFlowChainedText::OFlowChainedText(Outliner *pOutl)
mpNonOverflowingTxt = pOutl->GetNonOverflowingText();
}
+ESelection OFlowChainedText::GetInsertionPointSel() const
+{
+ return mpOverflowingTxt->GetInsertionPointSel();
+}
+
+ESelection OFlowChainedText::GetOverflowPointSel() const
+{
+ return mpNonOverflowingTxt->GetOverflowPointSel();
+}
+
OutlinerParaObject *OFlowChainedText::CreateOverflowingParaObject(Outliner *pOutliner, OutlinerParaObject *pTextToBeMerged)
{
// Just return the roughly merged paras fpr now
diff --git a/include/editeng/overflowingtxt.hxx b/include/editeng/overflowingtxt.hxx
index 7faa9a9..4e97fcc 100644
--- a/include/editeng/overflowingtxt.hxx
+++ b/include/editeng/overflowingtxt.hxx
@@ -49,7 +49,6 @@ private:
OverflowingText(EditTextObject *pTObj);
const EditTextObject *mpContentTextObj;
- ESelection maInsertionPointSel;
};
class NonOverflowingText {
@@ -81,7 +80,8 @@ class EDITENG_DLLPUBLIC OFlowChainedText {
OutlinerParaObject *CreateOverflowingParaObject(Outliner *, OutlinerParaObject *);
OutlinerParaObject *CreateNonOverflowingParaObject(Outliner *);
- ESelection GetInsertionPointSel() const { return mpOverflowingTxt->GetInsertionPointSel(); }
+ ESelection GetInsertionPointSel() const;
+ ESelection GetOverflowPointSel() const;
protected:
void impSetOutlinerToEmptyTxt(Outliner *);
diff --git a/include/svx/textchainflow.hxx b/include/svx/textchainflow.hxx
index b2373e8..00a04f3 100644
--- a/include/svx/textchainflow.hxx
+++ b/include/svx/textchainflow.hxx
@@ -62,7 +62,12 @@ class TextChainFlow {
// -- Protected Members --
protected:
+
+ // Cursor related
+ bool mbPossiblyCursorOut;
CursorChainingEvent maCursorEvent;
+ ESelection maOverflowPosSel;
+
void impCheckForFlowEvents(SdrOutliner *, SdrOutliner *);
@@ -80,8 +85,10 @@ class TextChainFlow {
// -- Private Members --
private:
+ // XXX: It would be nice to get rid of this
+ bool mbOFisUFinduced;
- void impUpdateCursorInfo(SdrOutliner *, bool);
+ void impUpdateCursorInfo();
SdrTextObj *mpTargetLink;
SdrTextObj *mpNextLink;
@@ -96,8 +103,6 @@ class TextChainFlow {
OFlowChainedText *mpOverflChText;
UFlowChainedText *mpUnderflChText;
- // XXX: It would be nice to get rid of this
- bool mbOFisUFinduced;
};
diff --git a/svx/source/svdraw/svdedxv.cxx b/svx/source/svdraw/svdedxv.cxx
index d893dab..16373c3 100644
--- a/svx/source/svdraw/svdedxv.cxx
+++ b/svx/source/svdraw/svdedxv.cxx
@@ -499,7 +499,7 @@ IMPL_LINK_NOARG(SdrObjEditView,ImpChainingEventHdl)
// We prevent to trigger further handling of overflow/underflow for pTextObj
pTextChain->SetNilChainingEvent(pTextObj, true);
- // Save previous selection pos
+ // Save previous selection pos // NOTE: It must be done to have the right CursorEvent in KeyInput
pTextChain->SetPreChainingSel(pTextObj, pOLV->GetSelection());
//maPreChainingSel = new ESelection(pOLV->GetSelection());
diff --git a/svx/source/svdraw/textchainflow.cxx b/svx/source/svdraw/textchainflow.cxx
index 161e615..1df7fe3 100644
--- a/svx/source/svdraw/textchainflow.cxx
+++ b/svx/source/svdraw/textchainflow.cxx
@@ -38,7 +38,8 @@ TextChainFlow::TextChainFlow(SdrTextObj *pChainTarget)
mpOverflChText = NULL;
mpUnderflChText = NULL;
- maCursorEvent = CursorChainingEvent::UNCHANGED;
+ maCursorEvent = CursorChainingEvent::NULL_EVENT;
+ mbPossiblyCursorOut = false;
}
@@ -79,8 +80,6 @@ void TextChainFlow::impCheckForFlowEvents(SdrOutliner *pFlowOutl, SdrOutliner *p
bOverflow = bIsPageOverflow && mpNextLink;
bUnderflow = !bIsPageOverflow && mpNextLink && mpNextLink->HasText();
- impUpdateCursorInfo(pFlowOutl, bOverflow);
-
if (pParamOutl != NULL)
{
pFlowOutl->SetUpdateMode(bOldUpdateMode);
@@ -92,22 +91,22 @@ void TextChainFlow::impCheckForFlowEvents(SdrOutliner *pFlowOutl, SdrOutliner *p
// Set current underflowing text (if any)
mpUnderflChText = bUnderflow ? new UFlowChainedText(pFlowOutl) : NULL;
+ // NOTE: Must be called after mp*ChText abd b*flow have been set but before mbOFisUFinduced is reset
+ impUpdateCursorInfo();
+
// To check whether an overflow is underflow induced or not (useful in cursor checking)
mbOFisUFinduced = bUnderflow;
}
-void TextChainFlow::impUpdateCursorInfo(SdrOutliner *, bool bIsOverflow)
+void TextChainFlow::impUpdateCursorInfo()
{
// XXX: Maybe we can get rid of mbOFisUFinduced by not allowing handling of more than one event by the same TextChainFlow
// if this is not an OF triggered during an UF
- if (bIsOverflow && !mbOFisUFinduced) {
- bool bCursorOut = true; // XXX: Should have real check
- if (bCursorOut) {
- maCursorEvent = CursorChainingEvent::TO_NEXT_LINK;
- }
- } else {
- maCursorEvent = CursorChainingEvent::UNCHANGED;
+
+ mbPossiblyCursorOut = bOverflow && !mbOFisUFinduced;
+ if (mbPossiblyCursorOut) {
+ maOverflowPosSel = ESelection(mpOverflChText->GetOverflowPointSel());
}
}
@@ -285,21 +284,29 @@ void EditingTextChainFlow::impSetFlowOutlinerParams(SdrOutliner *pFlowOutl, SdrO
//pFlowOutl->SetEditTextObjectPool(pParamOutl->GetEditTextObjectPool());
}
-void EditingTextChainFlow::impBroadcasCursorInfo() const
+void EditingTextChainFlow::impBroadcastCursorInfo() const
{
- GetTextChain()->SetCursorEvent(GetLinkTarget(), maCursorEvent);
-}
+ bool bCursorOut = false;
-/*
- *
- * Some notes on how to set style sheets:
- * - save whole edittexts instead of strings only for (Non)OverflowingText; this can be done by the EditEngine::CreateTextObject method and using a selection - probably from ImpEditEngine)
- * - for the refactoring of the previous point we may also add an option for whether we are joining paragraphs or not
- * - When making new OutlinerParaObjs and joining paragraphs we need to first add the string (as we already do) and then, with the appropriate selection, use Outliner::QuickSetAttribs(SfxItemSet(txtObj->GetPool()), aSelectionOfTheNewText)
- * - having all this in a whole class that contains Overflowing and NonOverflowingText would not be bad. This same class could be used to handle a cursor later on.
- *
- *
- *
- */
+ // Possibility: 1) why don't we stop passing the actual event to the TextChain and instead we pass
+ // the overflow pos and mbPossiblyCursorOut
+ // 2) We pass the current selection before anything happens and we make impBroadcastCursorInfo compute it.
+
+ if (mbPossiblyCursorOut) {
+ ESelection aPreChainingSel = GetTextChain()->GetPreChainingSel(GetLinkTarget()) ;
+ bCursorOut = maOverflowPosSel.IsLess(aPreChainingSel);
+ }
+
+ if (bCursorOut) {
+ //maCursorEvent = CursorChainingEvent::TO_NEXT_LINK;
+ // XXX: GetTextChain()->SetPostChainingPos()sdasd)
+ GetTextChain()->SetCursorEvent(GetLinkTarget(), CursorChainingEvent::TO_NEXT_LINK);
+ } else {
+ //maCursorEvent = CursorChainingEvent::UNCHANGED;
+ GetTextChain()->SetCursorEvent(GetLinkTarget(), CursorChainingEvent::UNCHANGED);
+ }
+
+
+}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
More information about the Libreoffice-commits
mailing list