diff options
author | Michael Stahl <mstahl@redhat.com> | 2013-07-07 11:58:42 +0200 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2013-07-07 18:11:55 +0200 |
commit | 6fa07d2d608646004bc45261275c4ebabb578a09 (patch) | |
tree | e8e4f257bd47c5b11fb89daebf38a4392d1a9093 | |
parent | c4475946b3171353d0eaefe72ba24e13744458a3 (diff) |
fdo#66478: sw: un-break hyphenation
The main problem is calling SetHyphPos with a stack pointer.
Converting STRING_LEN <-> -1 can't hurt though.
(regression from a2f6402b1fe769a430019042e14e63c9414715dc)
Change-Id: I59a4e3b16b418082de468c7d7f7f38a9b0bccd01
-rw-r--r-- | sw/source/core/txtnode/fntcache.cxx | 4 | ||||
-rw-r--r-- | sw/source/core/txtnode/fntcap.cxx | 9 | ||||
-rw-r--r-- | vcl/source/gdi/outdev3.cxx | 10 |
3 files changed, 13 insertions, 10 deletions
diff --git a/sw/source/core/txtnode/fntcache.cxx b/sw/source/core/txtnode/fntcache.cxx index 4b04cc70f8cd..1e608edd97f9 100644 --- a/sw/source/core/txtnode/fntcache.cxx +++ b/sw/source/core/txtnode/fntcache.cxx @@ -2482,8 +2482,8 @@ xub_StrLen SwFont::GetTxtBreak( SwDrawTextInfo& rInf, long nTextWidth ) nTxtBreak = rInf.GetOut().GetTextBreak( sTmpText, nTextWidth, static_cast<sal_Unicode>('-'), nHyphPos, nTmpIdx2, nTmpLen2, nKern ); - xub_StrLen nTmpHyphPos = static_cast<xub_StrLen>(nHyphPos); - rInf.SetHyphPos(&nTmpHyphPos); + *rInf.GetHyphPos() = (nHyphPos == -1) + ? STRING_LEN : static_cast<xub_StrLen>(nHyphPos); } else nTxtBreak = rInf.GetOut().GetTextBreak( sTmpText, nTextWidth, diff --git a/sw/source/core/txtnode/fntcap.cxx b/sw/source/core/txtnode/fntcap.cxx index 18686983d4ff..9735b2c95663 100644 --- a/sw/source/core/txtnode/fntcap.cxx +++ b/sw/source/core/txtnode/fntcap.cxx @@ -209,26 +209,25 @@ void SwDoGetCapitalBreak::Do() { xub_StrLen nEnd = rInf.GetEnd(); OUString sText(rInf.GetText()); // only needed until rInf.GetText() returns OUString - long nTxtWidth2 = nTxtWidth; // only needed until variables are migrated to sal_Int32 sal_Int32 nIdx2 = rInf.GetIdx(); // ditto sal_Int32 nLen2 = rInf.GetLen(); // ditto if( pExtraPos ) { sal_Int32 nExtraPos = *pExtraPos; // ditto - nBreak = GetOut().GetTextBreak( sText, nTxtWidth2, static_cast<sal_Unicode>('-'), + nBreak = GetOut().GetTextBreak( sText, nTxtWidth, + static_cast<sal_Unicode>('-'), nExtraPos, nIdx2, nLen2, rInf.GetKern() ); if( nExtraPos > nEnd ) nExtraPos = nEnd; - *pExtraPos = nExtraPos; + *pExtraPos = (nExtraPos == -1) ? STRING_LEN : nExtraPos; } else - nBreak = GetOut().GetTextBreak( sText, nTxtWidth2, + nBreak = GetOut().GetTextBreak( sText, nTxtWidth, nIdx2, nLen2, rInf.GetKern() ); rInf.SetText(sText); // ditto rInf.SetIdx(nIdx2); // ditto rInf.SetLen(nLen2); // ditto - nTxtWidth = nTxtWidth2; // ditto if( nBreak > nEnd ) nBreak = nEnd; diff --git a/vcl/source/gdi/outdev3.cxx b/vcl/source/gdi/outdev3.cxx index 6809232b0c1d..8c657031b01d 100644 --- a/vcl/source/gdi/outdev3.cxx +++ b/vcl/source/gdi/outdev3.cxx @@ -6074,10 +6074,14 @@ xub_StrLen OutputDevice::GetTextBreak( const OUString& rStr, long nTextWidth, if( nExtraPixelWidth > 0 ) nTextPixelWidth -= nExtraPixelWidth; - rHyphenatorPos = sal::static_int_cast<sal_Int32>(pSalLayout->GetTextBreak( nTextPixelWidth, nExtraPixelWidth, nSubPixelFactor )); + // why does this return "int" and use STRING_LEN for errors??? + xub_StrLen nTmp = sal::static_int_cast<xub_StrLen>( + pSalLayout->GetTextBreak(nTextPixelWidth, nExtraPixelWidth, nSubPixelFactor)); - if( rHyphenatorPos > nRetVal ) - rHyphenatorPos = nRetVal; + nTmp = std::min(nTmp, nRetVal); + + // TODO: remove nTmp when GetTextBreak sal_Int32 + rHyphenatorPos = (nTmp == STRING_LEN) ? -1 : nTmp; } pSalLayout->Release(); |