summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2017-01-18 09:28:06 +0000
committerCaolán McNamara <caolanm@redhat.com>2017-01-18 09:28:41 +0000
commit9a36e6c75196ebbc84d19b68f111fb59e60c85a4 (patch)
tree0648fb2b8ef30d6efd0b8a5d3f1b03ff365f42e2
parent352e036ada79bee79b0b52352cab4b05695b1abf (diff)
TODO: fix reindentation below if you can accept being blamed by the SCM
Change-Id: I853c2a12c7f49b9562d348409726c10d977a6619
-rw-r--r--vcl/source/gdi/svmconverter.cxx1375
1 files changed, 687 insertions, 688 deletions
diff --git a/vcl/source/gdi/svmconverter.cxx b/vcl/source/gdi/svmconverter.cxx
index 18f7f1759ce0..d9448f480912 100644
--- a/vcl/source/gdi/svmconverter.cxx
+++ b/vcl/source/gdi/svmconverter.cxx
@@ -503,118 +503,135 @@ void SVMConverter::ImplConvertFromSVM1( SvStream& rIStm, GDIMetaFile& rMtf )
rtl_TextEncoding eActualCharSet = osl_getThreadTextEncoding();
bool bFatLine = false;
- // TODO: fix reindentation below if you can accept being blamed by the SCM
- MapMode aMapMode;
- tools::Polygon aActionPoly;
- Rectangle aRect;
- Point aPt, aPt1;
- Size aSz;
- Color aActionColor;
- sal_Int32 nTmp, nTmp1, nActionSize;
- sal_Int32 nActions;
- sal_Int16 nType;
-
- sal_uInt32 nUnicodeCommentStreamPos = 0;
- sal_Int32 nUnicodeCommentActionNumber = 0;
-
- ImplReadMapMode( rIStm, aMapMode ); // MapMode
- rIStm.ReadInt32( nActions ); // Action count
-
- rMtf.SetPrefSize( aPrefSz );
- rMtf.SetPrefMapMode( aMapMode );
- size_t nLastPolygonAction(0);
-
- for (sal_Int32 i = 0; i < nActions; ++i)
+ MapMode aMapMode;
+ tools::Polygon aActionPoly;
+ Rectangle aRect;
+ Point aPt, aPt1;
+ Size aSz;
+ Color aActionColor;
+ sal_Int32 nTmp, nTmp1, nActionSize;
+ sal_Int32 nActions;
+ sal_Int16 nType;
+
+ sal_uInt32 nUnicodeCommentStreamPos = 0;
+ sal_Int32 nUnicodeCommentActionNumber = 0;
+
+ ImplReadMapMode( rIStm, aMapMode ); // MapMode
+ rIStm.ReadInt32( nActions ); // Action count
+
+ rMtf.SetPrefSize( aPrefSz );
+ rMtf.SetPrefMapMode( aMapMode );
+ size_t nLastPolygonAction(0);
+
+ for (sal_Int32 i = 0; i < nActions; ++i)
+ {
+ rIStm.ReadInt16( nType );
+ sal_Int32 nActBegin = rIStm.Tell();
+ rIStm.ReadInt32( nActionSize );
+
+ SAL_WARN_IF( ( nType > 33 ) && ( nType < 1024 ), "vcl.gdi", "Unknown GDIMetaAction while converting!" );
+
+ switch( nType )
{
- rIStm.ReadInt16( nType );
- sal_Int32 nActBegin = rIStm.Tell();
- rIStm.ReadInt32( nActionSize );
+ case GDI_PIXEL_ACTION:
+ {
+ ReadPair( rIStm, aPt );
+ ImplReadColor( rIStm, aActionColor );
+ rMtf.AddAction( new MetaPixelAction( aPt, aActionColor ) );
+ }
+ break;
- SAL_WARN_IF( ( nType > 33 ) && ( nType < 1024 ), "vcl.gdi", "Unknown GDIMetaAction while converting!" );
+ case GDI_POINT_ACTION:
+ {
+ ReadPair( rIStm, aPt );
+ rMtf.AddAction( new MetaPointAction( aPt ) );
+ }
+ break;
- switch( nType )
+ case GDI_LINE_ACTION:
{
- case GDI_PIXEL_ACTION:
- {
- ReadPair( rIStm, aPt );
- ImplReadColor( rIStm, aActionColor );
- rMtf.AddAction( new MetaPixelAction( aPt, aActionColor ) );
- }
- break;
+ ReadPair( rIStm, aPt );
+ ReadPair( rIStm, aPt1 );
+ rMtf.AddAction( new MetaLineAction( aPt, aPt1, aLineInfo ) );
+ }
+ break;
- case GDI_POINT_ACTION:
- {
- ReadPair( rIStm, aPt );
- rMtf.AddAction( new MetaPointAction( aPt ) );
- }
- break;
+ case GDI_LINEJOIN_ACTION :
+ {
+ sal_Int16 nLineJoin(0);
+ rIStm.ReadInt16( nLineJoin );
+ aLineInfo.SetLineJoin((basegfx::B2DLineJoin)nLineJoin);
+ }
+ break;
- case GDI_LINE_ACTION:
- {
- ReadPair( rIStm, aPt );
- ReadPair( rIStm, aPt1 );
- rMtf.AddAction( new MetaLineAction( aPt, aPt1, aLineInfo ) );
- }
- break;
+ case GDI_LINECAP_ACTION :
+ {
+ sal_Int16 nLineCap(0);
+ rIStm.ReadInt16( nLineCap );
+ aLineInfo.SetLineCap((css::drawing::LineCap)nLineCap);
+ }
+ break;
- case GDI_LINEJOIN_ACTION :
- {
- sal_Int16 nLineJoin(0);
- rIStm.ReadInt16( nLineJoin );
- aLineInfo.SetLineJoin((basegfx::B2DLineJoin)nLineJoin);
- }
- break;
+ case GDI_LINEDASHDOT_ACTION :
+ {
+ sal_Int16 a(0);
+ sal_Int32 b(0);
- case GDI_LINECAP_ACTION :
- {
- sal_Int16 nLineCap(0);
- rIStm.ReadInt16( nLineCap );
- aLineInfo.SetLineCap((css::drawing::LineCap)nLineCap);
- }
- break;
+ rIStm.ReadInt16( a ); aLineInfo.SetDashCount(a);
+ rIStm.ReadInt32( b ); aLineInfo.SetDashLen(b);
+ rIStm.ReadInt16( a ); aLineInfo.SetDotCount(a);
+ rIStm.ReadInt32( b ); aLineInfo.SetDotLen(b);
+ rIStm.ReadInt32( b ); aLineInfo.SetDistance(b);
- case GDI_LINEDASHDOT_ACTION :
+ if(((aLineInfo.GetDashCount() && aLineInfo.GetDashLen())
+ || (aLineInfo.GetDotCount() && aLineInfo.GetDotLen()))
+ && aLineInfo.GetDistance())
{
- sal_Int16 a(0);
- sal_Int32 b(0);
-
- rIStm.ReadInt16( a ); aLineInfo.SetDashCount(a);
- rIStm.ReadInt32( b ); aLineInfo.SetDashLen(b);
- rIStm.ReadInt16( a ); aLineInfo.SetDotCount(a);
- rIStm.ReadInt32( b ); aLineInfo.SetDotLen(b);
- rIStm.ReadInt32( b ); aLineInfo.SetDistance(b);
-
- if(((aLineInfo.GetDashCount() && aLineInfo.GetDashLen())
- || (aLineInfo.GetDotCount() && aLineInfo.GetDotLen()))
- && aLineInfo.GetDistance())
- {
- aLineInfo.SetStyle(LineStyle::Dash);
- }
+ aLineInfo.SetStyle(LineStyle::Dash);
}
- break;
+ }
+ break;
- case GDI_EXTENDEDPOLYGON_ACTION :
+ case GDI_EXTENDEDPOLYGON_ACTION :
+ {
+ // read the tools::PolyPolygon in every case
+ tools::PolyPolygon aInputPolyPolygon;
+ ImplReadExtendedPolyPolygonAction(rIStm, aInputPolyPolygon);
+
+ // now check if it can be set somewhere
+ if(nLastPolygonAction < rMtf.GetActionSize())
{
- // read the tools::PolyPolygon in every case
- tools::PolyPolygon aInputPolyPolygon;
- ImplReadExtendedPolyPolygonAction(rIStm, aInputPolyPolygon);
+ MetaPolyLineAction* pPolyLineAction = dynamic_cast< MetaPolyLineAction* >(rMtf.GetAction(nLastPolygonAction));
- // now check if it can be set somewhere
- if(nLastPolygonAction < rMtf.GetActionSize())
+ if(pPolyLineAction)
+ {
+ // replace MetaPolyLineAction when we have a single polygon. Do not rely on the
+ // same point count; the originally written GDI_POLYLINE_ACTION may have been
+ // Subdivided for better quality for older usages
+ if(1 == aInputPolyPolygon.Count())
+ {
+ MetaAction* pAction = rMtf.ReplaceAction(
+ new MetaPolyLineAction(
+ aInputPolyPolygon.GetObject(0),
+ pPolyLineAction->GetLineInfo()),
+ nLastPolygonAction);
+ if(pAction)
+ pAction->Delete();
+ }
+ }
+ else
{
- MetaPolyLineAction* pPolyLineAction = dynamic_cast< MetaPolyLineAction* >(rMtf.GetAction(nLastPolygonAction));
+ MetaPolyPolygonAction* pPolyPolygonAction = dynamic_cast< MetaPolyPolygonAction* >(rMtf.GetAction(nLastPolygonAction));
- if(pPolyLineAction)
+ if(pPolyPolygonAction)
{
- // replace MetaPolyLineAction when we have a single polygon. Do not rely on the
- // same point count; the originally written GDI_POLYLINE_ACTION may have been
- // Subdivided for better quality for older usages
- if(1 == aInputPolyPolygon.Count())
+ // replace MetaPolyPolygonAction when we have a curved polygon. Do rely on the
+ // same sub-polygon count
+ if(pPolyPolygonAction->GetPolyPolygon().Count() == aInputPolyPolygon.Count())
{
MetaAction* pAction = rMtf.ReplaceAction(
- new MetaPolyLineAction(
- aInputPolyPolygon.GetObject(0),
- pPolyLineAction->GetLineInfo()),
+ new MetaPolyPolygonAction(
+ aInputPolyPolygon),
nLastPolygonAction);
if(pAction)
pAction->Delete();
@@ -622,740 +639,722 @@ void SVMConverter::ImplConvertFromSVM1( SvStream& rIStm, GDIMetaFile& rMtf )
}
else
{
- MetaPolyPolygonAction* pPolyPolygonAction = dynamic_cast< MetaPolyPolygonAction* >(rMtf.GetAction(nLastPolygonAction));
+ MetaPolygonAction* pPolygonAction = dynamic_cast< MetaPolygonAction* >(rMtf.GetAction(nLastPolygonAction));
- if(pPolyPolygonAction)
+ if(pPolygonAction)
{
- // replace MetaPolyPolygonAction when we have a curved polygon. Do rely on the
- // same sub-polygon count
- if(pPolyPolygonAction->GetPolyPolygon().Count() == aInputPolyPolygon.Count())
+ // replace MetaPolygonAction
+ if(1 == aInputPolyPolygon.Count())
{
MetaAction* pAction = rMtf.ReplaceAction(
- new MetaPolyPolygonAction(
- aInputPolyPolygon),
+ new MetaPolygonAction(
+ aInputPolyPolygon.GetObject(0)),
nLastPolygonAction);
if(pAction)
pAction->Delete();
}
}
- else
- {
- MetaPolygonAction* pPolygonAction = dynamic_cast< MetaPolygonAction* >(rMtf.GetAction(nLastPolygonAction));
-
- if(pPolygonAction)
- {
- // replace MetaPolygonAction
- if(1 == aInputPolyPolygon.Count())
- {
- MetaAction* pAction = rMtf.ReplaceAction(
- new MetaPolygonAction(
- aInputPolyPolygon.GetObject(0)),
- nLastPolygonAction);
- if(pAction)
- pAction->Delete();
- }
- }
- }
}
}
}
- break;
+ }
+ break;
- case GDI_RECT_ACTION:
- {
- ImplReadRect( rIStm, aRect );
- rIStm.ReadInt32( nTmp ).ReadInt32( nTmp1 );
+ case GDI_RECT_ACTION:
+ {
+ ImplReadRect( rIStm, aRect );
+ rIStm.ReadInt32( nTmp ).ReadInt32( nTmp1 );
- if( nTmp || nTmp1 )
- rMtf.AddAction( new MetaRoundRectAction( aRect, nTmp, nTmp1 ) );
- else
- {
- rMtf.AddAction( new MetaRectAction( aRect ) );
+ if( nTmp || nTmp1 )
+ rMtf.AddAction( new MetaRoundRectAction( aRect, nTmp, nTmp1 ) );
+ else
+ {
+ rMtf.AddAction( new MetaRectAction( aRect ) );
- if( bFatLine )
- rMtf.AddAction( new MetaPolyLineAction( aRect, aLineInfo ) );
- }
+ if( bFatLine )
+ rMtf.AddAction( new MetaPolyLineAction( aRect, aLineInfo ) );
}
- break;
+ }
+ break;
- case GDI_ELLIPSE_ACTION:
- {
- ImplReadRect( rIStm, aRect );
+ case GDI_ELLIPSE_ACTION:
+ {
+ ImplReadRect( rIStm, aRect );
- if( bFatLine )
- {
- const tools::Polygon aPoly( aRect.Center(), aRect.GetWidth() >> 1, aRect.GetHeight() >> 1 );
+ if( bFatLine )
+ {
+ const tools::Polygon aPoly( aRect.Center(), aRect.GetWidth() >> 1, aRect.GetHeight() >> 1 );
- rMtf.AddAction( new MetaPushAction( PushFlags::LINECOLOR ) );
- rMtf.AddAction( new MetaLineColorAction( COL_TRANSPARENT, false ) );
- rMtf.AddAction( new MetaPolygonAction( aPoly ) );
- rMtf.AddAction( new MetaPopAction() );
- rMtf.AddAction( new MetaPolyLineAction( aPoly, aLineInfo ) );
- }
- else
- rMtf.AddAction( new MetaEllipseAction( aRect ) );
+ rMtf.AddAction( new MetaPushAction( PushFlags::LINECOLOR ) );
+ rMtf.AddAction( new MetaLineColorAction( COL_TRANSPARENT, false ) );
+ rMtf.AddAction( new MetaPolygonAction( aPoly ) );
+ rMtf.AddAction( new MetaPopAction() );
+ rMtf.AddAction( new MetaPolyLineAction( aPoly, aLineInfo ) );
}
- break;
+ else
+ rMtf.AddAction( new MetaEllipseAction( aRect ) );
+ }
+ break;
- case GDI_ARC_ACTION:
- {
- ImplReadRect( rIStm, aRect );
- ReadPair( rIStm, aPt );
- ReadPair( rIStm, aPt1 );
+ case GDI_ARC_ACTION:
+ {
+ ImplReadRect( rIStm, aRect );
+ ReadPair( rIStm, aPt );
+ ReadPair( rIStm, aPt1 );
- if( bFatLine )
- {
- const tools::Polygon aPoly( aRect, aPt, aPt1, PolyStyle::Arc );
+ if( bFatLine )
+ {
+ const tools::Polygon aPoly( aRect, aPt, aPt1, PolyStyle::Arc );
- rMtf.AddAction( new MetaPushAction( PushFlags::LINECOLOR ) );
- rMtf.AddAction( new MetaLineColorAction( COL_TRANSPARENT, false ) );
- rMtf.AddAction( new MetaPolygonAction( aPoly ) );
- rMtf.AddAction( new MetaPopAction() );
- rMtf.AddAction( new MetaPolyLineAction( aPoly, aLineInfo ) );
- }
- else
- rMtf.AddAction( new MetaArcAction( aRect, aPt, aPt1 ) );
+ rMtf.AddAction( new MetaPushAction( PushFlags::LINECOLOR ) );
+ rMtf.AddAction( new MetaLineColorAction( COL_TRANSPARENT, false ) );
+ rMtf.AddAction( new MetaPolygonAction( aPoly ) );
+ rMtf.AddAction( new MetaPopAction() );
+ rMtf.AddAction( new MetaPolyLineAction( aPoly, aLineInfo ) );
}
- break;
+ else
+ rMtf.AddAction( new MetaArcAction( aRect, aPt, aPt1 ) );
+ }
+ break;
- case GDI_PIE_ACTION:
- {
- ImplReadRect( rIStm, aRect );
- ReadPair( rIStm, aPt );
- ReadPair( rIStm, aPt1 );
+ case GDI_PIE_ACTION:
+ {
+ ImplReadRect( rIStm, aRect );
+ ReadPair( rIStm, aPt );
+ ReadPair( rIStm, aPt1 );
- if( bFatLine )
- {
- const tools::Polygon aPoly( aRect, aPt, aPt1, PolyStyle::Pie );
+ if( bFatLine )
+ {
+ const tools::Polygon aPoly( aRect, aPt, aPt1, PolyStyle::Pie );
- rMtf.AddAction( new MetaPushAction( PushFlags::LINECOLOR ) );
- rMtf.AddAction( new MetaLineColorAction( COL_TRANSPARENT, false ) );
- rMtf.AddAction( new MetaPolygonAction( aPoly ) );
- rMtf.AddAction( new MetaPopAction() );
- rMtf.AddAction( new MetaPolyLineAction( aPoly, aLineInfo ) );
- }
- else
- rMtf.AddAction( new MetaPieAction( aRect, aPt, aPt1 ) );
+ rMtf.AddAction( new MetaPushAction( PushFlags::LINECOLOR ) );
+ rMtf.AddAction( new MetaLineColorAction( COL_TRANSPARENT, false ) );
+ rMtf.AddAction( new MetaPolygonAction( aPoly ) );
+ rMtf.AddAction( new MetaPopAction() );
+ rMtf.AddAction( new MetaPolyLineAction( aPoly, aLineInfo ) );
}
- break;
+ else
+ rMtf.AddAction( new MetaPieAction( aRect, aPt, aPt1 ) );
+ }
+ break;
+
+ case GDI_INVERTRECT_ACTION:
+ case GDI_HIGHLIGHTRECT_ACTION:
+ {
+ ImplReadRect( rIStm, aRect );
+ rMtf.AddAction( new MetaPushAction( PushFlags::RASTEROP ) );
+ rMtf.AddAction( new MetaRasterOpAction( RasterOp::Invert ) );
+ rMtf.AddAction( new MetaRectAction( aRect ) );
+ rMtf.AddAction( new MetaPopAction() );
+ }
+ break;
- case GDI_INVERTRECT_ACTION:
- case GDI_HIGHLIGHTRECT_ACTION:
+ case GDI_POLYLINE_ACTION:
+ {
+ ImplReadPoly( rIStm, aActionPoly );
+ nLastPolygonAction = rMtf.GetActionSize();
+
+ if( bFatLine )
+ rMtf.AddAction( new MetaPolyLineAction( aActionPoly, aLineInfo ) );
+ else
+ rMtf.AddAction( new MetaPolyLineAction( aActionPoly ) );
+ }
+ break;
+
+ case GDI_POLYGON_ACTION:
+ {
+ ImplReadPoly( rIStm, aActionPoly );
+
+ if( bFatLine )
{
- ImplReadRect( rIStm, aRect );
- rMtf.AddAction( new MetaPushAction( PushFlags::RASTEROP ) );
- rMtf.AddAction( new MetaRasterOpAction( RasterOp::Invert ) );
- rMtf.AddAction( new MetaRectAction( aRect ) );
+ rMtf.AddAction( new MetaPushAction( PushFlags::LINECOLOR ) );
+ rMtf.AddAction( new MetaLineColorAction( COL_TRANSPARENT, false ) );
+ rMtf.AddAction( new MetaPolygonAction( aActionPoly ) );
rMtf.AddAction( new MetaPopAction() );
+ rMtf.AddAction( new MetaPolyLineAction( aActionPoly, aLineInfo ) );
}
- break;
-
- case GDI_POLYLINE_ACTION:
+ else
{
- ImplReadPoly( rIStm, aActionPoly );
nLastPolygonAction = rMtf.GetActionSize();
-
- if( bFatLine )
- rMtf.AddAction( new MetaPolyLineAction( aActionPoly, aLineInfo ) );
- else
- rMtf.AddAction( new MetaPolyLineAction( aActionPoly ) );
+ rMtf.AddAction( new MetaPolygonAction( aActionPoly ) );
}
- break;
+ }
+ break;
- case GDI_POLYGON_ACTION:
- {
- ImplReadPoly( rIStm, aActionPoly );
+ case GDI_POLYPOLYGON_ACTION:
+ {
+ tools::PolyPolygon aPolyPoly;
- if( bFatLine )
- {
- rMtf.AddAction( new MetaPushAction( PushFlags::LINECOLOR ) );
- rMtf.AddAction( new MetaLineColorAction( COL_TRANSPARENT, false ) );
- rMtf.AddAction( new MetaPolygonAction( aActionPoly ) );
- rMtf.AddAction( new MetaPopAction() );
- rMtf.AddAction( new MetaPolyLineAction( aActionPoly, aLineInfo ) );
- }
- else
- {
- nLastPolygonAction = rMtf.GetActionSize();
- rMtf.AddAction( new MetaPolygonAction( aActionPoly ) );
- }
- }
- break;
+ ImplReadPolyPoly( rIStm, aPolyPoly );
- case GDI_POLYPOLYGON_ACTION:
+ if( bFatLine )
{
- tools::PolyPolygon aPolyPoly;
-
- ImplReadPolyPoly( rIStm, aPolyPoly );
-
- if( bFatLine )
- {
- rMtf.AddAction( new MetaPushAction( PushFlags::LINECOLOR ) );
- rMtf.AddAction( new MetaLineColorAction( COL_TRANSPARENT, false ) );
- rMtf.AddAction( new MetaPolyPolygonAction( aPolyPoly ) );
- rMtf.AddAction( new MetaPopAction() );
+ rMtf.AddAction( new MetaPushAction( PushFlags::LINECOLOR ) );
+ rMtf.AddAction( new MetaLineColorAction( COL_TRANSPARENT, false ) );
+ rMtf.AddAction( new MetaPolyPolygonAction( aPolyPoly ) );
+ rMtf.AddAction( new MetaPopAction() );
- for( sal_uInt16 nPoly = 0, nCount = aPolyPoly.Count(); nPoly < nCount; nPoly++ )
- rMtf.AddAction( new MetaPolyLineAction( aPolyPoly[ nPoly ], aLineInfo ) );
- }
- else
- {
- nLastPolygonAction = rMtf.GetActionSize();
- rMtf.AddAction( new MetaPolyPolygonAction( aPolyPoly ) );
- }
+ for( sal_uInt16 nPoly = 0, nCount = aPolyPoly.Count(); nPoly < nCount; nPoly++ )
+ rMtf.AddAction( new MetaPolyLineAction( aPolyPoly[ nPoly ], aLineInfo ) );
}
- break;
-
- case GDI_FONT_ACTION:
+ else
{
- vcl::Font aFont;
- char aName[ 32 ];
- sal_Int32 nWidth, nHeight;
- sal_Int16 nCharSet, nFamily, nPitch, nAlign, nWeight, nUnderline, nStrikeout;
- sal_Int16 nCharOrient, nLineOrient;
- bool bItalic, bOutline, bShadow, bTransparent;
-
- ImplReadColor( rIStm, aActionColor ); aFont.SetColor( aActionColor );
- ImplReadColor( rIStm, aActionColor ); aFont.SetFillColor( aActionColor );
- rIStm.ReadBytes( aName, 32 );
- aFont.SetFamilyName( OUString( aName, strlen(aName), rIStm.GetStreamCharSet() ) );
- rIStm.ReadInt32( nWidth ).ReadInt32( nHeight );
- rIStm.ReadInt16( nCharOrient ).ReadInt16( nLineOrient );
- rIStm.ReadInt16( nCharSet ).ReadInt16( nFamily ).ReadInt16( nPitch ).ReadInt16( nAlign ).ReadInt16( nWeight ).ReadInt16( nUnderline ).ReadInt16( nStrikeout );
- rIStm.ReadCharAsBool( bItalic ).ReadCharAsBool( bOutline ).ReadCharAsBool( bShadow ).ReadCharAsBool( bTransparent );
-
- aFont.SetFontSize( Size( nWidth, nHeight ) );
- aFont.SetCharSet( (rtl_TextEncoding) nCharSet );
- aFont.SetFamily( (FontFamily) nFamily );
- aFont.SetPitch( (FontPitch) nPitch );
- aFont.SetAlignment( (FontAlign) nAlign );
- aFont.SetWeight( ( nWeight == 1 ) ? WEIGHT_LIGHT : ( nWeight == 2 ) ? WEIGHT_NORMAL :
- ( nWeight == 3 ) ? WEIGHT_BOLD : WEIGHT_DONTKNOW );
- aFont.SetUnderline( (FontLineStyle) nUnderline );
- aFont.SetStrikeout( (FontStrikeout) nStrikeout );
- aFont.SetItalic( bItalic ? ITALIC_NORMAL : ITALIC_NONE );
- aFont.SetOutline( bOutline );
- aFont.SetShadow( bShadow );
- aFont.SetOrientation( nLineOrient );
- aFont.SetTransparent( bTransparent );
-
- eActualCharSet = aFont.GetCharSet();
- if ( eActualCharSet == RTL_TEXTENCODING_DONTKNOW )
- eActualCharSet = osl_getThreadTextEncoding();
-
- rMtf.AddAction( new MetaFontAction( aFont ) );
- rMtf.AddAction( new MetaTextAlignAction( aFont.GetAlignment() ) );
- rMtf.AddAction( new MetaTextColorAction( aFont.GetColor() ) );
- rMtf.AddAction( new MetaTextFillColorAction( aFont.GetFillColor(), !aFont.IsTransparent() ) );
-
- // #106172# Track font relevant data in shadow VDev
- aFontVDev->SetFont( aFont );
+ nLastPolygonAction = rMtf.GetActionSize();
+ rMtf.AddAction( new MetaPolyPolygonAction( aPolyPoly ) );
}
- break;
+ }
+ break;
+
+ case GDI_FONT_ACTION:
+ {
+ vcl::Font aFont;
+ char aName[ 32 ];
+ sal_Int32 nWidth, nHeight;
+ sal_Int16 nCharSet, nFamily, nPitch, nAlign, nWeight, nUnderline, nStrikeout;
+ sal_Int16 nCharOrient, nLineOrient;
+ bool bItalic, bOutline, bShadow, bTransparent;
+
+ ImplReadColor( rIStm, aActionColor ); aFont.SetColor( aActionColor );
+ ImplReadColor( rIStm, aActionColor ); aFont.SetFillColor( aActionColor );
+ rIStm.ReadBytes( aName, 32 );
+ aFont.SetFamilyName( OUString( aName, strlen(aName), rIStm.GetStreamCharSet() ) );
+ rIStm.ReadInt32( nWidth ).ReadInt32( nHeight );
+ rIStm.ReadInt16( nCharOrient ).ReadInt16( nLineOrient );
+ rIStm.ReadInt16( nCharSet ).ReadInt16( nFamily ).ReadInt16( nPitch ).ReadInt16( nAlign ).ReadInt16( nWeight ).ReadInt16( nUnderline ).ReadInt16( nStrikeout );
+ rIStm.ReadCharAsBool( bItalic ).ReadCharAsBool( bOutline ).ReadCharAsBool( bShadow ).ReadCharAsBool( bTransparent );
+
+ aFont.SetFontSize( Size( nWidth, nHeight ) );
+ aFont.SetCharSet( (rtl_TextEncoding) nCharSet );
+ aFont.SetFamily( (FontFamily) nFamily );
+ aFont.SetPitch( (FontPitch) nPitch );
+ aFont.SetAlignment( (FontAlign) nAlign );
+ aFont.SetWeight( ( nWeight == 1 ) ? WEIGHT_LIGHT : ( nWeight == 2 ) ? WEIGHT_NORMAL :
+ ( nWeight == 3 ) ? WEIGHT_BOLD : WEIGHT_DONTKNOW );
+ aFont.SetUnderline( (FontLineStyle) nUnderline );
+ aFont.SetStrikeout( (FontStrikeout) nStrikeout );
+ aFont.SetItalic( bItalic ? ITALIC_NORMAL : ITALIC_NONE );
+ aFont.SetOutline( bOutline );
+ aFont.SetShadow( bShadow );
+ aFont.SetOrientation( nLineOrient );
+ aFont.SetTransparent( bTransparent );
+
+ eActualCharSet = aFont.GetCharSet();
+ if ( eActualCharSet == RTL_TEXTENCODING_DONTKNOW )
+ eActualCharSet = osl_getThreadTextEncoding();
+
+ rMtf.AddAction( new MetaFontAction( aFont ) );
+ rMtf.AddAction( new MetaTextAlignAction( aFont.GetAlignment() ) );
+ rMtf.AddAction( new MetaTextColorAction( aFont.GetColor() ) );
+ rMtf.AddAction( new MetaTextFillColorAction( aFont.GetFillColor(), !aFont.IsTransparent() ) );
+
+ // #106172# Track font relevant data in shadow VDev
+ aFontVDev->SetFont( aFont );
+ }
+ break;
- case GDI_TEXT_ACTION:
+ case GDI_TEXT_ACTION:
+ {
+ sal_Int32 nIndex, nLen;
+
+ ReadPair( rIStm, aPt ).ReadInt32( nIndex ).ReadInt32( nLen ).ReadInt32( nTmp );
+ if (nTmp > 0)
{
- sal_Int32 nIndex, nLen;
+ OString aByteStr = read_uInt8s_ToOString(rIStm, nTmp);
+ sal_uInt8 nTerminator = 0;
+ rIStm.ReadUChar( nTerminator );
+ SAL_WARN_IF( nTerminator != 0, "vcl.gdi", "expected string to be NULL terminated" );
- ReadPair( rIStm, aPt ).ReadInt32( nIndex ).ReadInt32( nLen ).ReadInt32( nTmp );
- if (nTmp > 0)
- {
- OString aByteStr = read_uInt8s_ToOString(rIStm, nTmp);
- sal_uInt8 nTerminator = 0;
- rIStm.ReadUChar( nTerminator );
- SAL_WARN_IF( nTerminator != 0, "vcl.gdi", "expected string to be NULL terminated" );
-
- OUString aStr(OStringToOUString(aByteStr, eActualCharSet));
- if ( nUnicodeCommentActionNumber == i )
- ImplReadUnicodeComment( nUnicodeCommentStreamPos, rIStm, aStr );
- rMtf.AddAction( new MetaTextAction( aPt, aStr, nIndex, nLen ) );
- }
- rIStm.Seek( nActBegin + nActionSize );
+ OUString aStr(OStringToOUString(aByteStr, eActualCharSet));
+ if ( nUnicodeCommentActionNumber == i )
+ ImplReadUnicodeComment( nUnicodeCommentStreamPos, rIStm, aStr );
+ rMtf.AddAction( new MetaTextAction( aPt, aStr, nIndex, nLen ) );
}
- break;
+ rIStm.Seek( nActBegin + nActionSize );
+ }
+ break;
- case GDI_TEXTARRAY_ACTION:
- {
- sal_Int32 nIndex, nLen, nAryLen;
+ case GDI_TEXTARRAY_ACTION:
+ {
+ sal_Int32 nIndex, nLen, nAryLen;
- ReadPair( rIStm, aPt ).ReadInt32( nIndex ).ReadInt32( nLen ).ReadInt32( nTmp ).ReadInt32( nAryLen );
- if (nTmp > 0)
- {
- OString aByteStr = read_uInt8s_ToOString(rIStm, nTmp);
- sal_uInt8 nTerminator = 0;
- rIStm.ReadUChar( nTerminator );
- SAL_WARN_IF( nTerminator != 0, "vcl.gdi", "expected string to be NULL terminated" );
+ ReadPair( rIStm, aPt ).ReadInt32( nIndex ).ReadInt32( nLen ).ReadInt32( nTmp ).ReadInt32( nAryLen );
+ if (nTmp > 0)
+ {
+ OString aByteStr = read_uInt8s_ToOString(rIStm, nTmp);
+ sal_uInt8 nTerminator = 0;
+ rIStm.ReadUChar( nTerminator );
+ SAL_WARN_IF( nTerminator != 0, "vcl.gdi", "expected string to be NULL terminated" );
- OUString aStr(OStringToOUString(aByteStr, eActualCharSet));
+ OUString aStr(OStringToOUString(aByteStr, eActualCharSet));
- std::unique_ptr<long[]> pDXAry;
- if (nAryLen > 0)
- {
- sal_Int32 nStrLen( aStr.getLength() );
+ std::unique_ptr<long[]> pDXAry;
+ if (nAryLen > 0)
+ {
+ sal_Int32 nStrLen( aStr.getLength() );
- pDXAry.reset(new long[ std::max( nAryLen, nStrLen ) ]);
+ pDXAry.reset(new long[ std::max( nAryLen, nStrLen ) ]);
- for (sal_Int32 j = 0; j < nAryLen; ++j)
- rIStm.ReadInt32( nTmp ), pDXAry[ j ] = nTmp;
+ for (sal_Int32 j = 0; j < nAryLen; ++j)
+ rIStm.ReadInt32( nTmp ), pDXAry[ j ] = nTmp;
- // #106172# Add last DX array elem, if missing
- if( nAryLen != nStrLen )
+ // #106172# Add last DX array elem, if missing
+ if( nAryLen != nStrLen )
+ {
+ if( nAryLen+1 == nStrLen )
{
- if( nAryLen+1 == nStrLen )
- {
- std::unique_ptr<long[]> pTmpAry(new long[nStrLen]);
-
- aFontVDev->GetTextArray( aStr, pTmpAry.get(), nIndex, nLen );
-
- // now, the difference between the
- // last and the second last DX array
- // is the advancement for the last
- // glyph. Thus, to complete our meta
- // action's DX array, just add that
- // difference to last elem and store
- // in very last.
- if( nStrLen > 1 )
- pDXAry[ nStrLen-1 ] = pDXAry[ nStrLen-2 ] + pTmpAry[ nStrLen-1 ] - pTmpAry[ nStrLen-2 ];
- else
- pDXAry[ nStrLen-1 ] = pTmpAry[ nStrLen-1 ]; // len=1: 0th position taken to be 0
- }
- #ifdef DBG_UTIL
+ std::unique_ptr<long[]> pTmpAry(new long[nStrLen]);
+
+ aFontVDev->GetTextArray( aStr, pTmpAry.get(), nIndex, nLen );
+
+ // now, the difference between the
+ // last and the second last DX array
+ // is the advancement for the last
+ // glyph. Thus, to complete our meta
+ // action's DX array, just add that
+ // difference to last elem and store
+ // in very last.
+ if( nStrLen > 1 )
+ pDXAry[ nStrLen-1 ] = pDXAry[ nStrLen-2 ] + pTmpAry[ nStrLen-1 ] - pTmpAry[ nStrLen-2 ];
else
- OSL_FAIL("More than one DX array element missing on SVM import");
- #endif
+ pDXAry[ nStrLen-1 ] = pTmpAry[ nStrLen-1 ]; // len=1: 0th position taken to be 0
}
+#ifdef DBG_UTIL
+ else
+ OSL_FAIL("More than one DX array element missing on SVM import");
+#endif
}
- if ( nUnicodeCommentActionNumber == i )
- ImplReadUnicodeComment( nUnicodeCommentStreamPos, rIStm, aStr );
- rMtf.AddAction( new MetaTextArrayAction( aPt, aStr, pDXAry.get(), nIndex, nLen ) );
}
- rIStm.Seek( nActBegin + nActionSize );
+ if ( nUnicodeCommentActionNumber == i )
+ ImplReadUnicodeComment( nUnicodeCommentStreamPos, rIStm, aStr );
+ rMtf.AddAction( new MetaTextArrayAction( aPt, aStr, pDXAry.get(), nIndex, nLen ) );
}
- break;
+ rIStm.Seek( nActBegin + nActionSize );
+ }
+ break;
+
+ case GDI_STRETCHTEXT_ACTION:
+ {
+ sal_Int32 nIndex, nLen, nWidth;
- case GDI_STRETCHTEXT_ACTION:
+ ReadPair( rIStm, aPt ).ReadInt32( nIndex ).ReadInt32( nLen ).ReadInt32( nTmp ).ReadInt32( nWidth );
+ if (nTmp > 0)
{
- sal_Int32 nIndex, nLen, nWidth;
+ OString aByteStr = read_uInt8s_ToOString(rIStm, nTmp);
+ sal_uInt8 nTerminator = 0;
+ rIStm.ReadUChar( nTerminator );
+ SAL_WARN_IF( nTerminator != 0, "vcl.gdi", "expected string to be NULL terminated" );
- ReadPair( rIStm, aPt ).ReadInt32( nIndex ).ReadInt32( nLen ).ReadInt32( nTmp ).ReadInt32( nWidth );
- if (nTmp > 0)
- {
- OString aByteStr = read_uInt8s_ToOString(rIStm, nTmp);
- sal_uInt8 nTerminator = 0;
- rIStm.ReadUChar( nTerminator );
- SAL_WARN_IF( nTerminator != 0, "vcl.gdi", "expected string to be NULL terminated" );
-
- OUString aStr(OStringToOUString(aByteStr, eActualCharSet));
- if ( nUnicodeCommentActionNumber == i )
- ImplReadUnicodeComment( nUnicodeCommentStreamPos, rIStm, aStr );
- rMtf.AddAction( new MetaStretchTextAction( aPt, nWidth, aStr, nIndex, nLen ) );
- }
- rIStm.Seek( nActBegin + nActionSize );
+ OUString aStr(OStringToOUString(aByteStr, eActualCharSet));
+ if ( nUnicodeCommentActionNumber == i )
+ ImplReadUnicodeComment( nUnicodeCommentStreamPos, rIStm, aStr );
+ rMtf.AddAction( new MetaStretchTextAction( aPt, nWidth, aStr, nIndex, nLen ) );
}
- break;
+ rIStm.Seek( nActBegin + nActionSize );
+ }
+ break;
- case GDI_BITMAP_ACTION:
- {
- Bitmap aBmp;
+ case GDI_BITMAP_ACTION:
+ {
+ Bitmap aBmp;
- ReadPair( rIStm, aPt );
- ReadDIB(aBmp, rIStm, true);
- rMtf.AddAction( new MetaBmpAction( aPt, aBmp ) );
- }
- break;
+ ReadPair( rIStm, aPt );
+ ReadDIB(aBmp, rIStm, true);
+ rMtf.AddAction( new MetaBmpAction( aPt, aBmp ) );
+ }
+ break;
- case GDI_BITMAPSCALE_ACTION:
- {
- Bitmap aBmp;
+ case GDI_BITMAPSCALE_ACTION:
+ {
+ Bitmap aBmp;
- ReadPair( rIStm, aPt );
- ReadPair( rIStm, aSz );
- ReadDIB(aBmp, rIStm, true);
- rMtf.AddAction( new MetaBmpScaleAction( aPt, aSz, aBmp ) );
- }
- break;
+ ReadPair( rIStm, aPt );
+ ReadPair( rIStm, aSz );
+ ReadDIB(aBmp, rIStm, true);
+ rMtf.AddAction( new MetaBmpScaleAction( aPt, aSz, aBmp ) );
+ }
+ break;
- case GDI_BITMAPSCALEPART_ACTION:
- {
- Bitmap aBmp;
- Size aSz2;
-
- ReadPair( rIStm, aPt );
- ReadPair( rIStm, aSz );
- ReadPair( rIStm, aPt1 );
- ReadPair( rIStm, aSz2 );
- ReadDIB(aBmp, rIStm, true);
- rMtf.AddAction( new MetaBmpScalePartAction( aPt, aSz, aPt1, aSz2, aBmp ) );
- }
- break;
+ case GDI_BITMAPSCALEPART_ACTION:
+ {
+ Bitmap aBmp;
+ Size aSz2;
+
+ ReadPair( rIStm, aPt );
+ ReadPair( rIStm, aSz );
+ ReadPair( rIStm, aPt1 );
+ ReadPair( rIStm, aSz2 );
+ ReadDIB(aBmp, rIStm, true);
+ rMtf.AddAction( new MetaBmpScalePartAction( aPt, aSz, aPt1, aSz2, aBmp ) );
+ }
+ break;
- case GDI_PEN_ACTION:
- {
- sal_Int32 nPenWidth;
- sal_Int16 nPenStyle;
+ case GDI_PEN_ACTION:
+ {
+ sal_Int32 nPenWidth;
+ sal_Int16 nPenStyle;
- ImplReadColor( rIStm, aActionColor );
- rIStm.ReadInt32( nPenWidth ).ReadInt16( nPenStyle );
+ ImplReadColor( rIStm, aActionColor );
+ rIStm.ReadInt32( nPenWidth ).ReadInt16( nPenStyle );
- aLineInfo.SetStyle( nPenStyle ? LineStyle::Solid : LineStyle::NONE );
- aLineInfo.SetWidth( nPenWidth );
- bFatLine = nPenStyle && !aLineInfo.IsDefault();
+ aLineInfo.SetStyle( nPenStyle ? LineStyle::Solid : LineStyle::NONE );
+ aLineInfo.SetWidth( nPenWidth );
+ bFatLine = nPenStyle && !aLineInfo.IsDefault();
- rMtf.AddAction( new MetaLineColorAction( aActionColor, nPenStyle != 0 ) );
- }
- break;
+ rMtf.AddAction( new MetaLineColorAction( aActionColor, nPenStyle != 0 ) );
+ }
+ break;
- case GDI_FILLBRUSH_ACTION:
- {
- sal_Int16 nBrushStyle;
+ case GDI_FILLBRUSH_ACTION:
+ {
+ sal_Int16 nBrushStyle;
- ImplReadColor( rIStm, aActionColor );
- rIStm.SeekRel( 6 );
- rIStm.ReadInt16( nBrushStyle );
- rMtf.AddAction( new MetaFillColorAction( aActionColor, nBrushStyle != 0 ) );
- rIStm.SeekRel( 2 );
- }
- break;
+ ImplReadColor( rIStm, aActionColor );
+ rIStm.SeekRel( 6 );
+ rIStm.ReadInt16( nBrushStyle );
+ rMtf.AddAction( new MetaFillColorAction( aActionColor, nBrushStyle != 0 ) );
+ rIStm.SeekRel( 2 );
+ }
+ break;
- case GDI_MAPMODE_ACTION:
- {
- ImplReadMapMode( rIStm, aMapMode );
- rMtf.AddAction( new MetaMapModeAction( aMapMode ) );
+ case GDI_MAPMODE_ACTION:
+ {
+ ImplReadMapMode( rIStm, aMapMode );
+ rMtf.AddAction( new MetaMapModeAction( aMapMode ) );
- // #106172# Track font relevant data in shadow VDev
- aFontVDev->SetMapMode( aMapMode );
- }
- break;
+ // #106172# Track font relevant data in shadow VDev
+ aFontVDev->SetMapMode( aMapMode );
+ }
+ break;
- case GDI_CLIPREGION_ACTION:
+ case GDI_CLIPREGION_ACTION:
+ {
+ vcl::Region aRegion;
+ sal_Int16 nRegType;
+ sal_Int16 bIntersect;
+ bool bClip = false;
+
+ rIStm.ReadInt16( nRegType ).ReadInt16( bIntersect );
+ ImplReadRect( rIStm, aRect );
+
+ switch( nRegType )
{
- vcl::Region aRegion;
- sal_Int16 nRegType;
- sal_Int16 bIntersect;
- bool bClip = false;
+ case 0:
+ break;
+
+ case 1:
+ {
+ Rectangle aRegRect;
- rIStm.ReadInt16( nRegType ).ReadInt16( bIntersect );
- ImplReadRect( rIStm, aRect );
+ ImplReadRect( rIStm, aRegRect );
+ aRegion = vcl::Region( aRegRect );
+ bClip = true;
+ }
+ break;
- switch( nRegType )
+ case 2:
{
- case 0:
- break;
+ ImplReadPoly( rIStm, aActionPoly );
+ aRegion = vcl::Region( aActionPoly );
+ bClip = true;
+ }
+ break;
- case 1:
- {
- Rectangle aRegRect;
+ case 3:
+ {
+ tools::PolyPolygon aPolyPoly;
+ sal_Int32 nPolyCount;
- ImplReadRect( rIStm, aRegRect );
- aRegion = vcl::Region( aRegRect );
- bClip = true;
- }
- break;
+ rIStm.ReadInt32( nPolyCount );
- case 2:
+ for( sal_uInt16 j = 0; j < (sal_uInt16) nPolyCount; j++ )
{
ImplReadPoly( rIStm, aActionPoly );
- aRegion = vcl::Region( aActionPoly );
- bClip = true;
+ aPolyPoly.Insert( aActionPoly );
}
- break;
- case 3:
- {
- tools::PolyPolygon aPolyPoly;
- sal_Int32 nPolyCount;
-
- rIStm.ReadInt32( nPolyCount );
-
- for( sal_uInt16 j = 0; j < (sal_uInt16) nPolyCount; j++ )
- {
- ImplReadPoly( rIStm, aActionPoly );
- aPolyPoly.Insert( aActionPoly );
- }
-
- aRegion = vcl::Region( aPolyPoly );
- bClip = true;
- }
- break;
+ aRegion = vcl::Region( aPolyPoly );
+ bClip = true;
}
-
- if( bIntersect )
- aRegion.Intersect( aRect );
-
- rMtf.AddAction( new MetaClipRegionAction( aRegion, bClip ) );
+ break;
}
- break;
- case GDI_MOVECLIPREGION_ACTION:
- {
- rIStm.ReadInt32( nTmp ).ReadInt32( nTmp1 );
- rMtf.AddAction( new MetaMoveClipRegionAction( nTmp, nTmp1 ) );
- }
- break;
+ if( bIntersect )
+ aRegion.Intersect( aRect );
- case GDI_ISECTCLIPREGION_ACTION:
- {
- ImplReadRect( rIStm, aRect );
- rMtf.AddAction( new MetaISectRectClipRegionAction( aRect ) );
- }
- break;
+ rMtf.AddAction( new MetaClipRegionAction( aRegion, bClip ) );
+ }
+ break;
- case GDI_RASTEROP_ACTION:
- {
- RasterOp eRasterOp;
- sal_Int16 nRasterOp;
+ case GDI_MOVECLIPREGION_ACTION:
+ {
+ rIStm.ReadInt32( nTmp ).ReadInt32( nTmp1 );
+ rMtf.AddAction( new MetaMoveClipRegionAction( nTmp, nTmp1 ) );
+ }
+ break;
- rIStm.ReadInt16( nRasterOp );
+ case GDI_ISECTCLIPREGION_ACTION:
+ {
+ ImplReadRect( rIStm, aRect );
+ rMtf.AddAction( new MetaISectRectClipRegionAction( aRect ) );
+ }
+ break;
- switch( nRasterOp )
- {
- case 1:
- eRasterOp = RasterOp::Invert;
- break;
-
- case 4:
- case 5:
- eRasterOp = RasterOp::Xor;
- break;
-
- default:
- eRasterOp = RasterOp::OverPaint;
- break;
- }
+ case GDI_RASTEROP_ACTION:
+ {
+ RasterOp eRasterOp;
+ sal_Int16 nRasterOp;
- rMtf.AddAction( new MetaRasterOpAction( eRasterOp ) );
- }
- break;
+ rIStm.ReadInt16( nRasterOp );
- case GDI_PUSH_ACTION:
+ switch( nRasterOp )
{
- aLIStack.push( new LineInfo( aLineInfo ) );
- rMtf.AddAction( new MetaPushAction( PushFlags::ALL ) );
+ case 1:
+ eRasterOp = RasterOp::Invert;
+ break;
+
+ case 4:
+ case 5:
+ eRasterOp = RasterOp::Xor;
+ break;
- // #106172# Track font relevant data in shadow VDev
- aFontVDev->Push();
+ default:
+ eRasterOp = RasterOp::OverPaint;
+ break;
}
- break;
- case GDI_POP_ACTION:
- {
+ rMtf.AddAction( new MetaRasterOpAction( eRasterOp ) );
+ }
+ break;
- LineInfo* pLineInfo;
- if (aLIStack.empty())
- pLineInfo = nullptr;
- else
- {
- pLineInfo = aLIStack.top();
- aLIStack.pop();
- }
+ case GDI_PUSH_ACTION:
+ {
+ aLIStack.push( new LineInfo( aLineInfo ) );
+ rMtf.AddAction( new MetaPushAction( PushFlags::ALL ) );
- // restore line info
- if( pLineInfo )
- {
- aLineInfo = *pLineInfo;
- delete pLineInfo;
- bFatLine = ( LineStyle::NONE != aLineInfo.GetStyle() ) && !aLineInfo.IsDefault();
- }
+ // #106172# Track font relevant data in shadow VDev
+ aFontVDev->Push();
+ }
+ break;
- rMtf.AddAction( new MetaPopAction() );
+ case GDI_POP_ACTION:
+ {
- // #106172# Track font relevant data in shadow VDev
- aFontVDev->Pop();
+ LineInfo* pLineInfo;
+ if (aLIStack.empty())
+ pLineInfo = nullptr;
+ else
+ {
+ pLineInfo = aLIStack.top();
+ aLIStack.pop();
}
- break;
- case GDI_GRADIENT_ACTION:
+ // restore line info
+ if( pLineInfo )
{
- Color aStartCol;
- Color aEndCol;
- sal_Int16 nStyle;
- sal_Int16 nAngle;
- sal_Int16 nBorder;
- sal_Int16 nOfsX;
- sal_Int16 nOfsY;
- sal_Int16 nIntensityStart;
- sal_Int16 nIntensityEnd;
-
- ImplReadRect( rIStm, aRect );
- rIStm.ReadInt16( nStyle );
- ImplReadColor( rIStm, aStartCol );
- ImplReadColor( rIStm, aEndCol );
- rIStm.ReadInt16( nAngle ).ReadInt16( nBorder ).ReadInt16( nOfsX ).ReadInt16( nOfsY ).ReadInt16( nIntensityStart ).ReadInt16( nIntensityEnd );
-
- Gradient aGrad( (GradientStyle) nStyle, aStartCol, aEndCol );
-
- aGrad.SetAngle( nAngle );
- aGrad.SetBorder( nBorder );
- aGrad.SetOfsX( nOfsX );
- aGrad.SetOfsY( nOfsY );
- aGrad.SetStartIntensity( nIntensityStart );
- aGrad.SetEndIntensity( nIntensityEnd );
- rMtf.AddAction( new MetaGradientAction( aRect, aGrad ) );
+ aLineInfo = *pLineInfo;
+ delete pLineInfo;
+ bFatLine = ( LineStyle::NONE != aLineInfo.GetStyle() ) && !aLineInfo.IsDefault();
}
- break;
- case GDI_TRANSPARENT_COMMENT:
- {
- tools::PolyPolygon aPolyPoly;
- sal_Int32 nFollowingActionCount;
- sal_Int16 nTrans;
+ rMtf.AddAction( new MetaPopAction() );
- ReadPolyPolygon( rIStm, aPolyPoly );
- rIStm.ReadInt16( nTrans ).ReadInt32( nFollowingActionCount );
- ImplSkipActions( rIStm, nFollowingActionCount );
- rMtf.AddAction( new MetaTransparentAction( aPolyPoly, nTrans ) );
+ // #106172# Track font relevant data in shadow VDev
+ aFontVDev->Pop();
+ }
+ break;
- i += nFollowingActionCount;
- }
- break;
+ case GDI_GRADIENT_ACTION:
+ {
+ Color aStartCol;
+ Color aEndCol;
+ sal_Int16 nStyle;
+ sal_Int16 nAngle;
+ sal_Int16 nBorder;
+ sal_Int16 nOfsX;
+ sal_Int16 nOfsY;
+ sal_Int16 nIntensityStart;
+ sal_Int16 nIntensityEnd;
+
+ ImplReadRect( rIStm, aRect );
+ rIStm.ReadInt16( nStyle );
+ ImplReadColor( rIStm, aStartCol );
+ ImplReadColor( rIStm, aEndCol );
+ rIStm.ReadInt16( nAngle ).ReadInt16( nBorder ).ReadInt16( nOfsX ).ReadInt16( nOfsY ).ReadInt16( nIntensityStart ).ReadInt16( nIntensityEnd );
+
+ Gradient aGrad( (GradientStyle) nStyle, aStartCol, aEndCol );
+
+ aGrad.SetAngle( nAngle );
+ aGrad.SetBorder( nBorder );
+ aGrad.SetOfsX( nOfsX );
+ aGrad.SetOfsY( nOfsY );
+ aGrad.SetStartIntensity( nIntensityStart );
+ aGrad.SetEndIntensity( nIntensityEnd );
+ rMtf.AddAction( new MetaGradientAction( aRect, aGrad ) );
+ }
+ break;
- case GDI_FLOATTRANSPARENT_COMMENT:
- {
- GDIMetaFile aMtf;
- Point aPos;
- Size aSize;
- Gradient aGradient;
- sal_Int32 nFollowingActionCount;
-
- ReadGDIMetaFile( rIStm, aMtf );
- ReadPair( rIStm, aPos );
- ReadPair( rIStm, aSize );
- ReadGradient( rIStm, aGradient );
- rIStm.ReadInt32( nFollowingActionCount );
- ImplSkipActions( rIStm, nFollowingActionCount );
- rMtf.AddAction( new MetaFloatTransparentAction( aMtf, aPos, aSize, aGradient ) );
-
- i += nFollowingActionCount;
- }
- break;
+ case GDI_TRANSPARENT_COMMENT:
+ {
+ tools::PolyPolygon aPolyPoly;
+ sal_Int32 nFollowingActionCount;
+ sal_Int16 nTrans;
- case GDI_HATCH_COMMENT:
- {
- tools::PolyPolygon aPolyPoly;
- Hatch aHatch;
- sal_Int32 nFollowingActionCount;
+ ReadPolyPolygon( rIStm, aPolyPoly );
+ rIStm.ReadInt16( nTrans ).ReadInt32( nFollowingActionCount );
+ ImplSkipActions( rIStm, nFollowingActionCount );
+ rMtf.AddAction( new MetaTransparentAction( aPolyPoly, nTrans ) );
- ReadPolyPolygon( rIStm, aPolyPoly );
- ReadHatch( rIStm, aHatch );
- rIStm.ReadInt32( nFollowingActionCount );
- ImplSkipActions( rIStm, nFollowingActionCount );
- rMtf.AddAction( new MetaHatchAction( aPolyPoly, aHatch ) );
+ i += nFollowingActionCount;
+ }
+ break;
- i += nFollowingActionCount;
- }
- break;
+ case GDI_FLOATTRANSPARENT_COMMENT:
+ {
+ GDIMetaFile aMtf;
+ Point aPos;
+ Size aSize;
+ Gradient aGradient;
+ sal_Int32 nFollowingActionCount;
+
+ ReadGDIMetaFile( rIStm, aMtf );
+ ReadPair( rIStm, aPos );
+ ReadPair( rIStm, aSize );
+ ReadGradient( rIStm, aGradient );
+ rIStm.ReadInt32( nFollowingActionCount );
+ ImplSkipActions( rIStm, nFollowingActionCount );
+ rMtf.AddAction( new MetaFloatTransparentAction( aMtf, aPos, aSize, aGradient ) );
+
+ i += nFollowingActionCount;
+ }
+ break;
- case GDI_REFPOINT_COMMENT:
- {
- Point aRefPoint;
- bool bSet;
- sal_Int32 nFollowingActionCount;
+ case GDI_HATCH_COMMENT:
+ {
+ tools::PolyPolygon aPolyPoly;
+ Hatch aHatch;
+ sal_Int32 nFollowingActionCount;
- ReadPair( rIStm, aRefPoint );
- rIStm.ReadCharAsBool( bSet ).ReadInt32( nFollowingActionCount );
- ImplSkipActions( rIStm, nFollowingActionCount );
- rMtf.AddAction( new MetaRefPointAction( aRefPoint, bSet ) );
+ ReadPolyPolygon( rIStm, aPolyPoly );
+ ReadHatch( rIStm, aHatch );
+ rIStm.ReadInt32( nFollowingActionCount );
+ ImplSkipActions( rIStm, nFollowingActionCount );
+ rMtf.AddAction( new MetaHatchAction( aPolyPoly, aHatch ) );
- i += nFollowingActionCount;
+ i += nFollowingActionCount;
+ }
+ break;
- // #106172# Track font relevant data in shadow VDev
- if( bSet )
- aFontVDev->SetRefPoint( aRefPoint );
- else
- aFontVDev->SetRefPoint();
- }
- break;
+ case GDI_REFPOINT_COMMENT:
+ {
+ Point aRefPoint;
+ bool bSet;
+ sal_Int32 nFollowingActionCount;
- case GDI_TEXTLINECOLOR_COMMENT:
- {
- Color aColor;
- bool bSet;
- sal_Int32 nFollowingActionCount;
+ ReadPair( rIStm, aRefPoint );
+ rIStm.ReadCharAsBool( bSet ).ReadInt32( nFollowingActionCount );
+ ImplSkipActions( rIStm, nFollowingActionCount );
+ rMtf.AddAction( new MetaRefPointAction( aRefPoint, bSet ) );
- ReadColor( rIStm, aColor );
- rIStm.ReadCharAsBool( bSet ).ReadInt32( nFollowingActionCount );
- ImplSkipActions( rIStm, nFollowingActionCount );
- rMtf.AddAction( new MetaTextLineColorAction( aColor, bSet ) );
+ i += nFollowingActionCount;
- i += nFollowingActionCount;
- }
- break;
+ // #106172# Track font relevant data in shadow VDev
+ if( bSet )
+ aFontVDev->SetRefPoint( aRefPoint );
+ else
+ aFontVDev->SetRefPoint();
+ }
+ break;
- case GDI_TEXTLINE_COMMENT:
- {
- Point aStartPt;
- sal_Int32 nWidth;
- sal_uInt32 nStrikeout;
- sal_uInt32 nUnderline;
- sal_Int32 nFollowingActionCount;
-
- ReadPair( rIStm, aStartPt );
- rIStm.ReadInt32( nWidth ).ReadUInt32( nStrikeout ).ReadUInt32( nUnderline ).ReadInt32( nFollowingActionCount );
- ImplSkipActions( rIStm, nFollowingActionCount );
- rMtf.AddAction( new MetaTextLineAction( aStartPt, nWidth,
- (FontStrikeout) nStrikeout,
- (FontLineStyle) nUnderline,
- LINESTYLE_NONE ) );
-
- i += nFollowingActionCount;
- }
- break;
+ case GDI_TEXTLINECOLOR_COMMENT:
+ {
+ Color aColor;
+ bool bSet;
+ sal_Int32 nFollowingActionCount;
- case GDI_GRADIENTEX_COMMENT:
- {
- tools::PolyPolygon aPolyPoly;
- Gradient aGradient;
- sal_Int32 nFollowingActionCount;
+ ReadColor( rIStm, aColor );
+ rIStm.ReadCharAsBool( bSet ).ReadInt32( nFollowingActionCount );
+ ImplSkipActions( rIStm, nFollowingActionCount );
+ rMtf.AddAction( new MetaTextLineColorAction( aColor, bSet ) );
- ReadPolyPolygon( rIStm, aPolyPoly );
- ReadGradient( rIStm, aGradient );
- rIStm.ReadInt32( nFollowingActionCount );
- ImplSkipActions( rIStm, nFollowingActionCount );
- rMtf.AddAction( new MetaGradientExAction( aPolyPoly, aGradient ) );
+ i += nFollowingActionCount;
+ }
+ break;
- i += nFollowingActionCount;
- }
- break;
+ case GDI_TEXTLINE_COMMENT:
+ {
+ Point aStartPt;
+ sal_Int32 nWidth;
+ sal_uInt32 nStrikeout;
+ sal_uInt32 nUnderline;
+ sal_Int32 nFollowingActionCount;
+
+ ReadPair( rIStm, aStartPt );
+ rIStm.ReadInt32( nWidth ).ReadUInt32( nStrikeout ).ReadUInt32( nUnderline ).ReadInt32( nFollowingActionCount );
+ ImplSkipActions( rIStm, nFollowingActionCount );
+ rMtf.AddAction( new MetaTextLineAction( aStartPt, nWidth,
+ (FontStrikeout) nStrikeout,
+ (FontLineStyle) nUnderline,
+ LINESTYLE_NONE ) );
+
+ i += nFollowingActionCount;
+ }
+ break;
- case GDI_COMMENT_COMMENT:
- {
- sal_Int32 nValue;
- sal_uInt32 nDataSize;
- sal_uInt8* pData;
- sal_Int32 nFollowingActionCount;
+ case GDI_GRADIENTEX_COMMENT:
+ {
+ tools::PolyPolygon aPolyPoly;
+ Gradient aGradient;
+ sal_Int32 nFollowingActionCount;
- OString aComment = read_uInt16_lenPrefixed_uInt8s_ToOString(rIStm);
- rIStm.ReadInt32( nValue ).ReadUInt32( nDataSize );
+ ReadPolyPolygon( rIStm, aPolyPoly );
+ ReadGradient( rIStm, aGradient );
+ rIStm.ReadInt32( nFollowingActionCount );
+ ImplSkipActions( rIStm, nFollowingActionCount );
+ rMtf.AddAction( new MetaGradientExAction( aPolyPoly, aGradient ) );
- if( nDataSize )
- {
- pData = new sal_uInt8[ nDataSize ];
- rIStm.ReadBytes( pData, nDataSize );
- }
- else
- pData = nullptr;
+ i += nFollowingActionCount;
+ }
+ break;
- rIStm.ReadInt32( nFollowingActionCount );
- ImplSkipActions( rIStm, nFollowingActionCount );
- rMtf.AddAction( new MetaCommentAction( aComment, nValue, pData, nDataSize ) );
+ case GDI_COMMENT_COMMENT:
+ {
+ sal_Int32 nValue;
+ sal_uInt32 nDataSize;
+ sal_uInt8* pData;
+ sal_Int32 nFollowingActionCount;
- i += nFollowingActionCount;
- }
- break;
+ OString aComment = read_uInt16_lenPrefixed_uInt8s_ToOString(rIStm);
+ rIStm.ReadInt32( nValue ).ReadUInt32( nDataSize );
- case GDI_UNICODE_COMMENT:
+ if( nDataSize )
{
- nUnicodeCommentActionNumber = i + 1;
- nUnicodeCommentStreamPos = rIStm.Tell() - 6;
- rIStm.SeekRel( nActionSize - 4 );
+ pData = new sal_uInt8[ nDataSize ];
+ rIStm.ReadBytes( pData, nDataSize );
}
- break;
+ else
+ pData = nullptr;
+
+ rIStm.ReadInt32( nFollowingActionCount );
+ ImplSkipActions( rIStm, nFollowingActionCount );
+ rMtf.AddAction( new MetaCommentAction( aComment, nValue, pData, nDataSize ) );
- default:
- rIStm.SeekRel( nActionSize - 4 );
- break;
+ i += nFollowingActionCount;
}
+ break;
+
+ case GDI_UNICODE_COMMENT:
+ {
+ nUnicodeCommentActionNumber = i + 1;
+ nUnicodeCommentStreamPos = rIStm.Tell() - 6;
+ rIStm.SeekRel( nActionSize - 4 );
+ }
+ break;
+
+ default:
+ rIStm.SeekRel( nActionSize - 4 );
+ break;
}
+ }
// cleanup push-pop stack if necessary
while( !aLIStack.empty() )