diff options
author | Serge Krot <Serge.Krot@cib.de> | 2020-01-03 20:08:45 +0100 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2020-01-07 05:56:19 +0100 |
commit | e88a993b5b0a1a6245a0ae9e1d1e9f365ec7cba3 (patch) | |
tree | 9d74e5d4560c7ad49506724ec50df4c37dc138f9 /svx/source | |
parent | e4a58d8df28451952d55604b1ab97b55467b6e05 (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/source')
-rw-r--r-- | svx/source/accessibility/AccessibleShape.cxx | 15 | ||||
-rw-r--r-- | svx/source/inc/cell.hxx | 3 | ||||
-rw-r--r-- | svx/source/sdr/primitive2d/sdrattributecreator.cxx | 4 | ||||
-rw-r--r-- | svx/source/svdraw/svdotext.cxx | 11 | ||||
-rw-r--r-- | svx/source/table/accessiblecell.cxx | 12 | ||||
-rw-r--r-- | svx/source/table/cell.cxx | 20 | ||||
-rw-r--r-- | svx/source/table/tablertfexporter.cxx | 2 | ||||
-rw-r--r-- | svx/source/unodraw/unoshtxt.cxx | 4 |
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; |