[PATCH] Use OUString and sal_Int32 in GetTextArray() and ImplLayout(...
Christina Roßmanith (via_Code_Review)
gerrit at gerrit.libreoffice.org
Sun Mar 24 08:31:18 PDT 2013
Hi,
I have submitted a patch for review:
https://gerrit.libreoffice.org/2967
To pull it, you can do:
git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/67/2967/1
Use OUString and sal_Int32 in GetTextArray() and ImplLayout()
Change-Id: I2c1e5b7d53c0d78f2ccf9ac317a7ff40298cd68d
---
M vcl/inc/vcl/outdev.hxx
M vcl/source/gdi/outdev3.cxx
2 files changed, 26 insertions(+), 41 deletions(-)
diff --git a/vcl/inc/vcl/outdev.hxx b/vcl/inc/vcl/outdev.hxx
index 5f00757..44a5979 100644
--- a/vcl/inc/vcl/outdev.hxx
+++ b/vcl/inc/vcl/outdev.hxx
@@ -378,10 +378,9 @@
SAL_DLLPRIVATE bool ImplSelectClipRegion( const Region&, SalGraphics* pGraphics = NULL );
SAL_DLLPRIVATE void ImplSetClipRegion( const Region* pRegion );
- SAL_DLLPRIVATE SalLayout* ImplLayout( const String&, xub_StrLen nIndex,
- xub_StrLen nLen, const Point& rLogicPos = Point(0,0),
- long nLogicWidth=0, const sal_Int32* pLogicDXArray=NULL,
- bool bFilter = false ) const;
+ SAL_DLLPRIVATE SalLayout* ImplLayout( const OUString&, sal_Int32 nIndex, sal_Int32 nLen,
+ const Point& rLogicPos = Point(0,0), long nLogicWidth=0,
+ const sal_Int32* pLogicDXArray=NULL, bool bFilter = false ) const;
SAL_DLLPRIVATE ImplLayoutArgs ImplPrepareLayoutArgs( OUString&, const sal_Int32 nIndex, const sal_Int32 nLen,
long nPixelWidth, const sal_Int32* pPixelDXArray ) const;
SAL_DLLPRIVATE SalLayout* ImplGlyphFallbackLayout( SalLayout*, ImplLayoutArgs& ) const;
@@ -583,9 +582,8 @@
const sal_Int32* pDXAry = NULL,
xub_StrLen nIndex = 0,
xub_StrLen nLen = STRING_LEN );
- long GetTextArray( const XubString& rStr, sal_Int32* pDXAry = NULL,
- xub_StrLen nIndex = 0,
- xub_StrLen nLen = STRING_LEN ) const;
+ long GetTextArray( const OUString& rStr, sal_Int32* pDXAry = NULL,
+ sal_Int32 nIndex = 0, sal_Int32 nLen = -1 ) const;
bool GetCaretPositions( const XubString&, sal_Int32* pCaretXArray,
xub_StrLen nIndex, xub_StrLen nLen,
sal_Int32* pDXAry = NULL, long nWidth = 0,
diff --git a/vcl/source/gdi/outdev3.cxx b/vcl/source/gdi/outdev3.cxx
index 1fedcbd..56d1d4a 100644
--- a/vcl/source/gdi/outdev3.cxx
+++ b/vcl/source/gdi/outdev3.cxx
@@ -5475,7 +5475,11 @@
{
DBG_CHKTHIS( OutputDevice, ImplDbgCheckOutputDevice );
- long nWidth = GetTextArray( rStr, NULL, nIndex, nLen );
+ sal_Int32 nLen2 = (nLen == STRING_LEN) ? -1 : nLen; // only needed until nLen is sal_Int32
+ sal_Int32 nIndex2 = nIndex; // ditto
+ OUString aTmpStr(rStr);
+ long nWidth = GetTextArray( aTmpStr, NULL, nIndex2, nLen2 );
+
return nWidth;
}
@@ -5532,15 +5536,17 @@
mpAlphaVDev->DrawTextArray( rStartPt, rStr, pDXAry, nIndex, nLen );
}
-long OutputDevice::GetTextArray( const String& rStr, sal_Int32* pDXAry,
- xub_StrLen nIndex, xub_StrLen nLen ) const
+long OutputDevice::GetTextArray( const OUString& rStr, sal_Int32* pDXAry,
+ sal_Int32 nIndex, sal_Int32 nLen ) const
{
+ // MEM: default nLen = STRING_LENGTH
DBG_CHKTHIS( OutputDevice, ImplDbgCheckOutputDevice );
- if( nIndex >= rStr.Len() )
+ if( nIndex >= rStr.getLength() )
return 0;
- if( (sal_uLong)nIndex+nLen >= rStr.Len() )
- nLen = rStr.Len() - nIndex;
+
+ if( nLen < 0 || nIndex+nLen >= rStr.getLength() )
+ nLen = rStr.getLength() - nIndex;
// do layout
SalLayout* pSalLayout = ImplLayout( rStr, nIndex, nLen );
@@ -5776,12 +5782,8 @@
return aLayoutArgs;
}
-SalLayout* OutputDevice::ImplLayout( const String& rOrigStr,
- xub_StrLen nMinIndex,
- xub_StrLen nLen,
- const Point& rLogicalPos,
- long nLogicalWidth,
- const sal_Int32* pDXArray,
+SalLayout* OutputDevice::ImplLayout( const OUString& rOrigStr, sal_Int32 nMinIndex, sal_Int32 nLen,
+ const Point& rLogicalPos, long nLogicalWidth, const sal_Int32* pDXArray,
bool bFilter ) const
{
// we need a graphics
@@ -5797,28 +5799,21 @@
ImplInitFont();
// check string index and length
- if( (unsigned)nMinIndex + nLen > rOrigStr.Len() )
+ if( nMinIndex + nLen > rOrigStr.getLength() )
{
- const int nNewLen = (int)rOrigStr.Len() - nMinIndex;
+ const sal_Int32 nNewLen = rOrigStr.getLength() - nMinIndex;
if( nNewLen <= 0 )
return NULL;
- nLen = static_cast<xub_StrLen>(nNewLen);
+ nLen = nNewLen;
}
- String aStr = rOrigStr;
+ OUString aStr = rOrigStr;
// filter out special markers
if( bFilter )
{
sal_Int32 nCutStart, nCutStop, nOrgLen = nLen;
- OUString aTmpStr(aStr);
- OUString aTmpOrigStr(rOrigStr); // only needed until rOrigStr is OUString
- sal_Int32 nMinIndex2=nMinIndex; // ditto
- sal_Int32 nLen2=nLen; // ditto
- bool bFiltered = mpGraphics->filterText( aTmpOrigStr, aTmpStr, nMinIndex2, nLen2, nCutStart, nCutStop );
- nLen = nLen2; // ditto
- nMinIndex = nMinIndex2; // ditto
- aStr = aTmpStr;
+ bool bFiltered = mpGraphics->filterText( rOrigStr, aStr, nMinIndex, nLen, nCutStart, nCutStop );
if( !nLen )
return NULL;
@@ -5843,9 +5838,7 @@
// convert from logical units to physical units
// recode string if needed
if( mpFontEntry->mpConversion ) {
- OUString aTmpStr(aStr); // only needed until aStr is OUString as well
- mpFontEntry->mpConversion->RecodeString( aTmpStr, 0, aTmpStr.getLength() );
- aStr = String(aTmpStr);
+ mpFontEntry->mpConversion->RecodeString( aStr, 0, aStr.getLength() );
}
long nPixelWidth = nLogicalWidth;
@@ -5863,13 +5856,7 @@
pDXArray = pTempDXAry;
}
- OUString aTmpStr(aStr); // only needed until aStr is OUString as well
- sal_Int32 nMinIndex2=nMinIndex; // ditto
- sal_Int32 nLen2=nLen; // ditto
- ImplLayoutArgs aLayoutArgs = ImplPrepareLayoutArgs( aTmpStr, nMinIndex, nLen, nPixelWidth, pDXArray );
- aStr = String(aTmpStr); // ditto
- nLen = nLen2; // ditto
- nMinIndex = nMinIndex2; // ditto
+ ImplLayoutArgs aLayoutArgs = ImplPrepareLayoutArgs( aStr, nMinIndex, nLen, nPixelWidth, pDXArray );
// get matching layout object for base font
SalLayout* pSalLayout = NULL;
--
To view, visit https://gerrit.libreoffice.org/2967
To unsubscribe, visit https://gerrit.libreoffice.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I2c1e5b7d53c0d78f2ccf9ac317a7ff40298cd68d
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: master
Gerrit-Owner: Christina Roßmanith <ChrRossmanith at web.de>
More information about the LibreOffice
mailing list