diff options
author | Armin Le Grand <alg@apache.org> | 2012-10-23 12:46:28 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2013-06-12 14:31:10 +0100 |
commit | e717d1dcce7f8906311c5ccdbb2326b61a702630 (patch) | |
tree | 91290db5179fa4b4927af94c0f023f40dcda434c /filter/source/graphicfilter/eps/eps.cxx | |
parent | 9e50e5f82927742c56e89258b80bc8cd93bb7e3b (diff) |
Resolves: #i121237# Rework/Cleanup of Region code...
due to missing complete support for B2DPolygon class
(cherry picked from commit cab10eeb7878edf224a004fd7640bd4adf8d3c51)
Conflicts:
cppcanvas/source/mtfrenderer/implrenderer.cxx
svx/source/sdr/overlay/overlaymanagerbuffered.cxx
svx/source/svdraw/svdpntv.cxx
vcl/aqua/source/gdi/salgdi.cxx
vcl/inc/region.h
vcl/inc/unx/gtk/gtkgdi.hxx
vcl/inc/vcl/regband.hxx
vcl/inc/vcl/region.hxx
vcl/os2/source/gdi/salgdi.cxx
vcl/source/gdi/bmpacc3.cxx
vcl/source/gdi/outdev2.cxx
vcl/source/gdi/outmap.cxx
vcl/source/gdi/regband.cxx
vcl/source/gdi/region.cxx
vcl/source/window/window.cxx
vcl/unx/generic/gdi/pspgraphics.cxx
vcl/unx/headless/svpgdi.cxx
vcl/unx/headless/svppspgraphics.cxx
vcl/win/source/gdi/salgdi.cxx
Change-Id: Iee9a66ff431c3cecb7603e445147b67715de0f7d
Remove unused variable to prevent compiler warning
(cherry picked from commit 0ac65ccf079e3e22ac23cbe7ae546504c863c31f)
Change-Id: Icbcaa9d576a7e560d96debc7360bdbe9090b3fd3
Wrong comparison with bool corrected
(cherry picked from commit 612cefdcf6176b6bb847ce899d89af40ef313a90)
Change-Id: I1cf5de6734b588f78d8e870ba7b7860634b461ce
Diffstat (limited to 'filter/source/graphicfilter/eps/eps.cxx')
-rw-r--r-- | filter/source/graphicfilter/eps/eps.cxx | 111 |
1 files changed, 84 insertions, 27 deletions
diff --git a/filter/source/graphicfilter/eps/eps.cxx b/filter/source/graphicfilter/eps/eps.cxx index 454d683393ed..12a18e69de14 100644 --- a/filter/source/graphicfilter/eps/eps.cxx +++ b/filter/source/graphicfilter/eps/eps.cxx @@ -1649,15 +1649,16 @@ void PSWriter::ImplSetClipRegion( Region& rClipRegion ) { if ( !rClipRegion.IsEmpty() ) { - Rectangle aRect; - RegionHandle hRegionHandle = rClipRegion.BeginEnumRects(); + RectangleVector aRectangles; + rClipRegion.GetRegionRectangles(aRectangles); - while ( rClipRegion.GetNextEnumRect( hRegionHandle, aRect ) ) + for(RectangleVector::const_iterator aRectIter(aRectangles.begin()); aRectIter != aRectangles.end(); aRectIter++) { - double nX1 = aRect.Left(); - double nY1 = aRect.Top(); - double nX2 = aRect.Right(); - double nY2 = aRect.Bottom(); + double nX1(aRectIter->Left()); + double nY1(aRectIter->Top()); + double nX2(aRectIter->Right()); + double nY2(aRectIter->Bottom()); + ImplWriteDouble( nX1 ); ImplWriteDouble( nY1 ); ImplWriteByte( 'm' ); @@ -1673,8 +1674,34 @@ void PSWriter::ImplSetClipRegion( Region& rClipRegion ) ImplWriteDouble( nX1 ); ImplWriteDouble( nY1 ); ImplWriteByte( 'l', PS_SPACE | PS_WRAP ); - }; - rClipRegion.EndEnumRects( hRegionHandle ); + } + + //Rectangle aRect; + //RegionHandle hRegionHandle = rClipRegion.BeginEnumRects(); + // + //while ( rClipRegion.GetEnumRects( hRegionHandle, aRect ) ) + //{ + // double nX1 = aRect.Left(); + // double nY1 = aRect.Top(); + // double nX2 = aRect.Right(); + // double nY2 = aRect.Bottom(); + // ImplWriteDouble( nX1 ); + // ImplWriteDouble( nY1 ); + // ImplWriteByte( 'm' ); + // ImplWriteDouble( nX2 ); + // ImplWriteDouble( nY1 ); + // ImplWriteByte( 'l' ); + // ImplWriteDouble( nX2 ); + // ImplWriteDouble( nY2 ); + // ImplWriteByte( 'l' ); + // ImplWriteDouble( nX1 ); + // ImplWriteDouble( nY2 ); + // ImplWriteByte( 'l' ); + // ImplWriteDouble( nX1 ); + // ImplWriteDouble( nY1 ); + // ImplWriteByte( 'l', PS_SPACE | PS_WRAP ); + //}; + //rClipRegion.EndEnumRects( hRegionHandle ); ImplWriteLine( "eoclip newpath" ); } } @@ -1723,12 +1750,18 @@ void PSWriter::ImplBmp( Bitmap* pBitmap, Bitmap* pMaskBitmap, const Point & rPoi aRect = Rectangle( Point( 0, nHeightOrg - nHeightLeft ), Size( (long)nWidth, (long)nHeight ) ); aRegion = Region( pMaskBitmap->CreateRegion( COL_BLACK, aRect ) ); - if ( ( mnLevel == 1 ) && ( aRegion.GetRectCount() * 5 > 1000 ) ) + if( mnLevel == 1 ) { - nHeight >>= 1; - if ( nHeight < 2 ) - return; - continue; + RectangleVector aRectangleVector; + aRegion.GetRegionRectangles(aRectangleVector); + + if ( aRectangleVector.size() * 5 > 1000 ) + { + nHeight >>= 1; + if ( nHeight < 2 ) + return; + continue; + } } break; } @@ -1743,26 +1776,50 @@ void PSWriter::ImplBmp( Bitmap* pBitmap, Bitmap* pMaskBitmap, const Point & rPoi ImplWriteLine( "gs\npum" ); ImplTranslate( aSourcePos.X(), aSourcePos.Y() ); ImplScale( nXWidth / nWidth, nYHeight / nHeight ); - RegionHandle hRegionHandle = aRegion.BeginEnumRects(); - while ( aRegion.GetNextEnumRect( hRegionHandle, aRect ) ) + RectangleVector aRectangles; + aRegion.GetRegionRectangles(aRectangles); + const long nMoveVertical(nHeightLeft - nHeightOrg); + + for(RectangleVector::iterator aRectIter(aRectangles.begin()); aRectIter != aRectangles.end(); aRectIter++) { - aRect.Move( 0, - ( nHeightOrg - nHeightLeft ) ); - ImplWriteLong( aRect.Left() ); - ImplWriteLong( aRect.Top() ); + aRectIter->Move(0, nMoveVertical); + + ImplWriteLong( aRectIter->Left() ); + ImplWriteLong( aRectIter->Top() ); ImplWriteByte( 'm' ); - ImplWriteLong( aRect.Right() + 1 ); - ImplWriteLong( aRect.Top() ); + ImplWriteLong( aRectIter->Right() + 1 ); + ImplWriteLong( aRectIter->Top() ); ImplWriteByte( 'l' ); - ImplWriteLong( aRect.Right() + 1 ); - ImplWriteLong( aRect.Bottom() + 1 ); + ImplWriteLong( aRectIter->Right() + 1 ); + ImplWriteLong( aRectIter->Bottom() + 1 ); ImplWriteByte( 'l' ); - ImplWriteLong( aRect.Left() ); - ImplWriteLong( aRect.Bottom() + 1 ); + ImplWriteLong( aRectIter->Left() ); + ImplWriteLong( aRectIter->Bottom() + 1 ); ImplWriteByte( 'l' ); ImplWriteByte( 'p', PS_SPACE | PS_WRAP ); - }; - aRegion.EndEnumRects( hRegionHandle ); + } + + //RegionHandle hRegionHandle = aRegion.BeginEnumRects(); + // + //while ( aRegion.GetEnumRects( hRegionHandle, aRect ) ) + //{ + // aRect.Move( 0, - ( nHeightOrg - nHeightLeft ) ); + // ImplWriteLong( aRect.Left() ); + // ImplWriteLong( aRect.Top() ); + // ImplWriteByte( 'm' ); + // ImplWriteLong( aRect.Right() + 1 ); + // ImplWriteLong( aRect.Top() ); + // ImplWriteByte( 'l' ); + // ImplWriteLong( aRect.Right() + 1 ); + // ImplWriteLong( aRect.Bottom() + 1 ); + // ImplWriteByte( 'l' ); + // ImplWriteLong( aRect.Left() ); + // ImplWriteLong( aRect.Bottom() + 1 ); + // ImplWriteByte( 'l' ); + // ImplWriteByte( 'p', PS_SPACE | PS_WRAP ); + //}; + //aRegion.EndEnumRects( hRegionHandle ); ImplWriteLine( "eoclip newpath" ); ImplWriteLine( "pom" ); } |