tdf#55058 EMF: Implement PAINTRGN record

The EMR_PAINTRGN record paints the specified region by using the brush
currently selected into the playback device context.

After implement support for PAINTRGN record, the reference image
is displayed correctly:
https://sourceforge.net/projects/libuemf/

Change-Id: I761779713d1200e6079ff798e9c3c9aaba57ad4f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113461
Tested-by: Jenkins
Reviewed-by: Bartosz Kosiorek <gang65@poczta.onet.pl>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113561
diff --git a/emfio/source/reader/emfreader.cxx b/emfio/source/reader/emfreader.cxx
index 1d1adc2..24fcf90 100644
--- a/emfio/source/reader/emfreader.cxx
+++ b/emfio/source/reader/emfreader.cxx
@@ -1924,6 +1924,18 @@ namespace emfio
                    }
                    break;

                    case EMR_PAINTRGN :
                    {
                        sal_uInt32 nRgnDataSize;
                        tools::PolyPolygon aPolyPoly;
                        mpInputStream->SeekRel( 0x10 ); // Skipping RectL bounds
                        mpInputStream->ReadUInt32( nRgnDataSize );

                        if ( ImplReadRegion( aPolyPoly, *mpInputStream, nRecSize ) )
                            DrawPolyPolygon( aPolyPoly );
                    }
                    break;

                    case EMR_CREATEDIBPATTERNBRUSHPT :
                    {
                        sal_uInt32  nStart = mpInputStream->Tell() - 8;
@@ -1977,7 +1989,6 @@ namespace emfio
                    case EMR_SETDIBITSTODEVICE :        SAL_WARN("emfio", "not implemented 'SetDIBitsToDevice'");         break;
                    case EMR_FRAMERGN :                 SAL_WARN("emfio", "not implemented 'FrameRgn'");                  break;
                    case EMR_INVERTRGN :                SAL_WARN("emfio", "not implemented 'InvertRgn'");                 break;
                    case EMR_PAINTRGN :                 SAL_WARN("emfio", "not implemented 'PaintRgn'");                  break;
                    case EMR_FLATTENPATH :              SAL_WARN("emfio", "not implemented 'FlattenPath'");               break;
                    case EMR_WIDENPATH :                SAL_WARN("emfio", "not implemented 'WidenPath'");                 break;
                    case EMR_POLYDRAW :                 SAL_WARN("emfio", "not implemented 'Polydraw'");                  break;