diff options
Diffstat (limited to 'editeng/source/outliner/outliner.cxx')
-rw-r--r-- | editeng/source/outliner/outliner.cxx | 290 |
1 files changed, 131 insertions, 159 deletions
diff --git a/editeng/source/outliner/outliner.cxx b/editeng/source/outliner/outliner.cxx index 9c474131352c..671ecd017cfd 100644 --- a/editeng/source/outliner/outliner.cxx +++ b/editeng/source/outliner/outliner.cxx @@ -30,7 +30,7 @@ #include <editeng/outliner.hxx> #include "paralist.hxx" #include <editeng/outlobj.hxx> -#include "outleeng.hxx" +#include <outleeng.hxx> #include "outlundo.hxx" #include <editeng/eeitem.hxx> #include <editeng/editstat.hxx> @@ -40,7 +40,6 @@ #include <vcl/metric.hxx> #include <editeng/numitem.hxx> #include <editeng/adjustitem.hxx> -#include <vcl/window.hxx> #include <vcl/GraphicObject.hxx> #include <editeng/svxfont.hxx> #include <editeng/brushitem.hxx> @@ -48,6 +47,8 @@ #include <libxml/xmlwriter.h> #include <sal/log.hxx> #include <o3tl/safeint.hxx> +#include <o3tl/string_view.hxx> +#include <o3tl/temporary.hxx> #include <osl/diagnose.h> #include <memory> @@ -92,8 +93,7 @@ Paragraph* Outliner::Insert(const OUString& rText, sal_Int32 nAbsPos, sal_Int16 } else { - bool bUpdate = pEditEngine->GetUpdateMode(); - pEditEngine->SetUpdateMode( false ); + bool bUpdate = pEditEngine->SetUpdateLayout( false ); ImplBlockInsertionCallbacks( true ); pPara = new Paragraph( nDepth ); pParaList->Insert( std::unique_ptr<Paragraph>(pPara), nAbsPos ); @@ -104,7 +104,7 @@ Paragraph* Outliner::Insert(const OUString& rText, sal_Int32 nAbsPos, sal_Int16 pPara->nFlags |= ParaFlag::HOLDDEPTH; SetText( rText, pPara ); ImplBlockInsertionCallbacks( false ); - pEditEngine->SetUpdateMode( bUpdate ); + pEditEngine->SetUpdateLayout( bUpdate ); } bFirstParaIsEmpty = false; DBG_ASSERT(pEditEngine->GetParagraphCount()==pParaList->GetParagraphCount(),"SetText failed"); @@ -124,7 +124,6 @@ void Outliner::ParagraphInserted( sal_Int32 nPara ) pParaList->Insert( std::unique_ptr<Paragraph>(pPara), nPara ); if( pEditEngine->IsInUndo() ) { - pPara->nFlags = ParaFlag::SETBULLETTEXT; pPara->bVisible = true; const SfxInt16Item& rLevel = pEditEngine->GetParaAttrib( nPara, EE_PARA_OUTLLEVEL ); pPara->SetDepth( rLevel.GetValue() ); @@ -194,7 +193,7 @@ void Outliner::Init( OutlinerMode nMode ) SetMaxDepth( 9 ); - switch ( ImplGetOutlinerMode() ) + switch ( GetOutlinerMode() ) { case OutlinerMode::TextObject: case OutlinerMode::TitleObject: @@ -249,13 +248,13 @@ void Outliner::SetDepth( Paragraph* pPara, sal_Int16 nNewDepth ) ImplInitDepth( nPara, nNewDepth, true ); ImplCalcBulletText( nPara, false, false ); - if ( ImplGetOutlinerMode() == OutlinerMode::OutlineObject ) + if ( GetOutlinerMode() == OutlinerMode::OutlineObject ) ImplSetLevelDependentStyleSheet( nPara ); DepthChangedHdl(pPara, nPrevFlags); } -sal_Int16 Outliner::GetNumberingStartValue( sal_Int32 nPara ) +sal_Int16 Outliner::GetNumberingStartValue( sal_Int32 nPara ) const { Paragraph* pPara = pParaList->GetParagraph( nPara ); DBG_ASSERT( pPara, "Outliner::GetNumberingStartValue - Paragraph not found!" ); @@ -279,7 +278,7 @@ void Outliner::SetNumberingStartValue( sal_Int32 nPara, sal_Int16 nNumberingStar } } -bool Outliner::IsParaIsNumberingRestart( sal_Int32 nPara ) +bool Outliner::IsParaIsNumberingRestart( sal_Int32 nPara ) const { Paragraph* pPara = pParaList->GetParagraph( nPara ); DBG_ASSERT( pPara, "Outliner::IsParaIsNumberingRestart - Paragraph not found!" ); @@ -359,9 +358,9 @@ sal_Int32 Outliner::GetBulletsNumberingStatus() const : 2; } -std::unique_ptr<OutlinerParaObject> Outliner::CreateParaObject( sal_Int32 nStartPara, sal_Int32 nCount ) const +std::optional<OutlinerParaObject> Outliner::CreateParaObject( sal_Int32 nStartPara, sal_Int32 nCount ) const { - if ( static_cast<sal_uLong>(nStartPara) + nCount > + if ( static_cast<sal_uInt64>(nStartPara) + nCount > o3tl::make_unsigned(pParaList->GetParagraphCount()) ) nCount = pParaList->GetParagraphCount() - nStartPara; @@ -371,10 +370,10 @@ std::unique_ptr<OutlinerParaObject> Outliner::CreateParaObject( sal_Int32 nStart nCount = pEditEngine->GetParagraphCount() - nStartPara; if (nCount <= 0) - return nullptr; + return std::nullopt; std::unique_ptr<EditTextObject> xText = pEditEngine->CreateTextObject( nStartPara, nCount ); - const bool bIsEditDoc(OutlinerMode::TextObject == ImplGetOutlinerMode()); + const bool bIsEditDoc(OutlinerMode::TextObject == GetOutlinerMode()); ParagraphDataVector aParagraphDataVector(nCount); const sal_Int32 nLastPara(nStartPara + nCount - 1); @@ -383,16 +382,16 @@ std::unique_ptr<OutlinerParaObject> Outliner::CreateParaObject( sal_Int32 nStart aParagraphDataVector[nPara-nStartPara] = *GetParagraph(nPara); } - std::unique_ptr<OutlinerParaObject> pPObj(new OutlinerParaObject(std::move(xText), aParagraphDataVector, bIsEditDoc)); - pPObj->SetOutlinerMode(GetMode()); + xText->ClearPortionInfo(); // tdf#147166 the PortionInfo is unwanted here + OutlinerParaObject aPObj(std::move(xText), std::move(aParagraphDataVector), bIsEditDoc); + aPObj.SetOutlinerMode(GetOutlinerMode()); - return pPObj; + return aPObj; } void Outliner::SetToEmptyText() { - std::unique_ptr<OutlinerParaObject> pEmptyTxt = GetEmptyParaObject(); - SetText(*pEmptyTxt); + SetText(GetEmptyParaObject()); } void Outliner::SetText( const OUString& rText, Paragraph* pPara ) @@ -408,8 +407,7 @@ void Outliner::SetText( const OUString& rText, Paragraph* pPara ) return; } - const bool bUpdate = pEditEngine->GetUpdateMode(); - pEditEngine->SetUpdateMode( false ); + const bool bUpdate = pEditEngine->SetUpdateLayout( false ); ImplBlockInsertionCallbacks( true ); if (rText.isEmpty()) @@ -430,7 +428,7 @@ void Outliner::SetText( const OUString& rText, Paragraph* pPara ) // handle empty strings. while( nIdx>=0 && nIdx<aText.getLength() ) { - OUString aStr = aText.getToken( 0, '\x0A', nIdx ); + std::u16string_view aStr = o3tl::getToken(aText, 0, '\x0A', nIdx ); sal_Int16 nCurDepth; if( nPos ) @@ -443,15 +441,15 @@ void Outliner::SetText( const OUString& rText, Paragraph* pPara ) // In the outliner mode, filter the tabs and set the indentation // about a LRSpaceItem. In EditEngine mode intend over old tabs - if( ( ImplGetOutlinerMode() == OutlinerMode::OutlineObject ) || - ( ImplGetOutlinerMode() == OutlinerMode::OutlineView ) ) + if( ( GetOutlinerMode() == OutlinerMode::OutlineObject ) || + ( GetOutlinerMode() == OutlinerMode::OutlineView ) ) { // Extract Tabs - sal_Int32 nTabs = 0; - while ( ( nTabs < aStr.getLength() ) && ( aStr[nTabs] == '\t' ) ) + size_t nTabs = 0; + while ( ( nTabs < aStr.size() ) && ( aStr[nTabs] == '\t' ) ) nTabs++; if ( nTabs ) - aStr = aStr.copy(nTabs); + aStr = aStr.substr(nTabs); // Keep depth? (see Outliner::Insert) if( !(pPara->nFlags & ParaFlag::HOLDDEPTH) ) @@ -459,19 +457,18 @@ void Outliner::SetText( const OUString& rText, Paragraph* pPara ) nCurDepth = nTabs-1; //TODO: sal_Int32 -> sal_Int16! ImplCheckDepth( nCurDepth ); pPara->SetDepth( nCurDepth ); - pPara->nFlags &= ~ParaFlag::HOLDDEPTH; } } if( nPos ) // not with the first paragraph { pParaList->Insert( std::unique_ptr<Paragraph>(pPara), nInsPos ); - pEditEngine->InsertParagraph( nInsPos, aStr ); + pEditEngine->InsertParagraph( nInsPos, OUString(aStr) ); ParagraphInsertedHdl(pPara); } else { nInsPos--; - pEditEngine->SetText( nInsPos, aStr ); + pEditEngine->SetText( nInsPos, OUString(aStr) ); } ImplInitDepth( nInsPos, nCurDepth, false ); nInsPos++; @@ -483,7 +480,7 @@ void Outliner::SetText( const OUString& rText, Paragraph* pPara ) bFirstParaIsEmpty = false; ImplBlockInsertionCallbacks( false ); // Restore the update mode. - pEditEngine->SetUpdateMode(bUpdate, /*bRestoring=*/true); + pEditEngine->SetUpdateLayout(bUpdate, /*bRestoring=*/true); } // pView == 0 -> Ignore tabs @@ -526,8 +523,8 @@ bool Outliner::ImpConvertEdtToOut( sal_Int32 nPara ) } sal_Int32 nPos = nHeadingNumberStart ? nHeadingNumberStart : nNumberingNumberStart; - OUString aLevel = comphelper::string::stripStart(aName.subView(nPos), ' '); - nTabs = aLevel.toInt32(); + std::u16string_view aLevel = comphelper::string::stripStart(aName.subView(nPos), ' '); + nTabs = o3tl::toInt32(aLevel); if( nTabs ) nTabs--; // Level 0 = "heading 1" bConverted = true; @@ -561,9 +558,7 @@ bool Outliner::ImpConvertEdtToOut( sal_Int32 nPara ) void Outliner::SetText( const OutlinerParaObject& rPObj ) { - - bool bUpdate = pEditEngine->GetUpdateMode(); - pEditEngine->SetUpdateMode( false ); + bool bUpdate = pEditEngine->SetUpdateLayout( false ); bool bUndo = pEditEngine->IsUndoEnabled(); EnableUndo( false ); @@ -589,7 +584,7 @@ void Outliner::SetText( const OutlinerParaObject& rPObj ) EnableUndo( bUndo ); ImplBlockInsertionCallbacks( false ); - pEditEngine->SetUpdateMode( bUpdate ); + pEditEngine->SetUpdateLayout( bUpdate ); DBG_ASSERT( pParaList->GetParagraphCount()==rPObj.Count(),"SetText failed"); DBG_ASSERT( pEditEngine->GetParagraphCount()==rPObj.Count(),"SetText failed"); @@ -597,9 +592,7 @@ void Outliner::SetText( const OutlinerParaObject& rPObj ) void Outliner::AddText( const OutlinerParaObject& rPObj, bool bAppend ) { - - bool bUpdate = pEditEngine->GetUpdateMode(); - pEditEngine->SetUpdateMode( false ); + bool bUpdate = pEditEngine->SetUpdateLayout( false ); ImplBlockInsertionCallbacks( true ); sal_Int32 nPara; @@ -638,10 +631,10 @@ void Outliner::AddText( const OutlinerParaObject& rPObj, bool bAppend ) ImplCheckParagraphs( nPara, pParaList->GetParagraphCount() ); ImplBlockInsertionCallbacks( false ); - pEditEngine->SetUpdateMode( bUpdate ); + pEditEngine->SetUpdateLayout( bUpdate ); } -OUString Outliner::CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, std::optional<Color>& rpTxtColor, std::optional<Color>& rpFldColor ) +OUString Outliner::CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, std::optional<Color>& rpTxtColor, std::optional<Color>& rpFldColor, std::optional<FontLineStyle>& rpFldLineStyle ) { if ( !aCalcFieldValueHdl.IsSet() ) return OUString( ' ' ); @@ -657,6 +650,11 @@ OUString Outliner::CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, rpTxtColor = *aFldInfo.GetTextColor(); } + if ( aFldInfo.GetFontLineStyle() ) + { + rpFldLineStyle = *aFldInfo.GetFontLineStyle(); + } + if (aFldInfo.GetFieldColor()) rpFldColor = *aFldInfo.GetFieldColor(); else @@ -671,7 +669,6 @@ void Outliner::SetStyleSheet( sal_Int32 nPara, SfxStyleSheet* pStyle ) if (pPara) { pEditEngine->SetStyleSheet( nPara, pStyle ); - pPara->nFlags |= ParaFlag::SETBULLETTEXT; ImplCheckNumBulletItem( nPara ); } } @@ -686,7 +683,7 @@ void Outliner::ImplCheckNumBulletItem( sal_Int32 nPara ) void Outliner::ImplSetLevelDependentStyleSheet( sal_Int32 nPara ) { - DBG_ASSERT( ( ImplGetOutlinerMode() == OutlinerMode::OutlineObject ) || ( ImplGetOutlinerMode() == OutlinerMode::OutlineView ), "SetLevelDependentStyleSheet: Wrong Mode!" ); + DBG_ASSERT( ( GetOutlinerMode() == OutlinerMode::OutlineObject ) || ( GetOutlinerMode() == OutlinerMode::OutlineView ), "SetLevelDependentStyleSheet: Wrong Mode!" ); SfxStyleSheet* pStyle = GetStyleSheet( nPara ); @@ -731,8 +728,7 @@ void Outliner::ImplInitDepth( sal_Int32 nPara, sal_Int16 nDepth, bool bCreateUnd if( IsInUndo() ) return; - bool bUpdate = pEditEngine->GetUpdateMode(); - pEditEngine->SetUpdateMode( false ); + bool bUpdate = pEditEngine->SetUpdateLayout( false ); bool bUndo = bCreateUndo && IsUndoEnabled(); @@ -747,7 +743,7 @@ void Outliner::ImplInitDepth( sal_Int32 nPara, sal_Int16 nDepth, bool bCreateUnd InsertUndo( std::make_unique<OutlinerUndoChangeDepth>( this, nPara, nOldDepth, nDepth ) ); } - pEditEngine->SetUpdateMode( bUpdate ); + pEditEngine->SetUpdateLayout( bUpdate ); } void Outliner::SetParaAttribs( sal_Int32 nPara, const SfxItemSet& rSet ) @@ -763,56 +759,53 @@ void Outliner::SetCharAttribs(sal_Int32 nPara, const SfxItemSet& rSet) bool Outliner::Expand( Paragraph const * pPara ) { - if ( pParaList->HasHiddenChildren( pPara ) ) + if ( !pParaList->HasHiddenChildren( pPara ) ) + return false; + + std::unique_ptr<OLUndoExpand> pUndo; + bool bUndo = IsUndoEnabled() && !IsInUndo(); + if( bUndo ) { - std::unique_ptr<OLUndoExpand> pUndo; - bool bUndo = IsUndoEnabled() && !IsInUndo(); - if( bUndo ) - { - UndoActionStart( OLUNDO_EXPAND ); - pUndo.reset( new OLUndoExpand( this, OLUNDO_EXPAND ) ); - pUndo->nCount = pParaList->GetAbsPos( pPara ); - } - pParaList->Expand( pPara ); - InvalidateBullet(pParaList->GetAbsPos(pPara)); - if( bUndo ) - { - InsertUndo( std::move(pUndo) ); - UndoActionEnd(); - } - return true; + UndoActionStart( OLUNDO_EXPAND ); + pUndo.reset( new OLUndoExpand( this, OLUNDO_EXPAND ) ); + pUndo->nCount = pParaList->GetAbsPos( pPara ); + } + pParaList->Expand( pPara ); + InvalidateBullet(pParaList->GetAbsPos(pPara)); + if( bUndo ) + { + InsertUndo( std::move(pUndo) ); + UndoActionEnd(); } - return false; + return true; } bool Outliner::Collapse( Paragraph const * pPara ) { - if ( pParaList->HasVisibleChildren( pPara ) ) // expanded - { - std::unique_ptr<OLUndoExpand> pUndo; - bool bUndo = false; + if ( !pParaList->HasVisibleChildren( pPara ) ) // collapsed + return false; - if( !IsInUndo() && IsUndoEnabled() ) - bUndo = true; - if( bUndo ) - { - UndoActionStart( OLUNDO_COLLAPSE ); - pUndo.reset( new OLUndoExpand( this, OLUNDO_COLLAPSE ) ); - pUndo->nCount = pParaList->GetAbsPos( pPara ); - } + std::unique_ptr<OLUndoExpand> pUndo; + bool bUndo = false; - pParaList->Collapse( pPara ); - InvalidateBullet(pParaList->GetAbsPos(pPara)); - if( bUndo ) - { - InsertUndo( std::move(pUndo) ); - UndoActionEnd(); - } - return true; + if( !IsInUndo() && IsUndoEnabled() ) + bUndo = true; + if( bUndo ) + { + UndoActionStart( OLUNDO_COLLAPSE ); + pUndo.reset( new OLUndoExpand( this, OLUNDO_COLLAPSE ) ); + pUndo->nCount = pParaList->GetAbsPos( pPara ); } - return false; -} + pParaList->Collapse( pPara ); + InvalidateBullet(pParaList->GetAbsPos(pPara)); + if( bUndo ) + { + InsertUndo( std::move(pUndo) ); + UndoActionEnd(); + } + return true; +} vcl::Font Outliner::ImpCalcBulletFont( sal_Int32 nPara ) const { @@ -831,7 +824,7 @@ vcl::Font Outliner::ImpCalcBulletFont( sal_Int32 nPara ) const } vcl::Font aBulletFont; - const vcl::Font *pSourceFont = nullptr; + std::optional<vcl::Font> pSourceFont; if ( pFmt->GetNumberingType() == SVX_NUM_CHAR_SPECIAL ) { pSourceFont = pFmt->GetBulletFont(); @@ -852,16 +845,12 @@ vcl::Font Outliner::ImpCalcBulletFont( sal_Int32 nPara ) const } // Use original scale... - sal_uInt16 nStretchX, nStretchY; - GetGlobalCharStretching(nStretchX, nStretchY); - sal_uInt16 nScale = pFmt->GetBulletRelSize() * nStretchY / 100; - sal_uLong nScaledLineHeight = aStdFont.GetFontSize().Height(); - nScaledLineHeight *= nScale*10; - nScaledLineHeight /= 1000; + double fFontScaleY = pFmt->GetBulletRelSize() / 100.0 * getScalingParameters().fFontY; + double fScaledLineHeight = aStdFont.GetFontSize().Height() * fFontScaleY; aBulletFont.SetAlignment( ALIGN_BOTTOM ); - aBulletFont.SetFontSize( Size( 0, nScaledLineHeight ) ); + aBulletFont.SetFontSize(Size(0, basegfx::fround(fScaledLineHeight))); bool bVertical = IsVertical(); aBulletFont.SetVertical( bVertical ); aBulletFont.SetOrientation( Degree10(bVertical ? (IsTopToBottom() ? 2700 : 900) : 0) ); @@ -899,12 +888,13 @@ void Outliner::PaintBullet(sal_Int32 nPara, const Point& rStartPos, const Point& bool bRightToLeftPara = pEditEngine->IsRightToLeft( nPara ); tools::Rectangle aBulletArea( ImpCalcBulletArea( nPara, true, false ) ); - sal_uInt16 nStretchX, nStretchY; - GetGlobalCharStretching(nStretchX, nStretchY); - aBulletArea = tools::Rectangle( Point(aBulletArea.Left()*nStretchX/100, - aBulletArea.Top()), - Size(aBulletArea.GetWidth()*nStretchX/100, - aBulletArea.GetHeight()) ); + + double fSpacingFactorX = getScalingParameters().fSpacingX; + + tools::Long nStretchBulletX = basegfx::fround<tools::Long>(double(aBulletArea.Left()) * fSpacingFactorX); + tools::Long nStretchBulletWidth = basegfx::fround<tools::Long>(double(aBulletArea.GetWidth()) * fSpacingFactorX); + aBulletArea = tools::Rectangle(Point(nStretchBulletX, aBulletArea.Top()), + Size(nStretchBulletWidth, aBulletArea.GetHeight()) ); Paragraph* pPara = pParaList->GetParagraph( nPara ); const SvxNumberFormat* pFmt = GetNumberFormat( nPara ); @@ -949,35 +939,25 @@ void Outliner::PaintBullet(sal_Int32 nPara, const Point& rStartPos, const Point& { // Both TopLeft and bottom left is not quite correct, // since in EditEngine baseline ... - double nRealOrientation = nOrientation.get() * F_PI1800; - double nCos = cos( nRealOrientation ); - double nSin = sin( nRealOrientation ); - Point aRotatedPos; - // Translation... - aTextPos -= rOrigin; - // Rotation... - aRotatedPos.setX(static_cast<tools::Long>(nCos*aTextPos.X() + nSin*aTextPos.Y()) ); - aRotatedPos.setY(static_cast<tools::Long>(- (nSin*aTextPos.X() - nCos*aTextPos.Y())) ); - aTextPos = aRotatedPos; - // Translation... - aTextPos += rOrigin; + rOrigin.RotateAround(aTextPos, nOrientation); + vcl::Font aRotatedFont( aBulletFont ); aRotatedFont.SetOrientation( nOrientation ); rOutDev.SetFont( aRotatedFont ); } // VCL will take care of brackets and so on... - ComplexTextLayoutFlags nLayoutMode = rOutDev.GetLayoutMode(); - nLayoutMode &= ~ComplexTextLayoutFlags(ComplexTextLayoutFlags::BiDiRtl|ComplexTextLayoutFlags::BiDiStrong); + vcl::text::ComplexTextLayoutFlags nLayoutMode = rOutDev.GetLayoutMode(); + nLayoutMode &= ~vcl::text::ComplexTextLayoutFlags(vcl::text::ComplexTextLayoutFlags::BiDiRtl|vcl::text::ComplexTextLayoutFlags::BiDiStrong); if ( bRightToLeftPara ) - nLayoutMode |= ComplexTextLayoutFlags::BiDiRtl | ComplexTextLayoutFlags::TextOriginLeft | ComplexTextLayoutFlags::BiDiStrong; + nLayoutMode |= vcl::text::ComplexTextLayoutFlags::BiDiRtl | vcl::text::ComplexTextLayoutFlags::TextOriginLeft | vcl::text::ComplexTextLayoutFlags::BiDiStrong; rOutDev.SetLayoutMode( nLayoutMode ); if(bStrippingPortions) { const vcl::Font& aSvxFont(rOutDev.GetFont()); - std::unique_ptr<tools::Long[]> pBuf(new tools::Long[ pPara->GetText().getLength() ]); - rOutDev.GetTextArray( pPara->GetText(), pBuf.get() ); + KernArray aBuf; + rOutDev.GetTextArray( pPara->GetText(), &aBuf ); if(bSymbol) { @@ -986,7 +966,8 @@ void Outliner::PaintBullet(sal_Int32 nPara, const Point& rStartPos, const Point& aTextPos.AdjustY( -(aMetric.GetDescent()) ); } - DrawingText(aTextPos, pPara->GetText(), 0, pPara->GetText().getLength(), pBuf.get(), + assert(aBuf.get_factor() == 1); + DrawingText(aTextPos, pPara->GetText(), 0, pPara->GetText().getLength(), aBuf.get_subunit_array(), {}, aSvxFont, nPara, bRightToLeftPara ? 1 : 0, nullptr, nullptr, false, false, true, nullptr, Color(), Color()); } else @@ -1041,8 +1022,7 @@ void Outliner::PaintBullet(sal_Int32 nPara, const Point& rStartPos, const Point& } else { - // Remove CAST when KA made the Draw-Method const - const_cast<GraphicObject*>(pFmt->GetBrush()->GetGraphicObject())->Draw(rOutDev, aBulletPos, pPara->aBulSize); + pFmt->GetBrush()->GetGraphicObject()->Draw(rOutDev, aBulletPos, pPara->aBulSize); } } } @@ -1102,8 +1082,7 @@ ErrCode Outliner::Read( SvStream& rInput, const OUString& rBaseURL, EETextFormat bool bOldUndo = pEditEngine->IsUndoEnabled(); EnableUndo( false ); - bool bUpdate = pEditEngine->GetUpdateMode(); - pEditEngine->SetUpdateMode( false ); + bool bUpdate = pEditEngine->SetUpdateLayout( false ); Clear(); @@ -1123,7 +1102,7 @@ ErrCode Outliner::Read( SvStream& rInput, const OUString& rBaseURL, EETextFormat ImpFilterIndents( 0, nParas-1 ); ImplBlockInsertionCallbacks( false ); - pEditEngine->SetUpdateMode( bUpdate ); + pEditEngine->SetUpdateLayout( bUpdate ); EnableUndo( bOldUndo ); return nRet; @@ -1132,9 +1111,7 @@ ErrCode Outliner::Read( SvStream& rInput, const OUString& rBaseURL, EETextFormat void Outliner::ImpFilterIndents( sal_Int32 nFirstPara, sal_Int32 nLastPara ) { - - bool bUpdate = pEditEngine->GetUpdateMode(); - pEditEngine->SetUpdateMode( false ); + bool bUpdate = pEditEngine->SetUpdateLayout( false ); Paragraph* pLastConverted = nullptr; for( sal_Int32 nPara = nFirstPara; nPara <= nLastPara; nPara++ ) @@ -1156,24 +1133,22 @@ void Outliner::ImpFilterIndents( sal_Int32 nFirstPara, sal_Int32 nLastPara ) } } - pEditEngine->SetUpdateMode( bUpdate ); + pEditEngine->SetUpdateLayout( bUpdate ); } -SfxUndoManager& Outliner::GetUndoManager() +EditUndoManager& Outliner::GetUndoManager() { return pEditEngine->GetUndoManager(); } -SfxUndoManager* Outliner::SetUndoManager(SfxUndoManager* pNew) +EditUndoManager* Outliner::SetUndoManager(EditUndoManager* pNew) { return pEditEngine->SetUndoManager(pNew); } void Outliner::ImpTextPasted( sal_Int32 nStartPara, sal_Int32 nCount ) { - - bool bUpdate = pEditEngine->GetUpdateMode(); - pEditEngine->SetUpdateMode( false ); + bool bUpdate = pEditEngine->SetUpdateLayout( false ); const sal_Int32 nStart = nStartPara; @@ -1181,7 +1156,7 @@ void Outliner::ImpTextPasted( sal_Int32 nStartPara, sal_Int32 nCount ) while( nCount && pPara ) { - if( ImplGetOutlinerMode() != OutlinerMode::TextObject ) + if( GetOutlinerMode() != OutlinerMode::TextObject ) { nDepthChangedHdlPrevDepth = pPara->GetDepth(); ParaFlag nPrevFlags = pPara->nFlags; @@ -1213,7 +1188,7 @@ void Outliner::ImpTextPasted( sal_Int32 nStartPara, sal_Int32 nCount ) pPara = pParaList->GetParagraph( nStartPara ); } - pEditEngine->SetUpdateMode( bUpdate ); + pEditEngine->SetUpdateLayout( bUpdate ); DBG_ASSERT(pParaList->GetParagraphCount()==pEditEngine->GetParagraphCount(),"ImpTextPasted failed"); } @@ -1232,7 +1207,7 @@ bool Outliner::ImpCanIndentSelectedPages( OutlinerView* pCurView ) // If the first paragraph is on level 0 it can not indented in any case, // possible there might be indentations in the following on the 0 level. - if ( ( mnFirstSelPage == 0 ) && ( ImplGetOutlinerMode() != OutlinerMode::TextObject ) ) + if ( ( mnFirstSelPage == 0 ) && ( GetOutlinerMode() != OutlinerMode::TextObject ) ) { if ( nDepthChangedHdlPrevDepth == 1 ) // is the only page return false; @@ -1350,7 +1325,7 @@ void Outliner::DepthChangedHdl(Paragraph* pPara, ParaFlag nPrevFlags) } -sal_Int32 Outliner::GetAbsPos( Paragraph const * pPara ) +sal_Int32 Outliner::GetAbsPos( Paragraph const * pPara ) const { DBG_ASSERT(pPara,"GetAbsPos:No Para"); return pParaList->GetAbsPos( pPara ); @@ -1668,7 +1643,8 @@ void Outliner::StripPortions() } void Outliner::DrawingText( const Point& rStartPos, const OUString& rText, sal_Int32 nTextStart, - sal_Int32 nTextLen, const tools::Long* pDXArray,const SvxFont& rFont, + sal_Int32 nTextLen, std::span<const sal_Int32> pDXArray, + std::span<const sal_Bool> pKashidaArray, const SvxFont& rFont, sal_Int32 nPara, sal_uInt8 nRightToLeft, const EEngineData::WrongSpellVector* pWrongSpellVector, const SvxFieldData* pFieldData, @@ -1681,7 +1657,7 @@ void Outliner::DrawingText( const Point& rStartPos, const OUString& rText, sal_I { if(aDrawPortionHdl.IsSet()) { - DrawPortionInfo aInfo( rStartPos, rText, nTextStart, nTextLen, rFont, nPara, pDXArray, pWrongSpellVector, + DrawPortionInfo aInfo( rStartPos, rText, nTextStart, nTextLen, rFont, nPara, pDXArray, pKashidaArray, pWrongSpellVector, pFieldData, pLocale, rOverlineColor, rTextLineColor, nRightToLeft, false, 0, bEndOfLine, bEndOfParagraph, bEndOfBullet); aDrawPortionHdl.Call( &aInfo ); @@ -1694,7 +1670,7 @@ void Outliner::DrawingTab( const Point& rStartPos, tools::Long nWidth, const OUS { if(aDrawPortionHdl.IsSet()) { - DrawPortionInfo aInfo( rStartPos, rChar, 0, rChar.getLength(), rFont, nPara, nullptr, nullptr, + DrawPortionInfo aInfo( rStartPos, rChar, 0, rChar.getLength(), rFont, nPara, {}, {}, nullptr, nullptr, nullptr, rOverlineColor, rTextLineColor, nRightToLeft, true, nWidth, bEndOfLine, bEndOfParagraph, false); aDrawPortionHdl.Call( &aInfo ); @@ -1714,7 +1690,7 @@ bool Outliner::ImpCanDeleteSelectedPages( OutlinerView* pCurView, sal_Int32 _nFi return RemovingPagesHdl( pCurView ); } -SfxItemSet const & Outliner::GetParaAttribs( sal_Int32 nPara ) +SfxItemSet const & Outliner::GetParaAttribs( sal_Int32 nPara ) const { return pEditEngine->GetParaAttribs( nPara ); } @@ -1852,8 +1828,6 @@ void Outliner::ImplCalcBulletText( sal_Int32 nPara, bool bRecalcLevel, bool bRec if (pPara->GetText() != aBulletText) pPara->SetText( aBulletText ); - pPara->nFlags &= ~ParaFlag::SETBULLETTEXT; - if ( bRecalcLevel ) { sal_Int16 nDepth = pPara->GetDepth(); @@ -1912,8 +1886,6 @@ OUString Outliner::ImplGetBulletText( sal_Int32 nPara ) Paragraph* pPara = pParaList->GetParagraph( nPara ); if (pPara) { - // Enable optimization again ... -// if( pPara->nFlags & ParaFlag::SETBULLETTEXT ) ImplCalcBulletText( nPara, false, false ); aRes = pPara->GetText(); } @@ -2006,7 +1978,7 @@ bool Outliner::IsPageOverflow() return pEditEngine->IsPageOverflow(); } -std::unique_ptr<NonOverflowingText> Outliner::GetNonOverflowingText() const +std::optional<NonOverflowingText> Outliner::GetNonOverflowingText() const { /* XXX: * nCount should be the number of paragraphs of the non overflowing text @@ -2014,7 +1986,7 @@ std::unique_ptr<NonOverflowingText> Outliner::GetNonOverflowingText() const */ if ( GetParagraphCount() < 1 ) - return nullptr; + return {}; // last non-overflowing paragraph is before the first overflowing one sal_Int32 nCount = pEditEngine->GetOverflowingParaNum(); @@ -2025,14 +1997,14 @@ std::unique_ptr<NonOverflowingText> Outliner::GetNonOverflowingText() const SAL_INFO("editeng.chaining", "[Overflowing] Ops, trying to retrieve para " << nCount << " when max index is " << GetParagraphCount()-1 ); - return nullptr; + return {}; } if (nCount < 0) { SAL_INFO("editeng.chaining", "[Overflowing] No Overflowing text but GetNonOverflowinText called?!"); - return nullptr; + return {}; } // NOTE: We want the selection of the overflowing text from here @@ -2070,7 +2042,7 @@ std::unique_ptr<NonOverflowingText> Outliner::GetNonOverflowingText() const ESelection aEmptySel(0,0,0,0); //EditTextObject *pTObj = pEditEngine->CreateTextObject(aEmptySel); bool const bLastParaInterrupted = true; // Last Para was interrupted since everything overflew - return std::make_unique<NonOverflowingText>(aEmptySel, bLastParaInterrupted); + return NonOverflowingText(aEmptySel, bLastParaInterrupted); } else { // Get the lines that of the overflowing para fit in the box sal_Int32 nOverflowingPara = nCount; @@ -2107,22 +2079,22 @@ std::unique_ptr<NonOverflowingText> Outliner::GetNonOverflowingText() const bool bLastParaInterrupted = pEditEngine->GetOverflowingLineNum() > 0; - return std::make_unique<NonOverflowingText>(aOverflowingTextSelection, bLastParaInterrupted); + return NonOverflowingText(aOverflowingTextSelection, bLastParaInterrupted); } } -std::unique_ptr<OutlinerParaObject> Outliner::GetEmptyParaObject() const +OutlinerParaObject Outliner::GetEmptyParaObject() const { std::unique_ptr<EditTextObject> pEmptyText = pEditEngine->GetEmptyTextObject(); - std::unique_ptr<OutlinerParaObject> pPObj( new OutlinerParaObject( std::move(pEmptyText) )); - pPObj->SetOutlinerMode(GetMode()); - return pPObj; + OutlinerParaObject aPObj( std::move(pEmptyText) ); + aPObj.SetOutlinerMode(GetOutlinerMode()); + return aPObj; } -std::unique_ptr<OverflowingText> Outliner::GetOverflowingText() const +std::optional<OverflowingText> Outliner::GetOverflowingText() const { if ( pEditEngine->GetOverflowingParaNum() < 0) - return nullptr; + return {}; // Defensive check: overflowing para index beyond actual # of paragraphs? @@ -2131,7 +2103,7 @@ std::unique_ptr<OverflowingText> Outliner::GetOverflowingText() const "[Overflowing] Ops, trying to retrieve para " << pEditEngine->GetOverflowingParaNum() << " when max index is " << GetParagraphCount()-1 ); - return nullptr; + return {}; } sal_Int32 nHeadPara = pEditEngine->GetOverflowingParaNum(); @@ -2150,7 +2122,7 @@ std::unique_ptr<OverflowingText> Outliner::GetOverflowingText() const sal_Int32 nLastParaLen = GetText(GetParagraph(nLastPara)).getLength(); aOverflowingTextSel = ESelection(nOverflowingPara, nLen, nLastPara, nLastParaLen); - return std::make_unique<OverflowingText>(pEditEngine->CreateTransferable(aOverflowingTextSel)); + return OverflowingText(pEditEngine->CreateTransferable(aOverflowingTextSel)); } |