summaryrefslogtreecommitdiff
path: root/vcl/source/outdev
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2015-09-29 13:48:03 +0200
committerMichael Stahl <mstahl@redhat.com>2015-09-29 14:57:42 +0200
commit16e3daba9158bfa66050502034bc082583612a40 (patch)
tree52c4af04bd3daedc79063443814b2464d73031bf /vcl/source/outdev
parent2c9a1811fcd7f155226b315fc91811ba195c2c57 (diff)
vcl: replace alloca() with std::unique_ptr
Change-Id: If0f44ac761afdf50a8e6f5c77023ae5d74fdcad9
Diffstat (limited to 'vcl/source/outdev')
-rw-r--r--vcl/source/outdev/text.cxx28
1 files changed, 15 insertions, 13 deletions
diff --git a/vcl/source/outdev/text.cxx b/vcl/source/outdev/text.cxx
index ceffc84fbbe9..f0a248ddae31 100644
--- a/vcl/source/outdev/text.cxx
+++ b/vcl/source/outdev/text.cxx
@@ -23,7 +23,6 @@
#include <cmath>
#include <sal/types.h>
-#include <sal/alloca.h>
#include <basegfx/matrix/b2dhommatrix.hxx>
@@ -1019,12 +1018,12 @@ long OutputDevice::GetTextArray( const OUString& rStr, long* pDXAry,
if( !pSalLayout )
return 0;
#if VCL_FLOAT_DEVICE_PIXEL
- DeviceCoordinate* pDXPixelArray = NULL;
+ std::unique_ptr<DeviceCoordinate[]> pDXPixelArray;
if(pDXAry)
{
- pDXPixelArray = static_cast<DeviceCoordinate*>(alloca(nLen * sizeof(DeviceCoordinate)));
+ pDXPixelArray.reset(new DeviceCoordinate[nLen]);
}
- DeviceCoordinate nWidth = pSalLayout->FillDXArray( pDXPixelArray );
+ DeviceCoordinate nWidth = pSalLayout->FillDXArray( pDXPixelArray.get() );
int nWidthFactor = pSalLayout->GetUnitsPerPixel();
pSalLayout->Release();
@@ -1346,7 +1345,8 @@ SalLayout* OutputDevice::ImplLayout(const OUString& rOrigStr,
pLayoutCache = nullptr; // don't use cache with modified string!
}
DeviceCoordinate nPixelWidth = (DeviceCoordinate)nLogicalWidth;
- DeviceCoordinate* pDXPixelArray = NULL;
+ std::unique_ptr<DeviceCoordinate[]> xDXPixelArray;
+ DeviceCoordinate* pDXPixelArray(nullptr);
if( nLogicalWidth && mbMap )
{
nPixelWidth = LogicWidthToDeviceCoordinate( nLogicalWidth );
@@ -1357,7 +1357,8 @@ SalLayout* OutputDevice::ImplLayout(const OUString& rOrigStr,
if(mbMap)
{
// convert from logical units to font units using a temporary array
- pDXPixelArray = static_cast<DeviceCoordinate*>(alloca( nLen * sizeof(DeviceCoordinate) ));
+ xDXPixelArray.reset(new DeviceCoordinate[nLen]);
+ pDXPixelArray = xDXPixelArray.get();
// using base position for better rounding a.k.a. "dancing characters"
DeviceCoordinate nPixelXOfs = LogicWidthToDeviceCoordinate( rLogicalPos.X() );
for( int i = 0; i < nLen; ++i )
@@ -1368,7 +1369,8 @@ SalLayout* OutputDevice::ImplLayout(const OUString& rOrigStr,
else
{
#if VCL_FLOAT_DEVICE_PIXEL
- pDXPixelArray = static_cast<DeviceCoordinate*>(alloca( nLen * sizeof(DeviceCoordinate) ));
+ xDXPixelArray.reset(new DeviceCoordinate[nLen]);
+ pDXPixelArray = xDXPixelArray.get();
for( int i = 0; i < nLen; ++i )
{
pDXPixelArray[i] = pDXArray[i];
@@ -1693,8 +1695,8 @@ void OutputDevice::ImplDrawText( OutputDevice& rTargetDevice, const Rectangle& r
long nMnemonicY;
DeviceCoordinate nMnemonicWidth;
- long* pCaretXArray = static_cast<long*>(alloca( 2 * sizeof(long) * nLineLen ));
- /*sal_Bool bRet =*/ _rLayout.GetCaretPositions( aStr, pCaretXArray,
+ std::unique_ptr<long[]> const pCaretXArray(new long[2 * nLineLen]);
+ /*sal_Bool bRet =*/ _rLayout.GetCaretPositions( aStr, pCaretXArray.get(),
nIndex, nLineLen );
long lc_x1 = pCaretXArray[2*(nMnemonicPos - nIndex)];
long lc_x2 = pCaretXArray[2*(nMnemonicPos - nIndex)+1];
@@ -1762,8 +1764,8 @@ void OutputDevice::ImplDrawText( OutputDevice& rTargetDevice, const Rectangle& r
DeviceCoordinate nMnemonicWidth = 0;
if ( nMnemonicPos != -1 )
{
- long* pCaretXArray = static_cast<long*>(alloca( 2 * sizeof(long) * aStr.getLength() ));
- /*sal_Bool bRet =*/ _rLayout.GetCaretPositions( aStr, pCaretXArray, 0, aStr.getLength() );
+ std::unique_ptr<long[]> const pCaretXArray(new long[2 * aStr.getLength()]);
+ /*sal_Bool bRet =*/ _rLayout.GetCaretPositions( aStr, pCaretXArray.get(), 0, aStr.getLength() );
long lc_x1 = pCaretXArray[2*(nMnemonicPos)];
long lc_x2 = pCaretXArray[2*(nMnemonicPos)+1];
nMnemonicWidth = rTargetDevice.LogicWidthToDeviceCoordinate( std::abs(lc_x1 - lc_x2) );
@@ -2213,8 +2215,8 @@ void OutputDevice::DrawCtrlText( const Point& rPos, const OUString& rStr,
nMnemonicPos = nLen-1;
}
- long* pCaretXArray = static_cast<long*>(alloca( 2 * sizeof(long) * nLen ));
- /*sal_Bool bRet =*/ GetCaretPositions( aStr, pCaretXArray, nIndex, nLen );
+ std::unique_ptr<long[]> const pCaretXArray(new long[2 * nLen]);
+ /*sal_Bool bRet =*/ GetCaretPositions( aStr, pCaretXArray.get(), nIndex, nLen );
long lc_x1 = pCaretXArray[ 2*(nMnemonicPos - nIndex) ];
long lc_x2 = pCaretXArray[ 2*(nMnemonicPos - nIndex)+1 ];
nMnemonicWidth = ::abs((int)(lc_x1 - lc_x2));