summaryrefslogtreecommitdiff
path: root/svx
diff options
context:
space:
mode:
authorSerge Krot <Serge.Krot@cib.de>2020-01-03 20:08:45 +0100
committerNoel Grandin <noel.grandin@collabora.co.uk>2020-01-07 05:56:19 +0100
commite88a993b5b0a1a6245a0ae9e1d1e9f365ec7cba3 (patch)
tree9d74e5d4560c7ad49506724ec50df4c37dc138f9 /svx
parente4a58d8df28451952d55604b1ab97b55467b6e05 (diff)
tdf#129708 speed-up: check if we could create outline instead of creation of it
Change-Id: I0629b4e6ccae4ab9be0142fe39c627f2f9a8f5ea Reviewed-on: https://gerrit.libreoffice.org/c/core/+/86199 Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk> Tested-by: Jenkins Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de> (cherry picked from commit 92ccf53b2a8102299ac2c3e2612bb507d3a79c0f) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/86278
Diffstat (limited to 'svx')
-rw-r--r--svx/source/accessibility/AccessibleShape.cxx15
-rw-r--r--svx/source/inc/cell.hxx3
-rw-r--r--svx/source/sdr/primitive2d/sdrattributecreator.cxx4
-rw-r--r--svx/source/svdraw/svdotext.cxx11
-rw-r--r--svx/source/table/accessiblecell.cxx12
-rw-r--r--svx/source/table/cell.cxx20
-rw-r--r--svx/source/table/tablertfexporter.cxx2
-rw-r--r--svx/source/unodraw/unoshtxt.cxx4
8 files changed, 33 insertions, 38 deletions
diff --git a/svx/source/accessibility/AccessibleShape.cxx b/svx/source/accessibility/AccessibleShape.cxx
index 3e181647808b..debd4fa7243e 100644
--- a/svx/source/accessibility/AccessibleShape.cxx
+++ b/svx/source/accessibility/AccessibleShape.cxx
@@ -159,18 +159,10 @@ void AccessibleShape::Init()
if( pSdrObject )
{
SdrTextObj* pTextObj = dynamic_cast<SdrTextObj*>( pSdrObject );
- OutlinerParaObject* pOutlinerParaObject = nullptr;
-
- if( pTextObj )
- pOutlinerParaObject = pTextObj->GetEditOutlinerParaObject().release(); // Get the OutlinerParaObject if text edit is active
-
- bool bOwnParaObj = pOutlinerParaObject != nullptr;
-
- if (!pOutlinerParaObject)
- pOutlinerParaObject = pSdrObject->GetOutlinerParaObject();
+ const bool hasOutlinerParaObject = pTextObj->CanCreateEditOutlinerParaObject() || pSdrObject->GetOutlinerParaObject() != nullptr;
// create AccessibleTextHelper to handle this shape's text
- if( !pOutlinerParaObject )
+ if( !hasOutlinerParaObject )
{
// empty text -> use proxy edit source to delay creation of EditEngine
mpText.reset( new AccessibleTextHelper( std::make_unique<AccessibleEmptyEditSource >(*pSdrObject, *pView, *pWindow) ) );
@@ -183,9 +175,6 @@ void AccessibleShape::Init()
if( pWindow->HasFocus() )
mpText->SetFocus();
- if( bOwnParaObj )
- delete pOutlinerParaObject;
-
mpText->SetEventSource(this);
}
}
diff --git a/svx/source/inc/cell.hxx b/svx/source/inc/cell.hxx
index 0eb09149ffcb..a0c3d1a7e73e 100644
--- a/svx/source/inc/cell.hxx
+++ b/svx/source/inc/cell.hxx
@@ -71,7 +71,8 @@ public:
SVX_DLLPRIVATE const ::tools::Rectangle& getCellRect() const { return maCellRect; }
SVX_DLLPRIVATE ::tools::Rectangle& getCellRect() { return maCellRect; }
- std::unique_ptr<OutlinerParaObject> GetEditOutlinerParaObject() const;
+ bool CanCreateEditOutlinerParaObject() const;
+ std::unique_ptr<OutlinerParaObject> CreateEditOutlinerParaObject() const;
SVX_DLLPRIVATE void SetStyleSheet( SfxStyleSheet* pStyleSheet, bool bDontRemoveHardAttr );
SVX_DLLPRIVATE virtual SfxStyleSheet* GetStyleSheet() const override;
SVX_DLLPRIVATE void TakeTextAnchorRect(tools::Rectangle& rAnchorRect) const;
diff --git a/svx/source/sdr/primitive2d/sdrattributecreator.cxx b/svx/source/sdr/primitive2d/sdrattributecreator.cxx
index fb4b8407297f..cb9c2f50c909 100644
--- a/svx/source/sdr/primitive2d/sdrattributecreator.cxx
+++ b/svx/source/sdr/primitive2d/sdrattributecreator.cxx
@@ -546,7 +546,7 @@ namespace drawinglayer
if(bInEditMode)
{
- std::unique_ptr<OutlinerParaObject> pTempObj = rTextObj.GetEditOutlinerParaObject();
+ std::unique_ptr<OutlinerParaObject> pTempObj = rTextObj.CreateEditOutlinerParaObject();
if(pTempObj)
{
@@ -555,7 +555,7 @@ namespace drawinglayer
else
{
// #i100537#
- // GetEditOutlinerParaObject() returning no object does not mean that
+ // CreateEditOutlinerParaObject() returning no object does not mean that
// text edit mode is not active. Do not reset the flag here
// bInEditMode = false;
}
diff --git a/svx/source/svdraw/svdotext.cxx b/svx/source/svdraw/svdotext.cxx
index c593b9a2beaa..4ce65ca33f61 100644
--- a/svx/source/svdraw/svdotext.cxx
+++ b/svx/source/svdraw/svdotext.cxx
@@ -805,7 +805,16 @@ void SdrTextObj::TakeTextRect( SdrOutliner& rOutliner, tools::Rectangle& rTextRe
rTextRect=aAnkRect;
}
-std::unique_ptr<OutlinerParaObject> SdrTextObj::GetEditOutlinerParaObject() const
+bool SdrTextObj::CanCreateEditOutlinerParaObject() const
+{
+ if( HasTextImpl( pEdtOutl ) )
+ {
+ return pEdtOutl->GetParagraphCount() > 0;
+ }
+ return false;
+}
+
+std::unique_ptr<OutlinerParaObject> SdrTextObj::CreateEditOutlinerParaObject() const
{
std::unique_ptr<OutlinerParaObject> pPara;
if( HasTextImpl( pEdtOutl ) )
diff --git a/svx/source/table/accessiblecell.cxx b/svx/source/table/accessiblecell.cxx
index 60942150bdf6..77c91a0db481 100644
--- a/svx/source/table/accessiblecell.cxx
+++ b/svx/source/table/accessiblecell.cxx
@@ -73,15 +73,8 @@ void AccessibleCell::Init()
const vcl::Window* pWindow = maShapeTreeInfo.GetWindow ();
if( (pView != nullptr) && (pWindow != nullptr) && mxCell.is())
{
- OutlinerParaObject* pOutlinerParaObject = mxCell->GetEditOutlinerParaObject().release(); // Get the OutlinerParaObject if text edit is active
-
- bool bOwnParaObject = pOutlinerParaObject != nullptr;
-
- if( !pOutlinerParaObject )
- pOutlinerParaObject = mxCell->GetOutlinerParaObject();
-
// create AccessibleTextHelper to handle this shape's text
- if( pOutlinerParaObject )
+ if( mxCell->CanCreateEditOutlinerParaObject() || mxCell->GetOutlinerParaObject() != nullptr )
{
// non-empty text -> use full-fledged edit source right away
@@ -90,9 +83,6 @@ void AccessibleCell::Init()
mpText->SetFocus();
mpText->SetEventSource(this);
}
-
- if( bOwnParaObject)
- delete pOutlinerParaObject;
}
}
diff --git a/svx/source/table/cell.cxx b/svx/source/table/cell.cxx
index 03b52f66b953..32c0cd09c6be 100644
--- a/svx/source/table/cell.cxx
+++ b/svx/source/table/cell.cxx
@@ -231,7 +231,7 @@ namespace sdr
if( mxCell.is() )
{
- OutlinerParaObject* pParaObj = mxCell->GetEditOutlinerParaObject().release();
+ OutlinerParaObject* pParaObj = mxCell->CreateEditOutlinerParaObject().release();
const bool bOwnParaObj = pParaObj != nullptr;
@@ -311,7 +311,7 @@ namespace sdr
rObj.SetVerticalWriting(bVertical);
// Set a cell vertical property
- OutlinerParaObject* pParaObj = mxCell->GetEditOutlinerParaObject().release();
+ OutlinerParaObject* pParaObj = mxCell->CreateEditOutlinerParaObject().release();
const bool bOwnParaObj = pParaObj != nullptr;
@@ -332,7 +332,7 @@ namespace sdr
const SvxTextRotateItem* pRotateItem = static_cast<const SvxTextRotateItem*>(pNewItem);
// Set a cell vertical property
- OutlinerParaObject* pParaObj = mxCell->GetEditOutlinerParaObject().release();
+ OutlinerParaObject* pParaObj = mxCell->CreateEditOutlinerParaObject().release();
const bool bOwnParaObj = pParaObj != nullptr;
@@ -596,8 +596,7 @@ bool Cell::IsTextEditActive() const
SdrTableObj& rTableObj = dynamic_cast< SdrTableObj& >( GetObject() );
if(rTableObj.getActiveCell().get() == this )
{
- std::unique_ptr<OutlinerParaObject> pParaObj = rTableObj.GetEditOutlinerParaObject();
- if( pParaObj != nullptr )
+ if( rTableObj.CanCreateEditOutlinerParaObject() )
{
isActive = true;
}
@@ -626,12 +625,19 @@ bool Cell::hasText() const
return false;
}
+bool Cell::CanCreateEditOutlinerParaObject() const
+{
+ SdrTableObj& rTableObj = dynamic_cast< SdrTableObj& >( GetObject() );
+ if( rTableObj.getActiveCell().get() == this )
+ return rTableObj.CanCreateEditOutlinerParaObject();
+ return false;
+}
-std::unique_ptr<OutlinerParaObject> Cell::GetEditOutlinerParaObject() const
+std::unique_ptr<OutlinerParaObject> Cell::CreateEditOutlinerParaObject() const
{
SdrTableObj& rTableObj = dynamic_cast< SdrTableObj& >( GetObject() );
if( rTableObj.getActiveCell().get() == this )
- return rTableObj.GetEditOutlinerParaObject();
+ return rTableObj.CreateEditOutlinerParaObject();
return nullptr;
}
diff --git a/svx/source/table/tablertfexporter.cxx b/svx/source/table/tablertfexporter.cxx
index 3bcba8d8e0cf..abefdf53a101 100644
--- a/svx/source/table/tablertfexporter.cxx
+++ b/svx/source/table/tablertfexporter.cxx
@@ -174,7 +174,7 @@ void SdrTableRtfExporter::WriteCell( sal_Int32 nCol, sal_Int32 nRow )
OUString aContent;
- OutlinerParaObject* pParaObj = xCell->GetEditOutlinerParaObject().release();
+ OutlinerParaObject* pParaObj = xCell->CreateEditOutlinerParaObject().release();
bool bOwnParaObj = pParaObj != nullptr;
if( pParaObj == nullptr )
diff --git a/svx/source/unodraw/unoshtxt.cxx b/svx/source/unodraw/unoshtxt.cxx
index 64e13012ac86..adabc3c061ec 100644
--- a/svx/source/unodraw/unoshtxt.cxx
+++ b/svx/source/unodraw/unoshtxt.cxx
@@ -538,7 +538,7 @@ SvxTextForwarder* SvxTextEditSourceImpl::GetBackgroundTextForwarder()
OutlinerParaObject* pOutlinerParaObject = nullptr;
SdrTextObj* pTextObj = dynamic_cast<SdrTextObj*>( mpObject );
if( pTextObj && pTextObj->getActiveText() == mpText )
- pOutlinerParaObject = pTextObj->GetEditOutlinerParaObject().release(); // Get the OutlinerParaObject if text edit is active
+ pOutlinerParaObject = pTextObj->CreateEditOutlinerParaObject().release(); // Get the OutlinerParaObject if text edit is active
bool bOwnParaObj(false);
if( pOutlinerParaObject )
@@ -666,7 +666,7 @@ SvxTextForwarder* SvxTextEditSourceImpl::GetTextForwarder()
bool bTextEditActive = false;
SdrTextObj* pTextObj = dynamic_cast<SdrTextObj*>(mpObject);
// similar to the GetBackgroundTextForwarder check, see if the text edit is active
- if (pTextObj && pTextObj->getActiveText() == mpText && pTextObj->GetEditOutlinerParaObject())
+ if (pTextObj && pTextObj->getActiveText() == mpText && pTextObj->CanCreateEditOutlinerParaObject())
bTextEditActive = true; // text edit active
if (bTextEditActive)
mbDataValid = false;