summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2013-06-05 12:57:51 +0100
committerCaolán McNamara <caolanm@redhat.com>2013-06-05 13:00:21 +0100
commit3cd7da2249fbf87fa35e6803013a2d51278f70c2 (patch)
tree7720af2cbb0795be8a33647b9d90a156eab13222
parent6a80a5ae710a7f9357534ad890dffe5391af709b (diff)
Resolves: fdo#65407 fix broken ellipse generation
regression since 0e137027fcf294b33a9c7376b17a6c4e33758c52 Change-Id: I88fbb37ae7f62d6aed37d82fba12ab213866a06c
-rw-r--r--vcl/source/gdi/outdev3.cxx45
1 files changed, 13 insertions, 32 deletions
diff --git a/vcl/source/gdi/outdev3.cxx b/vcl/source/gdi/outdev3.cxx
index 081104cce5fe..10728e65be81 100644
--- a/vcl/source/gdi/outdev3.cxx
+++ b/vcl/source/gdi/outdev3.cxx
@@ -6654,48 +6654,29 @@ OUString OutputDevice::ImplGetEllipsisString( const OutputDevice& rTargetDevice,
{
if( (nStyle & TEXT_DRAW_CENTERELLIPSIS) == TEXT_DRAW_CENTERELLIPSIS )
{
- sal_Int32 nOrigWidth = _rLayout.GetTextWidth( aStr, 0, aStr.getLength() );
- if ( nOrigWidth <= nMaxWidth )
- return aStr;
- sal_Int32 nEraseStart = aStr.getLength()/2;
- sal_Int32 nEraseEnd = nEraseStart;
- sal_Int32 nEraseChars = nEraseEnd - nEraseStart;
- sal_Int32 nEllipsisWidth = _rLayout.GetTextWidth( "...", 0, 3 );
- bool bRemoveForward = true;
- while( nEraseChars < aStr.getLength() &&
- nOrigWidth - _rLayout.GetTextWidth( aStr, nEraseStart, nEraseEnd ) > nMaxWidth - nEllipsisWidth)
+ OUStringBuffer aTmpStr( aStr );
+ sal_Int32 nEraseChars = 4;
+ while( nEraseChars < aStr.getLength() && _rLayout.GetTextWidth( aTmpStr.toString(), 0, aTmpStr.getLength() ) > nMaxWidth )
{
- if (bRemoveForward)
- ++nEraseEnd;
- else
- --nEraseStart;
- bRemoveForward = !bRemoveForward;
- nEraseChars = nEraseEnd - nEraseStart +1;
+ aTmpStr = OUStringBuffer(aStr);
+ sal_Int32 i = (aTmpStr.getLength() - nEraseChars)/2;
+ aTmpStr.remove(i, nEraseChars++);
+ aTmpStr.insert(i, "...");
}
- OUStringBuffer aTmpStr(aStr);
- aTmpStr.remove(nEraseStart, nEraseChars);
- aTmpStr.insert(nEraseStart, "...");
aStr = aTmpStr.makeStringAndClear();
}
else if ( nStyle & TEXT_DRAW_ENDELLIPSIS )
{
- OUString aTmpStr = aStr.replaceAt( nIndex, aStr.getLength()-nIndex, "" );
-
+ aStr = aStr.copy(0, nIndex);
if ( nIndex > 1 )
{
- sal_Int32 nTmpStrWidth = _rLayout.GetTextWidth( aTmpStr, 0, aTmpStr.getLength() );
- if ( nTmpStrWidth <= nMaxWidth )
- return aStr;
-
- sal_Int32 nEllipsisWidth = _rLayout.GetTextWidth( "...", 0, 3 );
- sal_Int32 nEraseStart = aTmpStr.getLength();
- while ( nEraseStart > 0 &&
- nTmpStrWidth -
- (_rLayout.GetTextWidth( aTmpStr, 0, nEraseStart-1 ) > nMaxWidth - nEllipsisWidth) )
+ aStr += "...";
+ while ( !aStr.isEmpty() && (_rLayout.GetTextWidth( aStr, 0, aStr.getLength() ) > nMaxWidth) )
{
- --nEraseStart;
+ if ( (nIndex > 1) || (nIndex == aStr.getLength()) )
+ nIndex--;
+ aStr = aStr.replaceAt( nIndex, 1, "");
}
- aStr = aTmpStr.replaceAt( nEraseStart, aTmpStr.getLength()-nEraseStart, "...");
}
if ( aStr.isEmpty() && (nStyle & TEXT_DRAW_CLIP) )