Kaydet (Commit) 10cd5567 authored tarafından Tomaž Vajngerl's avatar Tomaž Vajngerl

vcl wmf: EnhWMFReader more cleanup

Change-Id: Ia6bff28bc70214da965c26cd72ea332573576cc1
üst e6c5c854
...@@ -158,36 +158,40 @@ namespace ...@@ -158,36 +158,40 @@ namespace
#ifdef OSL_BIGENDIAN #ifdef OSL_BIGENDIAN
// little endian <-> big endian switch // little endian <-> big endian switch
static float GetSwapFloat( SvStream& rSt ) static float GetSwapFloat(SvStream& rStream)
{ {
float fTmp; float fTmp;
sal_Int8* pPtr = (sal_Int8*)&fTmp; sal_Int8* pPtr = (sal_Int8*)&fTmp;
rSt.ReadSChar( pPtr[3] ); rStream.ReadSChar(pPtr[3]);
rSt.ReadSChar( pPtr[2] ); rStream.ReadSChar(pPtr[2]);
rSt.ReadSChar( pPtr[1] ); rStream.ReadSChar(pPtr[1]);
rSt.ReadSChar( pPtr[0] ); rStream.ReadSChar(pPtr[0]);
return fTmp; return fTmp;
} }
#endif #endif
struct BLENDFUNCTION{ struct BLENDFUNCTION
{
unsigned char aBlendOperation; unsigned char aBlendOperation;
unsigned char aBlendFlags; unsigned char aBlendFlags;
unsigned char aSrcConstantAlpha; unsigned char aSrcConstantAlpha;
unsigned char aAlphaFormat; unsigned char aAlphaFormat;
friend SvStream& operator>>( SvStream& rIn, BLENDFUNCTION& rBlendFun ); friend SvStream& operator>>(SvStream& rInStream, BLENDFUNCTION& rBlendFun);
}; };
SvStream& operator>>( SvStream& rIn, BLENDFUNCTION& rBlendFun ) SvStream& operator>>(SvStream& rInStream, BLENDFUNCTION& rBlendFun)
{ {
rIn.ReadUChar( rBlendFun.aBlendOperation ).ReadUChar( rBlendFun.aBlendFlags ).ReadUChar( rBlendFun.aSrcConstantAlpha ).ReadUChar( rBlendFun.aAlphaFormat ); rInStream.ReadUChar(rBlendFun.aBlendOperation);
return rIn; rInStream.ReadUChar(rBlendFun.aBlendFlags);
rInStream.ReadUChar(rBlendFun.aSrcConstantAlpha);
rInStream.ReadUChar(rBlendFun.aAlphaFormat);
return rInStream;
} }
SvStream& operator>>( SvStream& rIn, XForm& rXForm ) SvStream& operator>>(SvStream& rInStream, XForm& rXForm)
{ {
if ( sizeof( float ) != 4 ) if (sizeof(float) != 4)
{ {
OSL_FAIL( "EnhWMFReader::sizeof( float ) != 4" ); OSL_FAIL( "EnhWMFReader::sizeof( float ) != 4" );
rXForm = XForm(); rXForm = XForm();
...@@ -195,51 +199,59 @@ SvStream& operator>>( SvStream& rIn, XForm& rXForm ) ...@@ -195,51 +199,59 @@ SvStream& operator>>( SvStream& rIn, XForm& rXForm )
else else
{ {
#ifdef OSL_BIGENDIAN #ifdef OSL_BIGENDIAN
rXForm.eM11 = GetSwapFloat( rIn ); rXForm.eM11 = GetSwapFloat(rInStream);
rXForm.eM12 = GetSwapFloat( rIn ); rXForm.eM12 = GetSwapFloat(rInStream);
rXForm.eM21 = GetSwapFloat( rIn ); rXForm.eM21 = GetSwapFloat(rInStream);
rXForm.eM22 = GetSwapFloat( rIn ); rXForm.eM22 = GetSwapFloat(rInStream);
rXForm.eDx = GetSwapFloat( rIn ); rXForm.eDx = GetSwapFloat(rInStream);
rXForm.eDy = GetSwapFloat( rIn ); rXForm.eDy = GetSwapFloat(rInStream);
#else #else
rIn.ReadFloat( rXForm.eM11 ).ReadFloat( rXForm.eM12 ).ReadFloat( rXForm.eM21 ).ReadFloat( rXForm.eM22 ) rInStream.ReadFloat(rXForm.eM11);
.ReadFloat( rXForm.eDx ).ReadFloat( rXForm.eDy ); rInStream.ReadFloat(rXForm.eM12);
rInStream.ReadFloat(rXForm.eM21);
rInStream.ReadFloat(rXForm.eM22);
rInStream.ReadFloat(rXForm.eDx);
rInStream.ReadFloat(rXForm.eDy);
#endif #endif
} }
return rIn; return rInStream;
} }
static bool ImplReadRegion( PolyPolygon& rPolyPoly, SvStream& rSt, sal_uInt32 nLen ) static bool ImplReadRegion( PolyPolygon& rPolyPoly, SvStream& rStream, sal_uInt32 nLen )
{ {
bool bOk = false; if (nLen == 0)
if ( nLen ) return false;
sal_uInt32 nHdSize, nType, nCount, nRgnSize, i;
rStream.ReadUInt32(nHdSize);
rStream.ReadUInt32(nType);
rStream.ReadUInt32(nCount);
rStream.ReadUInt32(nRgnSize);
if ( nCount > 0
&& nType == RDH_RECTANGLES
&& nLen >= ((nCount << 4) + (nHdSize - 16)))
{ {
sal_uInt32 nHdSize, nType, nCount, nRgnSize, i; sal_Int32 nx1, ny1, nx2, ny2;
rSt.ReadUInt32( nHdSize )
.ReadUInt32( nType )
.ReadUInt32( nCount )
.ReadUInt32( nRgnSize );
if ( nCount && ( nType == RDH_RECTANGLES ) &&
( nLen >= ( ( nCount << 4 ) + ( nHdSize - 16 ) ) ) )
{
sal_Int32 nx1, ny1, nx2, ny2;
for ( i = 0; i < nCount; i++ ) for (i = 0; i < nCount; i++)
{ {
rSt.ReadInt32( nx1 ).ReadInt32( ny1 ).ReadInt32( nx2 ).ReadInt32( ny2 ); rStream.ReadInt32(nx1);
rStream.ReadInt32(ny1);
Rectangle aRect( Point( nx1, ny1 ), Point( nx2, ny2 ) ); rStream.ReadInt32(nx2);
Polygon aPolygon( aRect ); rStream.ReadInt32(ny2);
PolyPolygon aPolyPolyOr1( aPolygon );
PolyPolygon aPolyPolyOr2( rPolyPoly ); Rectangle aRectangle(Point(nx1, ny1), Point(nx2, ny2));
rPolyPoly.GetUnion( aPolyPolyOr1, aPolyPolyOr2 );
rPolyPoly = aPolyPolyOr2; Polygon aPolygon(aRectangle);
} PolyPolygon aPolyPolyOr1(aPolygon);
bOk = true; PolyPolygon aPolyPolyOr2(rPolyPoly);
rPolyPoly.GetUnion(aPolyPolyOr1, aPolyPolyOr2);
rPolyPoly = aPolyPolyOr2;
} }
return true;
} }
return bOk; return false;
} }
} // anonymous namespace } // anonymous namespace
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment