summaryrefslogtreecommitdiff
path: root/editeng/source/outliner/outliner.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'editeng/source/outliner/outliner.cxx')
-rw-r--r--editeng/source/outliner/outliner.cxx290
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));
}