Kaydet (Commit) f0485ba2 authored tarafından Tamás Zolnai's avatar Tamás Zolnai

tdf#115639: Handle alignment correctly for multiple paragraph case

I used the wrong calculator method to get the line width.
This commit also fixes the crashes found by crashtest.

Change-Id: I25392f86af912ee54c07b14480d82282210ac346
Reviewed-on: https://gerrit.libreoffice.org/49994Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarTamás Zolnai <tamas.zolnai@collabora.com>
üst 59c95b39
......@@ -1957,6 +1957,39 @@ void Test::testHoriAlignIgnoreTrailingWhitespace()
EditLine* pLine = &pParaPortion->GetLines()[0];
CPPUNIT_ASSERT_DOUBLES_EQUAL(static_cast<long>(8815), pLine->GetStartPosX(), 10);
}
// Test multiple paragraph case
{
// Set initial text
aText = "Some text \nMore Text ";
aTextLen = aText.getLength();
aEditEngine.SetText(aText);
// Assert changes - text insertion
CPPUNIT_ASSERT_EQUAL(static_cast<sal_uLong>(aTextLen - 1), rDoc.GetTextLen());
CPPUNIT_ASSERT_EQUAL(OUString("Some text "), rDoc.GetParaAsString(static_cast<sal_Int32>(0)));
CPPUNIT_ASSERT_EQUAL(OUString("More Text "), rDoc.GetParaAsString(static_cast<sal_Int32>(1)));
aEditEngine.SetHoriAlignIgnoreTrailingWhitespace(true);
std::unique_ptr<SfxItemSet> pSet(new SfxItemSet(aEditEngine.GetEmptyItemSet()));
pSet->Put(SvxAdjustItem( SvxAdjust::Center, EE_PARA_JUST ));
CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt16>(1), pSet->Count());
// Select all paragraphs and apply changes
ESelection aSelection(0, 0, 0, aTextLen);
aEditEngine.QuickSetAttribs(*pSet, aSelection);
// Get one line paragraphs
aEditEngine.SetPaperSize(Size(10000, 6000));
CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), aEditEngine.GetLineCount(0));
CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), aEditEngine.GetLineCount(1));
// Check horizontal position
ParaPortion* pParaPortion = aEditEngine.GetParaPortions()[0];
CPPUNIT_ASSERT_DOUBLES_EQUAL(static_cast<long>(4527), pParaPortion->GetLines()[0].GetStartPosX(), 50);
pParaPortion = aEditEngine.GetParaPortions()[1];
CPPUNIT_ASSERT_DOUBLES_EQUAL(static_cast<long>(8815), pParaPortion->GetLines()[0].GetStartPosX(), 50);
}
}
CPPUNIT_TEST_SUITE_REGISTRATION(Test);
......
......@@ -1433,13 +1433,13 @@ sal_uInt32 EditEngine::GetTextHeightNTP() const
return pImpEditEngine->GetTextHeightNTP();
}
sal_uInt32 EditEngine::CalcTextWidth(bool bIgnoreTrailingWhiteSpaces)
sal_uInt32 EditEngine::CalcTextWidth()
{
if ( !pImpEditEngine->IsFormatted() )
pImpEditEngine->FormatDoc();
sal_uInt32 nWidth = !IsVertical() ? pImpEditEngine->CalcTextWidth( true, bIgnoreTrailingWhiteSpaces ) : pImpEditEngine->GetTextHeight();
sal_uInt32 nWidth = !IsVertical() ? pImpEditEngine->CalcTextWidth( true ) : pImpEditEngine->GetTextHeight();
return nWidth;
}
......
......@@ -833,7 +833,7 @@ public:
sal_uInt32 CalcTextHeight( sal_uInt32* pHeightNTP );
sal_uInt32 GetTextHeight() const;
sal_uInt32 GetTextHeightNTP() const;
sal_uInt32 CalcTextWidth( bool bIgnoreExtraSpace, bool bIgnoreTrailingWhiteSpaces = false );
sal_uInt32 CalcTextWidth( bool bIgnoreExtraSpace );
sal_uInt32 CalcLineWidth( ParaPortion* pPortion, EditLine* pLine, bool bIgnoreExtraSpace, bool bIgnoreTrailingWhiteSpaces = false );
sal_Int32 GetLineCount( sal_Int32 nParagraph ) const;
sal_Int32 GetLineLen( sal_Int32 nParagraph, sal_Int32 nLine ) const;
......
......@@ -3090,7 +3090,7 @@ sal_uInt32 ImpEditEngine::GetTextHeight() const
return nCurTextHeight;
}
sal_uInt32 ImpEditEngine::CalcTextWidth( bool bIgnoreExtraSpace, bool bIgnoreTrailingWhiteSpaces )
sal_uInt32 ImpEditEngine::CalcTextWidth( bool bIgnoreExtraSpace )
{
// If still not formatted and not in the process.
// Will be brought in the formatting for AutoPageSize.
......@@ -3137,7 +3137,7 @@ sal_uInt32 ImpEditEngine::CalcTextWidth( bool bIgnoreExtraSpace, bool bIgnoreTra
}
}
nCurWidth += GetXValue( rLRItem.GetRight() );
nCurWidth += CalcLineWidth( pPortion, &rLine, bIgnoreExtraSpace, bIgnoreTrailingWhiteSpaces );
nCurWidth += CalcLineWidth( pPortion, &rLine, bIgnoreExtraSpace );
if ( nCurWidth > nMaxWidth )
{
nMaxWidth = nCurWidth;
......
......@@ -1515,7 +1515,7 @@ bool ImpEditEngine::CreateLines( sal_Int32 nPara, sal_uInt32 nStartPosY )
{
long n;
if(IsHoriAlignIgnoreTrailingWhitespace())
n = ( nMaxLineWidth - CalcTextWidth( true, true ) ) / 2;
n = ( nMaxLineWidth - CalcLineWidth( pParaPortion, pLine, false, true ) ) / 2;
else
n = ( nMaxLineWidth - aTextSize.Width() ) / 2;
n += nStartX; // Indentation is kept.
......@@ -1528,7 +1528,7 @@ bool ImpEditEngine::CreateLines( sal_Int32 nPara, sal_uInt32 nStartPosY )
// the blank must not be displayed!
long n;
if(IsHoriAlignIgnoreTrailingWhitespace())
n = nMaxLineWidth - CalcTextWidth( true, true );
n = nMaxLineWidth - CalcLineWidth( pParaPortion, pLine, false, true );
else
n = nMaxLineWidth - aTextSize.Width();
n += nStartX; // Indentation is kept.
......
......@@ -273,7 +273,7 @@ public:
sal_uInt32 GetTextLen() const;
sal_uInt32 GetTextHeight() const;
sal_uInt32 GetTextHeightNTP() const;
sal_uInt32 CalcTextWidth( bool bIgnoreTrailingWhiteSpaces = false );
sal_uInt32 CalcTextWidth();
OUString GetText( sal_Int32 nParagraph ) const;
sal_Int32 GetTextLen( sal_Int32 nParagraph ) const;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment