summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/vcl/outdev.hxx4
-rw-r--r--sw/source/core/inc/swfont.hxx2
-rw-r--r--sw/source/core/txtnode/fntcache.cxx47
-rw-r--r--sw/source/core/txtnode/fntcap.cxx33
-rw-r--r--vcl/aqua/source/gdi/atsui/salatslayout.cxx16
-rw-r--r--vcl/coretext/ctlayout.cxx8
-rw-r--r--vcl/inc/textlayout.hxx4
-rw-r--r--vcl/source/edit/texteng.cxx4
-rw-r--r--vcl/source/gdi/outdev3.cxx45
-rw-r--r--vcl/source/gdi/sallayout.cxx12
-rw-r--r--vcl/source/gdi/textlayout.cxx6
-rw-r--r--vcl/source/glyphs/graphite_layout.cxx10
-rw-r--r--vcl/win/source/gdi/winlayout.cxx10
13 files changed, 95 insertions, 106 deletions
diff --git a/include/vcl/outdev.hxx b/include/vcl/outdev.hxx
index c922872fc0f1..52b3cde38539 100644
--- a/include/vcl/outdev.hxx
+++ b/include/vcl/outdev.hxx
@@ -593,10 +593,10 @@ public:
void DrawStretchText( const Point& rStartPt, sal_uLong nWidth,
const OUString& rStr,
xub_StrLen nIndex = 0, xub_StrLen nLen = STRING_LEN );
- xub_StrLen GetTextBreak( const OUString& rStr, long nTextWidth,
+ sal_Int32 GetTextBreak( const OUString& rStr, long nTextWidth,
sal_Int32 nIndex = 0, sal_Int32 nLen = -1,
long nCharExtra = 0 ) const;
- xub_StrLen GetTextBreak( const OUString& rStr, long nTextWidth,
+ sal_Int32 GetTextBreak( const OUString& rStr, long nTextWidth,
sal_Unicode nExtraChar, sal_Int32& rExtraCharPos,
sal_Int32 nIndex, sal_Int32 nLen,
long nCharExtra = 0 ) const;
diff --git a/sw/source/core/inc/swfont.hxx b/sw/source/core/inc/swfont.hxx
index fb3849d9d633..6f17a43b7935 100644
--- a/sw/source/core/inc/swfont.hxx
+++ b/sw/source/core/inc/swfont.hxx
@@ -338,7 +338,7 @@ public:
Size GetCapitalSize( SwDrawTextInfo& rInf )
{ return aSub[nActual].GetCapitalSize( rInf ); }
- xub_StrLen GetCapitalBreak( SwViewShell* pSh, const OutputDevice* pOut,
+ sal_Int32 GetCapitalBreak( SwViewShell* pSh, const OutputDevice* pOut,
const SwScriptInfo* pScript, const OUString& rTxt,
long nTextWidth, const xub_StrLen nIdx,
const xub_StrLen nLen );
diff --git a/sw/source/core/txtnode/fntcache.cxx b/sw/source/core/txtnode/fntcache.cxx
index 781023fc84f3..3ea5be795b7a 100644
--- a/sw/source/core/txtnode/fntcache.cxx
+++ b/sw/source/core/txtnode/fntcache.cxx
@@ -2357,7 +2357,7 @@ xub_StrLen SwFont::GetTxtBreak( SwDrawTextInfo& rInf, long nTextWidth )
OSL_ENSURE( !bCompress || ( rInf.GetScriptInfo() && rInf.GetScriptInfo()->
CountCompChg()), "Compression without info" );
- xub_StrLen nTxtBreak = 0;
+ sal_Int32 nTxtBreak = 0;
long nKern = 0;
sal_uInt16 nLn = ( rInf.GetLen() == STRING_LEN ? rInf.GetText().getLength()
@@ -2477,24 +2477,19 @@ xub_StrLen SwFont::GetTxtBreak( SwDrawTextInfo& rInf, long nTextWidth )
bTextReplaced = true;
}
- OUString sTmpText(*pTmpText); // only needed until *pTmpText is OUString
- sal_Int32 nTmpIdx2 = nTmpIdx; // ditto
- sal_Int32 nTmpLen2 = nTmpLen; // ditto
if( rInf.GetHyphPos() ) {
sal_Int32 nHyphPos = *rInf.GetHyphPos();
- nTxtBreak = rInf.GetOut().GetTextBreak( sTmpText, nTextWidth,
+ nTxtBreak = rInf.GetOut().GetTextBreak( *pTmpText, nTextWidth,
static_cast<sal_Unicode>('-'), nHyphPos,
- nTmpIdx2, nTmpLen2, nKern );
+ nTmpIdx, nTmpLen, nKern );
*rInf.GetHyphPos() = (nHyphPos == -1)
? STRING_LEN : static_cast<xub_StrLen>(nHyphPos);
}
else
- nTxtBreak = rInf.GetOut().GetTextBreak( sTmpText, nTextWidth,
- nTmpIdx2, nTmpLen2, nKern );
+ nTxtBreak = rInf.GetOut().GetTextBreak( *pTmpText, nTextWidth,
+ nTmpIdx, nTmpLen, nKern );
- nTmpIdx = nTmpIdx2; // ditto
- nTmpLen = nTmpLen2; // ditto
- if ( bTextReplaced && STRING_LEN != nTxtBreak )
+ if ( bTextReplaced && nTxtBreak != -1 )
{
if ( nTmpLen != nLn )
nTxtBreak = sw_CalcCaseMap( *this, rInf.GetText(),
@@ -2504,17 +2499,19 @@ xub_StrLen SwFont::GetTxtBreak( SwDrawTextInfo& rInf, long nTextWidth )
}
}
+ xub_StrLen nTxtBreak2 = nTxtBreak == -1 ? STRING_LEN : nTxtBreak;
+
if ( ! bCompress )
- return nTxtBreak;
+ return nTxtBreak2;
- nTxtBreak = nTxtBreak - rInf.GetIdx();
+ nTxtBreak2 = nTxtBreak2 - rInf.GetIdx();
- if( nTxtBreak < nLn )
+ if( nTxtBreak2 < nLn )
{
- if( !nTxtBreak && nLn )
+ if( !nTxtBreak2 && nLn )
nLn = 1;
- else if( nLn > 2 * nTxtBreak )
- nLn = 2 * nTxtBreak;
+ else if( nLn > 2 * nTxtBreak2 )
+ nLn = 2 * nTxtBreak2;
sal_Int32 *pKernArray = new sal_Int32[ nLn ];
rInf.GetOut().GetTextArray( rInf.GetText(), pKernArray,
rInf.GetIdx(), nLn );
@@ -2522,22 +2519,22 @@ xub_StrLen SwFont::GetTxtBreak( SwDrawTextInfo& rInf, long nTextWidth )
rInf.GetKanaComp(), (sal_uInt16)GetHeight( nActual ) ) )
{
long nKernAdd = nKern;
- xub_StrLen nTmpBreak = nTxtBreak;
- if( nKern && nTxtBreak )
- nKern *= nTxtBreak - 1;
- while( nTxtBreak<nLn && nTextWidth >= pKernArray[nTxtBreak] +nKern )
+ xub_StrLen nTmpBreak = nTxtBreak2;
+ if( nKern && nTxtBreak2 )
+ nKern *= nTxtBreak2 - 1;
+ while( nTxtBreak2<nLn && nTextWidth >= pKernArray[nTxtBreak2] +nKern )
{
nKern += nKernAdd;
- ++nTxtBreak;
+ ++nTxtBreak2;
}
if( rInf.GetHyphPos() )
- *rInf.GetHyphPos() += nTxtBreak - nTmpBreak; // It's not perfect
+ *rInf.GetHyphPos() += nTxtBreak2 - nTmpBreak; // It's not perfect
}
delete[] pKernArray;
}
- nTxtBreak = nTxtBreak + rInf.GetIdx();
+ nTxtBreak2 = nTxtBreak2 + rInf.GetIdx();
- return nTxtBreak;
+ return nTxtBreak2;
}
extern Color aGlobalRetoucheColor;
diff --git a/sw/source/core/txtnode/fntcap.cxx b/sw/source/core/txtnode/fntcap.cxx
index 2ae345bcaa5f..70dae9ef58c6 100644
--- a/sw/source/core/txtnode/fntcap.cxx
+++ b/sw/source/core/txtnode/fntcap.cxx
@@ -182,17 +182,17 @@ class SwDoGetCapitalBreak : public SwDoCapitals
{
protected:
long nTxtWidth;
- xub_StrLen nBreak;
+ sal_Int32 m_nBreak;
public:
SwDoGetCapitalBreak( SwDrawTextInfo &rInfo, long const nWidth)
: SwDoCapitals ( rInfo )
, nTxtWidth( nWidth )
- , nBreak( STRING_LEN )
+ , m_nBreak( -1 )
{ }
virtual ~SwDoGetCapitalBreak() {}
virtual void Init( SwFntObj *pUpperFont, SwFntObj *pLowerFont );
virtual void Do();
- xub_StrLen GetBreak() const { return nBreak; }
+ sal_Int32 getBreak() const { return m_nBreak; }
};
void SwDoGetCapitalBreak::Init( SwFntObj *, SwFntObj * )
@@ -208,30 +208,23 @@ void SwDoGetCapitalBreak::Do()
else
{
xub_StrLen nEnd = rInf.GetEnd();
- OUString sText(rInf.GetText()); // only needed until rInf.GetText() returns OUString
- sal_Int32 nIdx2 = rInf.GetIdx(); // ditto
- sal_Int32 nLen2 = rInf.GetLen(); // ditto
- nBreak = GetOut().GetTextBreak( sText, nTxtWidth,
- nIdx2, nLen2, rInf.GetKern() );
+ m_nBreak = GetOut().GetTextBreak( rInf.GetText(), nTxtWidth,
+ rInf.GetIdx(), rInf.GetLen(), rInf.GetKern() );
- rInf.SetText(sText); // ditto
- rInf.SetIdx(nIdx2); // ditto
- rInf.SetLen(nLen2); // ditto
+ if (m_nBreak > nEnd || m_nBreak < 0)
+ m_nBreak = nEnd;
- if( nBreak > nEnd )
- nBreak = nEnd;
-
- // nBreak may be relative to the display string. It has to be
+ // m_nBreak may be relative to the display string. It has to be
// calculated relative to the original string:
if ( GetCapInf() )
{
if ( GetCapInf()->nLen != rInf.GetLen() )
- nBreak = sw_CalcCaseMap( *rInf.GetFont(),
+ m_nBreak = sw_CalcCaseMap( *rInf.GetFont(),
GetCapInf()->rString,
GetCapInf()->nIdx,
- GetCapInf()->nLen, nBreak );
+ GetCapInf()->nLen, m_nBreak );
else
- nBreak = nBreak + GetCapInf()->nIdx;
+ m_nBreak = m_nBreak + GetCapInf()->nIdx;
}
nTxtWidth = 0;
@@ -243,7 +236,7 @@ void SwDoGetCapitalBreak::Do()
* SwFont::GetCapitalBreak()
*************************************************************************/
-xub_StrLen SwFont::GetCapitalBreak( SwViewShell* pSh, const OutputDevice* pOut,
+sal_Int32 SwFont::GetCapitalBreak( SwViewShell* pSh, const OutputDevice* pOut,
const SwScriptInfo* pScript, const OUString& rTxt, long const nTextWidth,
const xub_StrLen nIdx, const xub_StrLen nLen )
{
@@ -263,7 +256,7 @@ xub_StrLen SwFont::GetCapitalBreak( SwViewShell* pSh, const OutputDevice* pOut,
SwDoGetCapitalBreak aDo(aInfo, nTextWidth);
DoOnCapitals( aDo );
- return aDo.GetBreak();
+ return aDo.getBreak();
}
/*************************************************************************
diff --git a/vcl/aqua/source/gdi/atsui/salatslayout.cxx b/vcl/aqua/source/gdi/atsui/salatslayout.cxx
index 250831cea453..801af6a55801 100644
--- a/vcl/aqua/source/gdi/atsui/salatslayout.cxx
+++ b/vcl/aqua/source/gdi/atsui/salatslayout.cxx
@@ -748,13 +748,13 @@ long ATSLayout::FillDXArray( sal_Int32* pDXArray ) const
*
* @return : string index corresponding to the suggested line break
**/
-int ATSLayout::GetTextBreak( long nMaxWidth, long nCharExtra, int nFactor ) const
+sal_Int32 ATSLayout::GetTextBreak( long nMaxWidth, long nCharExtra, int nFactor ) const
{
SAL_INFO("vcl.atsui.layout", "GetTextBreak(" << this << ",nMaxWidth=" << nMaxWidth << ",nCharExtra=" << nCharExtra << ",nFactor=" << nFactor << ")" );
if( !maATSULayout ) {
- SAL_INFO( "vcl.atsui.layout", "GetTextBreak(): no maATSULayout, returning STRING_LEN" );
- return STRING_LEN;
+ SAL_INFO( "vcl.atsui.layout", "GetTextBreak(): no maATSULayout, returning -1" );
+ return -1;
}
// the semantics of the legacy use case (nCharExtra!=0) cannot be mapped to ATSUBreakLine()
@@ -762,7 +762,7 @@ int ATSLayout::GetTextBreak( long nMaxWidth, long nCharExtra, int nFactor ) cons
{
// prepare the measurement by layouting and measuring the un-expanded/un-condensed text
if( !InitGIA() )
- return STRING_LEN;
+ return -1;
// TODO: use a better way than by testing each the char position
ATSUTextMeasurement nATSUSumWidth = 0;
@@ -779,7 +779,7 @@ int ATSLayout::GetTextBreak( long nMaxWidth, long nCharExtra, int nFactor ) cons
return (mnMinCharPos + i);
}
- return STRING_LEN;
+ return -1;
}
// get a quick overview on what could fit
@@ -806,15 +806,15 @@ int ATSLayout::GetTextBreak( long nMaxWidth, long nCharExtra, int nFactor ) cons
OSStatus eStatus = ATSUBreakLine( maATSULayout, mnMinCharPos,
nATSUMaxWidth, false, &nBreakPos );
if( (eStatus != noErr) && (eStatus != kATSULineBreakInWord) )
- return STRING_LEN;
+ return -1;
// the result from ATSUBreakLine() doesn't match the semantics expected by its
// application layer callers from SW+SVX+I18N. Adjust the results to the expectations:
// ATSU reports that everything fits even when trailing spaces would break the line
- // #i89789# OOo's application layers expect STRING_LEN if everything fits
+ // #i89789# OOo's application layers expect -1 if everything fits
if( nBreakPos >= static_cast<UniCharArrayOffset>(mnEndCharPos) )
- return STRING_LEN;
+ return -1;
// GetTextBreak()'s callers expect it to return the "stupid visual line break".
// Returning anything else result.s in subtle problems in the application layers.
diff --git a/vcl/coretext/ctlayout.cxx b/vcl/coretext/ctlayout.cxx
index 435c7b1b8243..b6d2c1665f27 100644
--- a/vcl/coretext/ctlayout.cxx
+++ b/vcl/coretext/ctlayout.cxx
@@ -397,19 +397,19 @@ long CTLayout::FillDXArray( sal_Int32* pDXArray ) const
return nPixWidth;
}
-int CTLayout::GetTextBreak( long nMaxWidth, long /*nCharExtra*/, int nFactor ) const
+sal_Int32 CTLayout::GetTextBreak( long nMaxWidth, long /*nCharExtra*/, int nFactor ) const
{
if( !mpCTLine )
- return STRING_LEN;
+ return -1;
CTTypesetterRef aCTTypeSetter = CTTypesetterCreateWithAttributedString( mpAttrString );
const double fCTMaxWidth = (double)nMaxWidth / nFactor;
CFIndex nIndex = CTTypesetterSuggestClusterBreak( aCTTypeSetter, 0, fCTMaxWidth );
if( nIndex >= mnCharCount )
- return STRING_LEN;
+ return -1;
nIndex += mnMinCharPos;
- return (int)nIndex;
+ return nIndex;
}
void CTLayout::GetCaretPositions( int nMaxIndex, sal_Int32* pCaretXArray ) const
diff --git a/vcl/inc/textlayout.hxx b/vcl/inc/textlayout.hxx
index 541fcf4587b1..d16d2499f9ff 100644
--- a/vcl/inc/textlayout.hxx
+++ b/vcl/inc/textlayout.hxx
@@ -42,7 +42,7 @@ namespace vcl
virtual void DrawText( const Point& _rStartPoint, const OUString& _rText, sal_Int32 _nStartIndex, sal_Int32 _nLength,
MetricVector* _pVector, OUString* _pDisplayText ) = 0;
virtual bool GetCaretPositions( const OUString& _rText, sal_Int32* _pCaretXArray, sal_Int32 _nStartIndex, sal_Int32 _nLength ) const = 0;
- virtual xub_StrLen GetTextBreak( const OUString& _rText, long _nMaxTextWidth, sal_Int32 _nStartIndex, sal_Int32 _nLength ) const = 0;
+ virtual sal_Int32 GetTextBreak( const OUString& _rText, long _nMaxTextWidth, sal_Int32 _nStartIndex, sal_Int32 _nLength ) const = 0;
virtual bool DecomposeTextRectAction() const = 0;
protected:
@@ -84,7 +84,7 @@ namespace vcl
sal_Int32 _nStartIndex,
sal_Int32 _nLength
) const;
- virtual xub_StrLen GetTextBreak(
+ virtual sal_Int32 GetTextBreak(
const OUString& _rText,
long _nMaxTextWidth,
sal_Int32 _nStartIndex,
diff --git a/vcl/source/edit/texteng.cxx b/vcl/source/edit/texteng.cxx
index 3710fbf5ef52..2a4a9fca390d 100644
--- a/vcl/source/edit/texteng.cxx
+++ b/vcl/source/edit/texteng.cxx
@@ -1145,7 +1145,7 @@ sal_uInt16 TextEngine::GetCharPos( sal_uLong nPortion, sal_uInt16 nLine, long nX
if ( IsRightToLeft() != pTextPortion->IsRightToLeft() )
nPosInPortion = pTextPortion->GetWidth() - nPosInPortion;
nCurIndex = mpRefDev->GetTextBreak( pPortion->GetNode()->GetText(), nPosInPortion, nCurIndex );
- // MT: GetTextBreak should assure that we are not withing a CTL cell...
+ // MT: GetTextBreak should assure that we are not within a CTL cell...
}
return nCurIndex;
}
@@ -1688,7 +1688,7 @@ void TextEngine::ImpBreakLine( sal_uLong nPara, TextLine* pLine, TETextPortion*,
DBG_ASSERT( nMaxBreakPos < pNode->GetText().getLength(), "ImpBreakLine: Break?!" );
- if ( nMaxBreakPos == STRING_LEN ) // GetTextBreak() != GetTextSize()
+ if ( nMaxBreakPos == -1 ) // GetTextBreak() != GetTextSize()
nMaxBreakPos = pNode->GetText().getLength() - 1;
uno::Reference < i18n::XBreakIterator > xBI = GetBreakIterator();
diff --git a/vcl/source/gdi/outdev3.cxx b/vcl/source/gdi/outdev3.cxx
index 0ad69cf43684..dc39598df9a8 100644
--- a/vcl/source/gdi/outdev3.cxx
+++ b/vcl/source/gdi/outdev3.cxx
@@ -4705,12 +4705,12 @@ long OutputDevice::ImplGetTextLines( ImplMultiTextLineInfo& rLineInfo,
if ( xBI.is() )
{
const com::sun::star::lang::Locale& rDefLocale(Application::GetSettings().GetUILanguageTag().getLocale());
- xub_StrLen nSoftBreak = _rLayout.GetTextBreak( rStr, nWidth, nPos, nBreakPos - nPos );
+ sal_Int32 nSoftBreak = _rLayout.GetTextBreak( rStr, nWidth, nPos, nBreakPos - nPos );
DBG_ASSERT( nSoftBreak < nBreakPos, "Break?!" );
i18n::LineBreakHyphenationOptions aHyphOptions( xHyph, uno::Sequence <beans::PropertyValue>(), 1 );
i18n::LineBreakUserOptions aUserOptions;
i18n::LineBreakResults aLBR = xBI->getLineBreak( rStr, nSoftBreak, rDefLocale, nPos, aHyphOptions, aUserOptions );
- nBreakPos = (xub_StrLen)aLBR.breakIndex;
+ nBreakPos = aLBR.breakIndex;
if ( nBreakPos <= nPos )
nBreakPos = nSoftBreak;
if ( bHyphenate )
@@ -4728,7 +4728,7 @@ long OutputDevice::ImplGetTextLines( ImplMultiTextLineInfo& rLineInfo,
sal_Unicode cAlternateReplChar = 0;
i18n::Boundary aBoundary = xBI->getWordBoundary( rStr, nBreakPos, rDefLocale, ::com::sun::star::i18n::WordType::DICTIONARY_WORD, sal_True );
sal_Int32 nWordStart = nPos;
- sal_Int32 nWordEnd = (sal_Int32) aBoundary.endPos;
+ sal_Int32 nWordEnd = aBoundary.endPos;
DBG_ASSERT( nWordEnd > nWordStart, "ImpBreakLine: Start >= End?" );
sal_Int32 nWordLen = nWordEnd - nWordStart;
@@ -4737,14 +4737,14 @@ long OutputDevice::ImplGetTextLines( ImplMultiTextLineInfo& rLineInfo,
// #104415# May happen, because getLineBreak may differ from getWordBoudary with DICTIONARY_WORD
// DBG_ASSERT( nWordEnd >= nMaxBreakPos, "Hyph: Break?" );
OUString aWord = rStr.copy( nWordStart, nWordLen );
- sal_uInt16 nMinTrail = static_cast<sal_uInt16>(nWordEnd-nSoftBreak+1); //+1: Before the "broken off" char
+ sal_Int32 nMinTrail = nWordEnd-nSoftBreak+1; //+1: Before the "broken off" char
uno::Reference< linguistic2::XHyphenatedWord > xHyphWord;
if (xHyph.is())
xHyphWord = xHyph->hyphenate( aWord, rDefLocale, aWord.getLength() - nMinTrail, uno::Sequence< beans::PropertyValue >() );
if (xHyphWord.is())
{
sal_Bool bAlternate = xHyphWord->isAlternativeSpelling();
- sal_uInt16 _nWordLen = 1 + xHyphWord->getHyphenPos();
+ sal_Int32 _nWordLen = 1 + xHyphWord->getHyphenPos();
if ( ( _nWordLen >= 2 ) && ( (nWordStart+_nWordLen) >= ( 2 ) ) )
{
@@ -4770,10 +4770,10 @@ long OutputDevice::ImplGetTextLines( ImplMultiTextLineInfo& rLineInfo,
// index.
// TODO: The whole junk will be made easier by a function in
// the Hyphenator, as soon as AMA adds it.
- sal_uInt16 nAltStart = _nWordLen - 1;
- sal_uInt16 nTxtStart = nAltStart - (aAlt.getLength() - aWord.getLength());
- sal_uInt16 nTxtEnd = nTxtStart;
- sal_uInt16 nAltEnd = nAltStart;
+ sal_Int32 nAltStart = _nWordLen - 1;
+ sal_Int32 nTxtStart = nAltStart - (aAlt.getLength() - aWord.getLength());
+ sal_Int32 nTxtEnd = nTxtStart;
+ sal_Int32 nAltEnd = nAltStart;
// The area between nStart and nEnd is the difference
// between AlternativString and OriginalString
@@ -5993,14 +5993,14 @@ sal_Bool OutputDevice::GetTextIsRTL( const OUString& rString, sal_Int32 nIndex,
return (nCharPos != nIndex) ? sal_True : sal_False;
}
-xub_StrLen OutputDevice::GetTextBreak( const OUString& rStr, long nTextWidth,
+sal_Int32 OutputDevice::GetTextBreak( const OUString& rStr, long nTextWidth,
sal_Int32 nIndex, sal_Int32 nLen,
long nCharExtra ) const
{
DBG_CHKTHIS( OutputDevice, ImplDbgCheckOutputDevice );
SalLayout* pSalLayout = ImplLayout( rStr, nIndex, nLen );
- xub_StrLen nRetVal = STRING_LEN;
+ sal_Int32 nRetVal = -1;
if( pSalLayout )
{
// convert logical widths into layout units
@@ -6017,7 +6017,7 @@ xub_StrLen OutputDevice::GetTextBreak( const OUString& rStr, long nTextWidth,
nCharExtra *= nWidthFactor * nSubPixelFactor;
nExtraPixelWidth = ImplLogicWidthToDevicePixel( nCharExtra );
}
- nRetVal = sal::static_int_cast<xub_StrLen>(pSalLayout->GetTextBreak( nTextPixelWidth, nExtraPixelWidth, nSubPixelFactor ));
+ nRetVal = pSalLayout->GetTextBreak( nTextPixelWidth, nExtraPixelWidth, nSubPixelFactor );
pSalLayout->Release();
}
@@ -6025,18 +6025,18 @@ xub_StrLen OutputDevice::GetTextBreak( const OUString& rStr, long nTextWidth,
return nRetVal;
}
-xub_StrLen OutputDevice::GetTextBreak( const OUString& rStr, long nTextWidth,
+sal_Int32 OutputDevice::GetTextBreak( const OUString& rStr, long nTextWidth,
sal_Unicode nHyphenatorChar, sal_Int32& rHyphenatorPos,
sal_Int32 nIndex, sal_Int32 nLen,
long nCharExtra ) const
{
DBG_CHKTHIS( OutputDevice, ImplDbgCheckOutputDevice );
- rHyphenatorPos = STRING_LEN;
+ rHyphenatorPos = -1;
SalLayout* pSalLayout = ImplLayout( rStr, nIndex, nLen );
if( !pSalLayout )
- return STRING_LEN;
+ return -1;
// convert logical widths into layout units
// NOTE: be very careful to avoid rounding errors for nCharExtra case
@@ -6055,7 +6055,7 @@ xub_StrLen OutputDevice::GetTextBreak( const OUString& rStr, long nTextWidth,
}
// calculate un-hyphenated break position
- xub_StrLen nRetVal = sal::static_int_cast<xub_StrLen>(pSalLayout->GetTextBreak( nTextPixelWidth, nExtraPixelWidth, nSubPixelFactor ));
+ sal_Int32 nRetVal = pSalLayout->GetTextBreak( nTextPixelWidth, nExtraPixelWidth, nSubPixelFactor );
// calculate hyphenated break position
OUString aHyphenatorStr(nHyphenatorChar);
@@ -6072,14 +6072,11 @@ xub_StrLen OutputDevice::GetTextBreak( const OUString& rStr, long nTextWidth,
if( nExtraPixelWidth > 0 )
nTextPixelWidth -= nExtraPixelWidth;
- // 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));
-
- nTmp = std::min(nTmp, nRetVal);
+ rHyphenatorPos =
+ pSalLayout->GetTextBreak(nTextPixelWidth, nExtraPixelWidth, nSubPixelFactor);
- // TODO: remove nTmp when GetTextBreak sal_Int32
- rHyphenatorPos = (nTmp == STRING_LEN) ? -1 : nTmp;
+ if( rHyphenatorPos > nRetVal )
+ rHyphenatorPos = nRetVal;
}
pSalLayout->Release();
@@ -6574,7 +6571,7 @@ OUString OutputDevice::ImplGetEllipsisString( const OutputDevice& rTargetDevice,
OUString aStr = rOrigStr;
sal_Int32 nIndex = _rLayout.GetTextBreak( aStr, nMaxWidth, 0, aStr.getLength() );
- if ( nIndex != STRING_LEN )
+ if ( nIndex != -1 )
{
if( (nStyle & TEXT_DRAW_CENTERELLIPSIS) == TEXT_DRAW_CENTERELLIPSIS )
{
diff --git a/vcl/source/gdi/sallayout.cxx b/vcl/source/gdi/sallayout.cxx
index 450ec2325731..5bd27fa6646b 100644
--- a/vcl/source/gdi/sallayout.cxx
+++ b/vcl/source/gdi/sallayout.cxx
@@ -1351,12 +1351,12 @@ void GenericSalLayout::GetCaretPositions( int nMaxIndex, sal_Int32* pCaretXArray
// -----------------------------------------------------------------------
-int GenericSalLayout::GetTextBreak( long nMaxWidth, long nCharExtra, int nFactor ) const
+sal_Int32 GenericSalLayout::GetTextBreak( long nMaxWidth, long nCharExtra, int nFactor ) const
{
int nCharCapacity = mnEndCharPos - mnMinCharPos;
sal_Int32* pCharWidths = (sal_Int32*)alloca( nCharCapacity * sizeof(sal_Int32) );
if( !GetCharWidths( pCharWidths ) )
- return STRING_LEN;
+ return -1;
long nWidth = 0;
for( int i = mnMinCharPos; i < mnEndCharPos; ++i )
@@ -1367,7 +1367,7 @@ int GenericSalLayout::GetTextBreak( long nMaxWidth, long nCharExtra, int nFactor
nWidth += nCharExtra;
}
- return STRING_LEN;
+ return -1;
}
// -----------------------------------------------------------------------
@@ -2003,10 +2003,10 @@ void MultiSalLayout::DrawText( SalGraphics& rGraphics ) const
// -----------------------------------------------------------------------
-int MultiSalLayout::GetTextBreak( long nMaxWidth, long nCharExtra, int nFactor ) const
+sal_Int32 MultiSalLayout::GetTextBreak( long nMaxWidth, long nCharExtra, int nFactor ) const
{
if( mnLevel <= 0 )
- return STRING_LEN;
+ return -1;
if( mnLevel == 1 )
return mpLayouts[0]->GetTextBreak( nMaxWidth, nCharExtra, nFactor );
@@ -2037,7 +2037,7 @@ int MultiSalLayout::GetTextBreak( long nMaxWidth, long nCharExtra, int nFactor )
nWidth += nCharExtra;
}
- return STRING_LEN;
+ return -1;
}
// -----------------------------------------------------------------------
diff --git a/vcl/source/gdi/textlayout.cxx b/vcl/source/gdi/textlayout.cxx
index ba2cfb5b89c3..5e7529900683 100644
--- a/vcl/source/gdi/textlayout.cxx
+++ b/vcl/source/gdi/textlayout.cxx
@@ -60,7 +60,7 @@ namespace vcl
return m_rTargetDevice.GetCaretPositions( _rText, _pCaretXArray, _nStartIndex, _nLength );
}
- xub_StrLen DefaultTextLayout::GetTextBreak( const OUString& _rText, long _nMaxTextWidth, sal_Int32 _nStartIndex, sal_Int32 _nLength ) const
+ sal_Int32 DefaultTextLayout::GetTextBreak( const OUString& _rText, long _nMaxTextWidth, sal_Int32 _nStartIndex, sal_Int32 _nLength ) const
{
return m_rTargetDevice.GetTextBreak( _rText, _nMaxTextWidth, _nStartIndex, _nLength );
}
@@ -80,7 +80,7 @@ namespace vcl
virtual long GetTextWidth( const OUString& rStr, sal_Int32 nIndex, sal_Int32 nLen ) const;
virtual void DrawText( const Point& _rStartPoint, const OUString& _rText, sal_Int32 _nStartIndex, sal_Int32 _nLength, MetricVector* _pVector, OUString* _pDisplayText );
virtual bool GetCaretPositions( const OUString& _rText, sal_Int32* _pCaretXArray, sal_Int32 _nStartIndex, sal_Int32 _nLength ) const;
- virtual xub_StrLen GetTextBreak( const OUString& _rText, long _nMaxTextWidth, sal_Int32 _nStartIndex, sal_Int32 _nLength ) const;
+ virtual sal_Int32 GetTextBreak( const OUString& _rText, long _nMaxTextWidth, sal_Int32 _nStartIndex, sal_Int32 _nLength ) const;
virtual bool DecomposeTextRectAction() const;
public:
@@ -243,7 +243,7 @@ namespace vcl
return true;
}
- xub_StrLen ReferenceDeviceTextLayout::GetTextBreak( const OUString& _rText, long _nMaxTextWidth, sal_Int32 _nStartIndex, sal_Int32 _nLength ) const
+ sal_Int32 ReferenceDeviceTextLayout::GetTextBreak( const OUString& _rText, long _nMaxTextWidth, sal_Int32 _nStartIndex, sal_Int32 _nLength ) const
{
if ( !lcl_normalizeLength( _rText, _nStartIndex, _nLength ) )
return 0;
diff --git a/vcl/source/glyphs/graphite_layout.cxx b/vcl/source/glyphs/graphite_layout.cxx
index 348c4e36cbcc..b4498cf1d739 100644
--- a/vcl/source/glyphs/graphite_layout.cxx
+++ b/vcl/source/glyphs/graphite_layout.cxx
@@ -680,7 +680,7 @@ bool GraphiteLayout::LayoutGlyphs(ImplLayoutArgs& rArgs, gr_segment * pSegment)
return true;
}
-int GraphiteLayout::GetTextBreak(long maxmnWidth, long char_extra, int factor) const
+sal_Int32 GraphiteLayout::GetTextBreak(long maxmnWidth, long char_extra, int factor) const
{
#ifdef GRLAYOUT_DEBUG
fprintf(grLog(),"Gr::GetTextBreak c[%d-%d) maxWidth %ld char extra %ld factor %d\n",
@@ -689,7 +689,7 @@ int GraphiteLayout::GetTextBreak(long maxmnWidth, long char_extra, int factor) c
// return quickly if this segment is narrower than the target width
if (maxmnWidth > mnWidth * factor + char_extra * (mnEndCharPos - mnMinCharPos - 1))
- return STRING_LEN;
+ return -1;
long nWidth = mvCharDxs[0] * factor;
long wLastBreak = 0;
@@ -724,8 +724,10 @@ int GraphiteLayout::GetTextBreak(long maxmnWidth, long char_extra, int factor) c
fprintf(grLog(), "Gr::GetTextBreak break after %d, weights(%d, %d)\n", nBreak - mnMinCharPos, mvCharBreaks[nBreak - mnMinCharPos], mvCharBreaks[nBreak - mnMinCharPos - 1]);
#endif
- if (nBreak > mnEndCharPos) nBreak = STRING_LEN;
- else if (nBreak < mnMinCharPos) nBreak = mnMinCharPos;
+ if (nBreak > mnEndCharPos)
+ nBreak = -1;
+ else if (nBreak < mnMinCharPos)
+ nBreak = mnMinCharPos;
return nBreak;
}
diff --git a/vcl/win/source/gdi/winlayout.cxx b/vcl/win/source/gdi/winlayout.cxx
index f240f17e68a5..a0f1ec4660b6 100644
--- a/vcl/win/source/gdi/winlayout.cxx
+++ b/vcl/win/source/gdi/winlayout.cxx
@@ -669,12 +669,12 @@ long SimpleWinLayout::FillDXArray( long* pDXArray ) const
// -----------------------------------------------------------------------
-int SimpleWinLayout::GetTextBreak( long nMaxWidth, long nCharExtra, int nFactor ) const
+sal_Int32 SimpleWinLayout::GetTextBreak( long nMaxWidth, long nCharExtra, int nFactor ) const
// NOTE: the nFactor is used to prevent rounding errors for small nCharExtra values
{
if( mnWidth )
if( (mnWidth * nFactor + mnCharCount * nCharExtra) <= nMaxWidth )
- return STRING_LEN;
+ return -1;
long nExtraWidth = mnBaseAdv * nFactor;
for( int n = 0; n < mnCharCount; ++n )
@@ -689,7 +689,7 @@ int SimpleWinLayout::GetTextBreak( long nMaxWidth, long nCharExtra, int nFactor
nExtraWidth += nCharExtra;
}
- return STRING_LEN;
+ return -1;
}
// -----------------------------------------------------------------------
@@ -2182,7 +2182,7 @@ long UniscribeLayout::FillDXArray( long* pDXArray ) const
// -----------------------------------------------------------------------
-int UniscribeLayout::GetTextBreak( long nMaxWidth, long nCharExtra, int nFactor ) const
+sal_Int32 UniscribeLayout::GetTextBreak( long nMaxWidth, long nCharExtra, int nFactor ) const
{
long nWidth = 0;
for( int i = mnMinCharPos; i < mnEndCharPos; ++i )
@@ -2222,7 +2222,7 @@ int UniscribeLayout::GetTextBreak( long nMaxWidth, long nCharExtra, int nFactor
}
// the whole layout did fit inside the nMaxWidth
- return STRING_LEN;
+ return -1;
}
// -----------------------------------------------------------------------