[Libreoffice-commits] core.git: 2 commits - sw/source
Michael Stahl
mstahl at redhat.com
Fri Dec 6 12:24:56 PST 2013
sw/source/core/txtnode/fntcap.cxx | 29 ++++++++++++++------------
sw/source/core/txtnode/swfont.cxx | 42 +++++++++++++++++++-------------------
2 files changed, 37 insertions(+), 34 deletions(-)
New commits:
commit cc3341847f857b1d340d0b9dd09c7bccfb146ab6
Author: Michael Stahl <mstahl at redhat.com>
Date: Fri Dec 6 21:18:37 2013 +0100
sw: fix more cases of SwDrawTextInfo::GetText()/SetText() not restoring
Change-Id: I9625958e4139dd595f269ebac72b9a037118a9f5
diff --git a/sw/source/core/txtnode/swfont.cxx b/sw/source/core/txtnode/swfont.cxx
index d569db9..2269f24 100644
--- a/sw/source/core/txtnode/swfont.cxx
+++ b/sw/source/core/txtnode/swfont.cxx
@@ -1092,15 +1092,15 @@ Size SwSubFont::_GetTxtSize( SwDrawTextInfo& rInf )
{
SV_STAT( nGetTextSize );
long nOldKern = rInf.GetKern();
- const OUString &rOldTxt = rInf.GetText();
+ const OUString oldTxt = rInf.GetText();
rInf.SetKern( CheckKerning() );
if ( !IsCaseMap() )
aTxtSize = pLastFont->GetTextSize( rInf );
else
{
OUString aTmp = CalcCaseMap( rInf.GetText() );
- const OUString &rOldStr = rInf.GetText();
- bool bCaseMapLengthDiffers(aTmp.getLength() != rOldStr.getLength());
+ const OUString oldStr = rInf.GetText();
+ bool bCaseMapLengthDiffers(aTmp.getLength() != oldStr.getLength());
if(bCaseMapLengthDiffers && rInf.GetLen())
{
@@ -1110,7 +1110,7 @@ Size SwSubFont::_GetTxtSize( SwDrawTextInfo& rInf )
// a single snippet since its size may differ, too.
xub_StrLen nOldIdx(rInf.GetIdx());
xub_StrLen nOldLen(rInf.GetLen());
- const OUString aSnippet(rOldStr.copy(nOldIdx, nOldLen));
+ const OUString aSnippet(oldStr.copy(nOldIdx, nOldLen));
OUString aNewText(CalcCaseMap(aSnippet));
rInf.SetText( aNewText );
@@ -1128,10 +1128,10 @@ Size SwSubFont::_GetTxtSize( SwDrawTextInfo& rInf )
aTxtSize = pLastFont->GetTextSize( rInf );
}
- rInf.SetText( rOldStr );
+ rInf.SetText(oldStr);
}
rInf.SetKern( nOldKern );
- rInf.SetText( rOldTxt );
+ rInf.SetText(oldTxt);
// 15142: Ein Wort laenger als eine Zeile, beim Zeilenumbruch
// hochgestellt, muss seine effektive Hoehe melden.
if( GetEscapement() )
@@ -1213,9 +1213,9 @@ void SwSubFont::_DrawText( SwDrawTextInfo &rInf, const sal_Bool bGrey )
pLastFont->DrawText( rInf );
else
{
- const OUString &rOldStr = rInf.GetText();
- OUString aString( CalcCaseMap( rOldStr ) );
- bool bCaseMapLengthDiffers(aString.getLength() != rOldStr.getLength());
+ const OUString oldStr = rInf.GetText();
+ OUString aString( CalcCaseMap(oldStr) );
+ bool bCaseMapLengthDiffers(aString.getLength() != oldStr.getLength());
if(bCaseMapLengthDiffers && rInf.GetLen())
{
@@ -1225,7 +1225,7 @@ void SwSubFont::_DrawText( SwDrawTextInfo &rInf, const sal_Bool bGrey )
// a single snippet since its size may differ, too.
xub_StrLen nOldIdx(rInf.GetIdx());
xub_StrLen nOldLen(rInf.GetLen());
- const OUString aSnippet(rOldStr.copy(nOldIdx, nOldLen));
+ const OUString aSnippet(oldStr.copy(nOldIdx, nOldLen));
OUString aNewText = CalcCaseMap(aSnippet);
rInf.SetText( aNewText );
@@ -1243,14 +1243,14 @@ void SwSubFont::_DrawText( SwDrawTextInfo &rInf, const sal_Bool bGrey )
pLastFont->DrawText( rInf );
}
- rInf.SetText( rOldStr );
+ rInf.SetText(oldStr);
}
}
if( pUnderFnt && nOldUnder != UNDERLINE_NONE )
{
Size aFontSize = _GetTxtSize( rInf );
- const OUString &rOldStr = rInf.GetText();
+ const OUString oldStr = rInf.GetText();
OUString aStr(" ");
xub_StrLen nOldIdx = rInf.GetIdx();
@@ -1259,8 +1259,8 @@ void SwSubFont::_DrawText( SwDrawTextInfo &rInf, const sal_Bool bGrey )
if( rInf.GetSpace() )
{
xub_StrLen nTmpEnd = nOldIdx + nOldLen;
- if( nTmpEnd > rOldStr.getLength() )
- nTmpEnd = rOldStr.getLength();
+ if (nTmpEnd > oldStr.getLength())
+ nTmpEnd = oldStr.getLength();
const SwScriptInfo* pSI = rInf.GetScriptInfo();
@@ -1268,8 +1268,8 @@ void SwSubFont::_DrawText( SwDrawTextInfo &rInf, const sal_Bool bGrey )
( rInf.GetFont() && SW_CJK == rInf.GetFont()->GetActual() );
for( sal_Int32 nTmp = nOldIdx; nTmp < nTmpEnd; ++nTmp )
{
- if( CH_BLANK == rOldStr[nTmp] || bAsianFont ||
- ( nTmp + 1 < rOldStr.getLength() && pSI &&
+ if (CH_BLANK == oldStr[nTmp] || bAsianFont ||
+ ( nTmp + 1 < oldStr.getLength() && pSI &&
i18n::ScriptType::ASIAN == pSI->ScriptType( nTmp + 1 ) ) )
++nSpace;
}
@@ -1295,7 +1295,7 @@ void SwSubFont::_DrawText( SwDrawTextInfo &rInf, const sal_Bool bGrey )
pUnderFnt->GetFont()._DrawStretchText( rInf );
rInf.SetUnderFnt( pUnderFnt );
- rInf.SetText( rOldStr );
+ rInf.SetText(oldStr);
rInf.SetIdx( nOldIdx );
rInf.SetLen( nOldLen );
}
@@ -1361,7 +1361,7 @@ void SwSubFont::_DrawStretchText( SwDrawTextInfo &rInf )
if( pUnderFnt && nOldUnder != UNDERLINE_NONE )
{
- const OUString &rOldStr = rInf.GetText();
+ const OUString oldStr = rInf.GetText();
OUString aStr(" ");
xub_StrLen nOldIdx = rInf.GetIdx();
xub_StrLen nOldLen = rInf.GetLen();
@@ -1377,7 +1377,7 @@ void SwSubFont::_DrawStretchText( SwDrawTextInfo &rInf )
pUnderFnt->GetFont()._DrawStretchText( rInf );
rInf.SetUnderFnt( pUnderFnt );
- rInf.SetText( rOldStr );
+ rInf.SetText(oldStr);
rInf.SetIdx( nOldIdx );
rInf.SetLen( nOldLen );
}
@@ -1400,7 +1400,7 @@ xub_StrLen SwSubFont::_GetCrsrOfst( SwDrawTextInfo& rInf )
nCrsr = GetCapitalCrsrOfst( rInf );
else
{
- const OUString &rOldTxt = rInf.GetText();
+ const OUString oldTxt = rInf.GetText();
long nOldKern = rInf.GetKern();
rInf.SetKern( CheckKerning() );
SV_STAT( nGetTextSize );
@@ -1413,7 +1413,7 @@ xub_StrLen SwSubFont::_GetCrsrOfst( SwDrawTextInfo& rInf )
nCrsr = pLastFont->GetCrsrOfst( rInf );
}
rInf.SetKern( nOldKern );
- rInf.SetText( rOldTxt );
+ rInf.SetText(oldTxt);
}
return nCrsr;
}
commit 1050dfbf7daac2f2a4a8580c622447b55b147d57
Author: Michael Stahl <mstahl at redhat.com>
Date: Fri Dec 6 19:47:37 2013 +0100
fdo#71714: sw: fix small capitals rendering
So f22006dc6ac34a35a060e15466cf6b2d2058617d changed the SwDrawTextInfo
to contain not a pointer but an actual OUString, and then
d908422f5763ed8ea79af81336ca564f46435baf changes
SwSubFont::DoOnCapitals() thus:
- const XubString& rOldText = rDo.GetInf().GetText();
+ const OUString& rOldText = rDo.GetInf().GetText();
rDo.GetInf().SetText( aTxt );
That used to _copy_ the string, but now it just references the
member, and so the SetText(aTxt) below overwrites rOldText.
Change-Id: I06d7ee7084c15d88b3e748ef18877b62e79bdd0e
diff --git a/sw/source/core/txtnode/fntcap.cxx b/sw/source/core/txtnode/fntcap.cxx
index 70dae9e..075ad73 100644
--- a/sw/source/core/txtnode/fntcap.cxx
+++ b/sw/source/core/txtnode/fntcap.cxx
@@ -541,7 +541,7 @@ void SwSubFont::DoOnCapitals( SwDoCapitals &rDo )
rDo.GetInf().GetLen() );
rDo.GetInf().SetLen( nMaxPos );
- const OUString& rOldText = rDo.GetInf().GetText();
+ const OUString oldText = rDo.GetInf().GetText();
rDo.GetInf().SetText( aTxt );
xub_StrLen nPos = rDo.GetInf().GetIdx();
xub_StrLen nOldPos = nPos;
@@ -551,8 +551,8 @@ void SwSubFont::DoOnCapitals( SwDoCapitals &rDo )
// Look if the length of the original text and the ToUpper-converted
// text is different. If yes, do special handling.
OUString aNewText;
- SwCapitalInfo aCapInf( rOldText );
- sal_Bool bCaseMapLengthDiffers( aTxt.getLength() != rOldText.getLength() );
+ SwCapitalInfo aCapInf(oldText);
+ sal_Bool bCaseMapLengthDiffers(aTxt.getLength() != oldText.getLength());
if ( bCaseMapLengthDiffers )
rDo.SetCapInf( aCapInf );
@@ -623,7 +623,8 @@ void SwSubFont::DoOnCapitals( SwDoCapitals &rDo )
if( nPos < nMaxPos )
{
- nPos = (xub_StrLen)g_pBreakIt->GetBreakIter()->endOfCharBlock( rOldText, nPos,
+ nPos = (xub_StrLen)g_pBreakIt->GetBreakIter()->endOfCharBlock(
+ oldText, nPos,
g_pBreakIt->GetLocale( eLng ), CharType::LOWERCASE_LETTER);
if( nPos == STRING_LEN )
nPos = nOldPos;
@@ -647,7 +648,7 @@ void SwSubFont::DoOnCapitals( SwDoCapitals &rDo )
// Build an own 'changed' string for the given part of the
// source string and use it. That new string may differ in length
// from the source string.
- const OUString aSnippet(rOldText.copy(nOldPos, nPos - nOldPos));
+ const OUString aSnippet(oldText.copy(nOldPos, nPos - nOldPos));
aNewText = CalcCaseMap( aSnippet );
aCapInf.nIdx = nOldPos;
aCapInf.nLen = nPos - nOldPos;
@@ -672,7 +673,8 @@ void SwSubFont::DoOnCapitals( SwDoCapitals &rDo )
rDo.Do();
nOldPos = nPos;
}
- nPos = (xub_StrLen)g_pBreakIt->GetBreakIter()->nextCharBlock( rOldText, nPos,
+ nPos = (xub_StrLen)g_pBreakIt->GetBreakIter()->nextCharBlock(
+ oldText, nPos,
g_pBreakIt->GetLocale( eLng ), CharType::LOWERCASE_LETTER);
if( nPos == STRING_LEN || nPos > nMaxPos )
nPos = nMaxPos;
@@ -695,7 +697,7 @@ void SwSubFont::DoOnCapitals( SwDoCapitals &rDo )
if( bWordWise )
{
nTmp = nOldPos;
- while( nTmp < nPos && CH_BLANK == rOldText[nTmp] )
+ while (nTmp < nPos && CH_BLANK == oldText[nTmp])
++nTmp;
if( nOldPos < nTmp )
{
@@ -713,7 +715,7 @@ void SwSubFont::DoOnCapitals( SwDoCapitals &rDo )
// Build an own 'changed' string for the given part of the
// source string and use it. That new string may differ in length
// from the source string.
- const OUString aSnippet(rOldText.copy(nOldPos, nTmp - nOldPos));
+ const OUString aSnippet(oldText.copy(nOldPos, nTmp - nOldPos));
aNewText = CalcCaseMap( aSnippet );
aCapInf.nIdx = nOldPos;
aCapInf.nLen = nTmp - nOldPos;
@@ -741,7 +743,7 @@ void SwSubFont::DoOnCapitals( SwDoCapitals &rDo )
nOldPos = nTmp;
}
- while( nTmp < nPos && CH_BLANK != rOldText[nTmp] )
+ while (nTmp < nPos && CH_BLANK != oldText[nTmp])
++nTmp;
}
else
@@ -754,7 +756,7 @@ void SwSubFont::DoOnCapitals( SwDoCapitals &rDo )
// Build an own 'changed' string for the given part of the
// source string and use it. That new string may differ in length
// from the source string.
- const OUString aSnippet(rOldText.copy(nOldPos, nTmp - nOldPos));
+ const OUString aSnippet(oldText.copy(nOldPos, nTmp - nOldPos));
aNewText = CalcCaseMap( aSnippet );
aCapInf.nIdx = nOldPos;
aCapInf.nLen = nTmp - nOldPos;
@@ -776,7 +778,7 @@ void SwSubFont::DoOnCapitals( SwDoCapitals &rDo )
{
for( sal_Int32 nI = nOldPos; nI < nPos; ++nI )
{
- if( CH_BLANK == rOldText[nI] )
+ if (CH_BLANK == oldText[nI])
aPartSize.Width() += nSpaceAdd;
}
}
@@ -788,7 +790,8 @@ void SwSubFont::DoOnCapitals( SwDoCapitals &rDo )
}
} while( nOldPos != nPos );
}
- nPos = (xub_StrLen)g_pBreakIt->GetBreakIter()->endOfCharBlock( rOldText, nPos,
+ nPos = (xub_StrLen)g_pBreakIt->GetBreakIter()->endOfCharBlock(
+ oldText, nPos,
g_pBreakIt->GetLocale( eLng ), CharType::LOWERCASE_LETTER);
if( nPos == STRING_LEN || nPos > nMaxPos )
nPos = nMaxPos;
@@ -818,7 +821,7 @@ void SwSubFont::DoOnCapitals( SwDoCapitals &rDo )
pLastFont->SetDevFont( rDo.GetInf().GetShell(), rDo.GetOut() );
delete pSmallFontAccess;
- rDo.GetInf().SetText( rOldText );
+ rDo.GetInf().SetText(oldText);
rDo.GetInf().SetKanaDiff( nKana );
}
More information about the Libreoffice-commits
mailing list