LCOV - code coverage report
Current view: top level - libreoffice/vcl/source/gdi - metaact.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 542 1888 28.7 %
Date: 2012-12-27 Functions: 176 573 30.7 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include <algorithm>
      21             : #include <string.h>
      22             : #include <tools/stream.hxx>
      23             : #include <tools/vcompat.hxx>
      24             : #include <tools/helpers.hxx>
      25             : #include <vcl/outdev.hxx>
      26             : #include <vcl/metaact.hxx>
      27             : #include <vcl/graphictools.hxx>
      28             : #include <basegfx/matrix/b2dhommatrixtools.hxx>
      29             : 
      30             : // ========================================================================
      31             : 
      32           3 : inline void ImplScalePoint( Point& rPt, double fScaleX, double fScaleY )
      33             : {
      34           3 :     rPt.X() = FRound( fScaleX * rPt.X() );
      35           3 :     rPt.Y() = FRound( fScaleY * rPt.Y() );
      36           3 : }
      37             : 
      38             : // ------------------------------------------------------------------------
      39             : 
      40           0 : inline void ImplScaleRect( Rectangle& rRect, double fScaleX, double fScaleY )
      41             : {
      42           0 :     Point aTL( rRect.TopLeft() );
      43           0 :     Point aBR( rRect.BottomRight() );
      44             : 
      45           0 :     ImplScalePoint( aTL, fScaleX, fScaleY );
      46           0 :     ImplScalePoint( aBR, fScaleX, fScaleY );
      47             : 
      48           0 :     rRect = Rectangle( aTL, aBR );
      49           0 :     rRect.Justify();
      50           0 : }
      51             : 
      52             : // ------------------------------------------------------------------------
      53             : 
      54           0 : inline void ImplScalePoly( Polygon& rPoly, double fScaleX, double fScaleY )
      55             : {
      56           0 :     for( sal_uInt16 i = 0, nCount = rPoly.GetSize(); i < nCount; i++ )
      57           0 :         ImplScalePoint( rPoly[ i ], fScaleX, fScaleY );
      58           0 : }
      59             : 
      60             : // ------------------------------------------------------------------------
      61             : 
      62           0 : inline void ImplScaleLineInfo( LineInfo& rLineInfo, double fScaleX, double fScaleY )
      63             : {
      64           0 :     if( !rLineInfo.IsDefault() )
      65             :     {
      66           0 :         const double fScale = ( fabs(fScaleX) + fabs(fScaleY) ) * 0.5;
      67             : 
      68           0 :         rLineInfo.SetWidth( FRound( fScale * rLineInfo.GetWidth() ) );
      69           0 :         rLineInfo.SetDashLen( FRound( fScale * rLineInfo.GetDashLen() ) );
      70           0 :         rLineInfo.SetDotLen( FRound( fScale * rLineInfo.GetDotLen() ) );
      71           0 :         rLineInfo.SetDistance( FRound( fScale * rLineInfo.GetDistance() ) );
      72             :     }
      73           0 : }
      74             : 
      75             : // ========================================================================
      76             : 
      77             : #define COMPAT( _def_rIStm ) VersionCompat aCompat( ( _def_rIStm ), STREAM_READ );
      78             : #define WRITE_BASE_COMPAT( _def_rOStm, _def_nVer, _pWriteData )         \
      79             :     MetaAction::Write( ( _def_rOStm ), _pWriteData );                   \
      80             :     VersionCompat aCompat( ( _def_rOStm ), STREAM_WRITE, ( _def_nVer ) );
      81             : 
      82             : // ========================================================================
      83             : 
      84           0 : MetaAction::MetaAction() :
      85             :     mnRefCount( 1 ),
      86           0 :     mnType( META_NULL_ACTION )
      87             : {
      88           0 : }
      89             : 
      90             : // ------------------------------------------------------------------------
      91             : 
      92      351462 : MetaAction::MetaAction( sal_uInt16 nType ) :
      93             :     mnRefCount( 1 ),
      94      351462 :     mnType( nType )
      95             : {
      96      351462 : }
      97             : 
      98             : // ------------------------------------------------------------------------
      99             : 
     100      345806 : MetaAction::~MetaAction()
     101             : {
     102      345806 : }
     103             : 
     104             : // ------------------------------------------------------------------------
     105             : 
     106           0 : void MetaAction::Execute( OutputDevice* )
     107             : {
     108           0 : }
     109             : 
     110             : // ------------------------------------------------------------------------
     111             : 
     112           0 : MetaAction* MetaAction::Clone()
     113             : {
     114           0 :     return new MetaAction;
     115             : }
     116             : 
     117             : // ------------------------------------------------------------------------
     118             : 
     119           0 : void MetaAction::Move( long, long )
     120             : {
     121           0 : }
     122             : 
     123             : // ------------------------------------------------------------------------
     124             : 
     125           9 : void MetaAction::Scale( double, double )
     126             : {
     127           9 : }
     128             : 
     129             : // ------------------------------------------------------------------------
     130             : 
     131           0 : sal_Bool MetaAction::Compare( const MetaAction& ) const
     132             : {
     133           0 :     return sal_True;
     134             : }
     135             : 
     136             : // ------------------------------------------------------------------------
     137             : 
     138      187712 : void MetaAction::Write( SvStream& rOStm, ImplMetaWriteData* )
     139             : {
     140      187712 :     rOStm << mnType;
     141      187712 : }
     142             : 
     143             : // ------------------------------------------------------------------------
     144             : 
     145           0 : void MetaAction::Read( SvStream& rIStm, ImplMetaReadData* )
     146             : {
     147           0 :     rIStm >> mnType;
     148           0 : }
     149             : 
     150             : // ------------------------------------------------------------------------
     151             : 
     152      174844 : MetaAction* MetaAction::ReadMetaAction( SvStream& rIStm, ImplMetaReadData* pData )
     153             : {
     154      174844 :     MetaAction* pAction = NULL;
     155             :     sal_uInt16      nType;
     156             : 
     157      174844 :     rIStm >> nType;
     158             : 
     159      174844 :     switch( nType )
     160             :     {
     161           0 :         case( META_NULL_ACTION ): pAction = new MetaAction; break;
     162           0 :         case( META_PIXEL_ACTION ): pAction = new MetaPixelAction; break;
     163           0 :         case( META_POINT_ACTION ): pAction = new MetaPointAction; break;
     164           0 :         case( META_LINE_ACTION ): pAction = new MetaLineAction; break;
     165        1216 :         case( META_RECT_ACTION ): pAction = new MetaRectAction; break;
     166           0 :         case( META_ROUNDRECT_ACTION ): pAction = new MetaRoundRectAction; break;
     167           0 :         case( META_ELLIPSE_ACTION ): pAction = new MetaEllipseAction; break;
     168           0 :         case( META_ARC_ACTION ): pAction = new MetaArcAction; break;
     169           0 :         case( META_PIE_ACTION ): pAction = new MetaPieAction; break;
     170           0 :         case( META_CHORD_ACTION ): pAction = new MetaChordAction; break;
     171           0 :         case( META_POLYLINE_ACTION ): pAction = new MetaPolyLineAction; break;
     172           0 :         case( META_POLYGON_ACTION ): pAction = new MetaPolygonAction; break;
     173           0 :         case( META_POLYPOLYGON_ACTION ): pAction = new MetaPolyPolygonAction; break;
     174           0 :         case( META_TEXT_ACTION ): pAction = new MetaTextAction; break;
     175           2 :         case( META_TEXTARRAY_ACTION ): pAction = new MetaTextArrayAction; break;
     176       20768 :         case( META_STRETCHTEXT_ACTION ): pAction = new MetaStretchTextAction; break;
     177           0 :         case( META_TEXTRECT_ACTION ): pAction = new MetaTextRectAction; break;
     178           0 :         case( META_TEXTLINE_ACTION ): pAction = new MetaTextLineAction; break;
     179           0 :         case( META_BMP_ACTION ): pAction = new MetaBmpAction; break;
     180           0 :         case( META_BMPSCALE_ACTION ): pAction = new MetaBmpScaleAction; break;
     181           0 :         case( META_BMPSCALEPART_ACTION ): pAction = new MetaBmpScalePartAction; break;
     182           0 :         case( META_BMPEX_ACTION ): pAction = new MetaBmpExAction; break;
     183           0 :         case( META_BMPEXSCALE_ACTION ): pAction = new MetaBmpExScaleAction; break;
     184           0 :         case( META_BMPEXSCALEPART_ACTION ): pAction = new MetaBmpExScalePartAction; break;
     185           0 :         case( META_MASK_ACTION ): pAction = new MetaMaskAction; break;
     186           0 :         case( META_MASKSCALE_ACTION ): pAction = new MetaMaskScaleAction; break;
     187           0 :         case( META_MASKSCALEPART_ACTION ): pAction = new MetaMaskScalePartAction; break;
     188           0 :         case( META_GRADIENT_ACTION ): pAction = new MetaGradientAction; break;
     189           0 :         case( META_GRADIENTEX_ACTION ): pAction = new MetaGradientExAction; break;
     190           0 :         case( META_HATCH_ACTION ): pAction = new MetaHatchAction; break;
     191           0 :         case( META_WALLPAPER_ACTION ): pAction = new MetaWallpaperAction; break;
     192           0 :         case( META_CLIPREGION_ACTION ): pAction = new MetaClipRegionAction; break;
     193        2288 :         case( META_ISECTRECTCLIPREGION_ACTION ): pAction = new MetaISectRectClipRegionAction; break;
     194           4 :         case( META_ISECTREGIONCLIPREGION_ACTION ): pAction = new MetaISectRegionClipRegionAction; break;
     195           0 :         case( META_MOVECLIPREGION_ACTION ): pAction = new MetaMoveClipRegionAction; break;
     196        1218 :         case( META_LINECOLOR_ACTION ): pAction = new MetaLineColorAction; break;
     197        1216 :         case( META_FILLCOLOR_ACTION ): pAction = new MetaFillColorAction; break;
     198       22177 :         case( META_TEXTCOLOR_ACTION ): pAction = new MetaTextColorAction; break;
     199       21985 :         case( META_TEXTFILLCOLOR_ACTION ): pAction = new MetaTextFillColorAction; break;
     200           1 :         case( META_TEXTLINECOLOR_ACTION ): pAction = new MetaTextLineColorAction; break;
     201           1 :         case( META_OVERLINECOLOR_ACTION ): pAction = new MetaOverlineColorAction; break;
     202       21985 :         case( META_TEXTALIGN_ACTION ): pAction = new MetaTextAlignAction; break;
     203           0 :         case( META_MAPMODE_ACTION ): pAction = new MetaMapModeAction; break;
     204       21985 :         case( META_FONT_ACTION ): pAction = new MetaFontAction; break;
     205       24277 :         case( META_PUSH_ACTION ): pAction = new MetaPushAction; break;
     206       24277 :         case( META_POP_ACTION ): pAction = new MetaPopAction; break;
     207           0 :         case( META_RASTEROP_ACTION ): pAction = new MetaRasterOpAction; break;
     208           0 :         case( META_TRANSPARENT_ACTION ): pAction = new MetaTransparentAction; break;
     209           0 :         case( META_FLOATTRANSPARENT_ACTION ): pAction = new MetaFloatTransparentAction; break;
     210           0 :         case( META_EPS_ACTION ): pAction = new MetaEPSAction; break;
     211           0 :         case( META_REFPOINT_ACTION ): pAction = new MetaRefPointAction; break;
     212           0 :         case( META_COMMENT_ACTION ): pAction = new MetaCommentAction; break;
     213        4578 :         case( META_LAYOUTMODE_ACTION ): pAction = new MetaLayoutModeAction; break;
     214        6866 :         case( META_TEXTLANGUAGE_ACTION ): pAction = new MetaTextLanguageAction; break;
     215             : 
     216             :         default:
     217             :         {
     218             :             // Action ueberlesen durch Kombination Ctor/Dtor,
     219             :             // new/delete, weil Compiler sonst vielleicht wegoptimieren
     220           0 :             delete ( new VersionCompat( rIStm, STREAM_READ ) );
     221             :         }
     222           0 :         break;
     223             :     }
     224             : 
     225      174844 :     if( pAction )
     226      174844 :         pAction->Read( rIStm, pData );
     227             : 
     228      174844 :     return pAction;
     229             : }
     230             : 
     231             : // ========================================================================
     232             : 
     233           0 : IMPL_META_ACTION( Pixel, META_PIXEL_ACTION )
     234             : 
     235             : // ------------------------------------------------------------------------
     236             : 
     237           0 : MetaPixelAction::MetaPixelAction( const Point& rPt, const Color& rColor ) :
     238             :     MetaAction  ( META_PIXEL_ACTION ),
     239             :     maPt        ( rPt ),
     240           0 :     maColor     ( rColor )
     241             : {
     242           0 : }
     243             : 
     244             : // ------------------------------------------------------------------------
     245             : 
     246           0 : void MetaPixelAction::Execute( OutputDevice* pOut )
     247             : {
     248           0 :     pOut->DrawPixel( maPt, maColor );
     249           0 : }
     250             : 
     251             : // ------------------------------------------------------------------------
     252             : 
     253           0 : MetaAction* MetaPixelAction::Clone()
     254             : {
     255           0 :     MetaAction* pClone = (MetaAction*) new MetaPixelAction( *this );
     256           0 :     pClone->ResetRefCount();
     257           0 :     return pClone;
     258             : }
     259             : 
     260             : // ------------------------------------------------------------------------
     261             : 
     262           0 : void MetaPixelAction::Move( long nHorzMove, long nVertMove )
     263             : {
     264           0 :     maPt.Move( nHorzMove, nVertMove );
     265           0 : }
     266             : 
     267             : // ------------------------------------------------------------------------
     268             : 
     269           0 : void MetaPixelAction::Scale( double fScaleX, double fScaleY )
     270             : {
     271           0 :     ImplScalePoint( maPt, fScaleX, fScaleY );
     272           0 : }
     273             : 
     274             : // ------------------------------------------------------------------------
     275             : 
     276           0 : sal_Bool MetaPixelAction::Compare( const MetaAction& rMetaAction ) const
     277             : {
     278           0 :     return ( maPt == ((MetaPixelAction&)rMetaAction).maPt ) &&
     279           0 :            ( maColor == ((MetaPixelAction&)rMetaAction).maColor );
     280             : }
     281             : 
     282             : // ------------------------------------------------------------------------
     283             : 
     284           0 : void MetaPixelAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
     285             : {
     286           0 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
     287           0 :     rOStm << maPt;
     288           0 :     maColor.Write( rOStm, sal_True );
     289           0 : }
     290             : 
     291             : // ------------------------------------------------------------------------
     292             : 
     293           0 : void MetaPixelAction::Read( SvStream& rIStm, ImplMetaReadData* )
     294             : {
     295           0 :     COMPAT( rIStm );
     296           0 :     rIStm >> maPt;
     297           0 :     maColor.Read( rIStm, sal_True );
     298           0 : }
     299             : 
     300             : // ========================================================================
     301             : 
     302           0 : IMPL_META_ACTION( Point, META_POINT_ACTION )
     303             : 
     304             : // ------------------------------------------------------------------------
     305             : 
     306           0 : MetaPointAction::MetaPointAction( const Point& rPt ) :
     307             :     MetaAction  ( META_POINT_ACTION ),
     308           0 :     maPt        ( rPt )
     309             : {
     310           0 : }
     311             : 
     312             : // ------------------------------------------------------------------------
     313             : 
     314           0 : void MetaPointAction::Execute( OutputDevice* pOut )
     315             : {
     316           0 :     pOut->DrawPixel( maPt );
     317           0 : }
     318             : 
     319             : // ------------------------------------------------------------------------
     320             : 
     321           0 : MetaAction* MetaPointAction::Clone()
     322             : {
     323           0 :     MetaAction* pClone = (MetaAction*) new MetaPointAction( *this );
     324           0 :     pClone->ResetRefCount();
     325           0 :     return pClone;
     326             : }
     327             : 
     328             : // ------------------------------------------------------------------------
     329             : 
     330           0 : void MetaPointAction::Move( long nHorzMove, long nVertMove )
     331             : {
     332           0 :     maPt.Move( nHorzMove, nVertMove );
     333           0 : }
     334             : 
     335             : // ------------------------------------------------------------------------
     336             : 
     337           0 : void MetaPointAction::Scale( double fScaleX, double fScaleY )
     338             : {
     339           0 :     ImplScalePoint( maPt, fScaleX, fScaleY );
     340           0 : }
     341             : 
     342             : // ------------------------------------------------------------------------
     343             : 
     344           0 : sal_Bool MetaPointAction::Compare( const MetaAction& rMetaAction ) const
     345             : {
     346           0 :     return maPt == ((MetaPointAction&)rMetaAction).maPt;
     347             : }
     348             : 
     349             : // ------------------------------------------------------------------------
     350             : 
     351           0 : void MetaPointAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
     352             : {
     353           0 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
     354           0 :     rOStm << maPt;
     355           0 : }
     356             : 
     357             : // ------------------------------------------------------------------------
     358             : 
     359           0 : void MetaPointAction::Read( SvStream& rIStm, ImplMetaReadData* )
     360             : {
     361           0 :     COMPAT( rIStm );
     362           0 :     rIStm >> maPt;
     363           0 : }
     364             : 
     365             : // ========================================================================
     366             : 
     367           0 : IMPL_META_ACTION( Line, META_LINE_ACTION )
     368             : 
     369             : // ------------------------------------------------------------------------
     370             : 
     371           0 : MetaLineAction::MetaLineAction( const Point& rStart, const Point& rEnd ) :
     372             :     MetaAction  ( META_LINE_ACTION ),
     373             :     maStartPt   ( rStart ),
     374           0 :     maEndPt     ( rEnd )
     375             : {
     376           0 : }
     377             : 
     378             : // ------------------------------------------------------------------------
     379             : 
     380           0 : MetaLineAction::MetaLineAction( const Point& rStart, const Point& rEnd,
     381             :                                 const LineInfo& rLineInfo ) :
     382             :     MetaAction  ( META_LINE_ACTION ),
     383             :     maLineInfo  ( rLineInfo ),
     384             :     maStartPt   ( rStart ),
     385           0 :     maEndPt     ( rEnd )
     386             : {
     387           0 : }
     388             : 
     389             : // ------------------------------------------------------------------------
     390             : 
     391           0 : void MetaLineAction::Execute( OutputDevice* pOut )
     392             : {
     393           0 :     if( maLineInfo.IsDefault() )
     394           0 :         pOut->DrawLine( maStartPt, maEndPt );
     395             :     else
     396           0 :         pOut->DrawLine( maStartPt, maEndPt, maLineInfo );
     397           0 : }
     398             : 
     399             : // ------------------------------------------------------------------------
     400             : 
     401           0 : MetaAction* MetaLineAction::Clone()
     402             : {
     403           0 :     MetaAction* pClone = (MetaAction*) new MetaLineAction( *this );
     404           0 :     pClone->ResetRefCount();
     405           0 :     return pClone;
     406             : }
     407             : 
     408             : // ------------------------------------------------------------------------
     409             : 
     410           0 : void MetaLineAction::Move( long nHorzMove, long nVertMove )
     411             : {
     412           0 :     maStartPt.Move( nHorzMove, nVertMove );
     413           0 :     maEndPt.Move( nHorzMove, nVertMove );
     414           0 : }
     415             : 
     416             : // ------------------------------------------------------------------------
     417             : 
     418           0 : void MetaLineAction::Scale( double fScaleX, double fScaleY )
     419             : {
     420           0 :     ImplScalePoint( maStartPt, fScaleX, fScaleY );
     421           0 :     ImplScalePoint( maEndPt, fScaleX, fScaleY );
     422           0 :     ImplScaleLineInfo( maLineInfo, fScaleX, fScaleY );
     423           0 : }
     424             : 
     425             : // ------------------------------------------------------------------------
     426             : 
     427           0 : sal_Bool MetaLineAction::Compare( const MetaAction& rMetaAction ) const
     428             : {
     429           0 :     return ( maLineInfo == ((MetaLineAction&)rMetaAction).maLineInfo ) &&
     430           0 :            ( maStartPt == ((MetaLineAction&)rMetaAction).maStartPt ) &&
     431           0 :            ( maEndPt == ((MetaLineAction&)rMetaAction).maEndPt );
     432             : }
     433             : 
     434             : // ------------------------------------------------------------------------
     435             : 
     436           0 : void MetaLineAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
     437             : {
     438           0 :     WRITE_BASE_COMPAT( rOStm, 2, pData );
     439             : 
     440           0 :     rOStm << maStartPt << maEndPt;  // Version 1
     441           0 :     rOStm << maLineInfo;            // Version 2
     442           0 : }
     443             : 
     444             : // ------------------------------------------------------------------------
     445             : 
     446           0 : void MetaLineAction::Read( SvStream& rIStm, ImplMetaReadData* )
     447             : {
     448           0 :     COMPAT( rIStm );
     449             : 
     450             :     // Version 1
     451           0 :     rIStm >> maStartPt >> maEndPt;
     452             : 
     453             :     // Version 2
     454           0 :     if( aCompat.GetVersion() >= 2 )
     455             :     {
     456           0 :         rIStm >> maLineInfo;
     457           0 :     }
     458           0 : }
     459             : 
     460             : // ========================================================================
     461             : 
     462        6086 : IMPL_META_ACTION( Rect, META_RECT_ACTION )
     463             : 
     464             : // ------------------------------------------------------------------------
     465             : 
     466        1257 : MetaRectAction::MetaRectAction( const Rectangle& rRect ) :
     467             :     MetaAction  ( META_RECT_ACTION ),
     468        1257 :     maRect      ( rRect )
     469             : {
     470        1257 : }
     471             : 
     472             : // ------------------------------------------------------------------------
     473             : 
     474          83 : void MetaRectAction::Execute( OutputDevice* pOut )
     475             : {
     476          83 :     pOut->DrawRect( maRect );
     477          83 : }
     478             : 
     479             : // ------------------------------------------------------------------------
     480             : 
     481           0 : MetaAction* MetaRectAction::Clone()
     482             : {
     483           0 :     MetaAction* pClone = (MetaAction*) new MetaRectAction( *this );
     484           0 :     pClone->ResetRefCount();
     485           0 :     return pClone;
     486             : }
     487             : 
     488             : // ------------------------------------------------------------------------
     489             : 
     490           0 : void MetaRectAction::Move( long nHorzMove, long nVertMove )
     491             : {
     492           0 :     maRect.Move( nHorzMove, nVertMove );
     493           0 : }
     494             : 
     495             : // ------------------------------------------------------------------------
     496             : 
     497           0 : void MetaRectAction::Scale( double fScaleX, double fScaleY )
     498             : {
     499           0 :     ImplScaleRect( maRect, fScaleX, fScaleY );
     500           0 : }
     501             : 
     502             : // ------------------------------------------------------------------------
     503             : 
     504           0 : sal_Bool MetaRectAction::Compare( const MetaAction& rMetaAction ) const
     505             : {
     506           0 :     return maRect == ((MetaRectAction&)rMetaAction).maRect;
     507             : }
     508             : 
     509             : // ------------------------------------------------------------------------
     510             : 
     511        1430 : void MetaRectAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
     512             : {
     513        1430 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
     514        1430 :     rOStm << maRect;
     515        1430 : }
     516             : 
     517             : // ------------------------------------------------------------------------
     518             : 
     519        1216 : void MetaRectAction::Read( SvStream& rIStm, ImplMetaReadData* )
     520             : {
     521        1216 :     COMPAT( rIStm );
     522        1216 :     rIStm >> maRect;
     523        1216 : }
     524             : 
     525             : // ========================================================================
     526             : 
     527           0 : IMPL_META_ACTION( RoundRect, META_ROUNDRECT_ACTION )
     528             : 
     529             : // ------------------------------------------------------------------------
     530             : 
     531           0 : MetaRoundRectAction::MetaRoundRectAction( const Rectangle& rRect,
     532             :                                           sal_uInt32 nHorzRound, sal_uInt32 nVertRound ) :
     533             :     MetaAction  ( META_ROUNDRECT_ACTION ),
     534             :     maRect      ( rRect ),
     535             :     mnHorzRound ( nHorzRound ),
     536           0 :     mnVertRound ( nVertRound )
     537             : {
     538           0 : }
     539             : 
     540             : // ------------------------------------------------------------------------
     541             : 
     542           0 : void MetaRoundRectAction::Execute( OutputDevice* pOut )
     543             : {
     544           0 :     pOut->DrawRect( maRect, mnHorzRound, mnVertRound );
     545           0 : }
     546             : 
     547             : // ------------------------------------------------------------------------
     548             : 
     549           0 : MetaAction* MetaRoundRectAction::Clone()
     550             : {
     551           0 :     MetaAction* pClone = (MetaAction*) new MetaRoundRectAction( *this );
     552           0 :     pClone->ResetRefCount();
     553           0 :     return pClone;
     554             : }
     555             : 
     556             : // ------------------------------------------------------------------------
     557             : 
     558           0 : void MetaRoundRectAction::Move( long nHorzMove, long nVertMove )
     559             : {
     560           0 :     maRect.Move( nHorzMove, nVertMove );
     561           0 : }
     562             : 
     563             : // ------------------------------------------------------------------------
     564             : 
     565           0 : void MetaRoundRectAction::Scale( double fScaleX, double fScaleY )
     566             : {
     567           0 :     ImplScaleRect( maRect, fScaleX, fScaleY );
     568           0 :     mnHorzRound = FRound( mnHorzRound * fabs(fScaleX) );
     569           0 :     mnVertRound = FRound( mnVertRound * fabs(fScaleY) );
     570           0 : }
     571             : 
     572             : // ------------------------------------------------------------------------
     573             : 
     574           0 : sal_Bool MetaRoundRectAction::Compare( const MetaAction& rMetaAction ) const
     575             : {
     576           0 :     return ( maRect == ((MetaRoundRectAction&)rMetaAction).maRect ) &&
     577             :            ( mnHorzRound == ((MetaRoundRectAction&)rMetaAction).mnHorzRound ) &&
     578           0 :            ( mnVertRound == ((MetaRoundRectAction&)rMetaAction).mnVertRound );
     579             : }
     580             : 
     581             : // ------------------------------------------------------------------------
     582             : 
     583           0 : void MetaRoundRectAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
     584             : {
     585           0 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
     586           0 :     rOStm << maRect << mnHorzRound << mnVertRound;
     587           0 : }
     588             : 
     589             : // ------------------------------------------------------------------------
     590             : 
     591           0 : void MetaRoundRectAction::Read( SvStream& rIStm, ImplMetaReadData* )
     592             : {
     593           0 :     COMPAT( rIStm );
     594           0 :     rIStm >> maRect >> mnHorzRound >> mnVertRound;
     595           0 : }
     596             : 
     597             : // ========================================================================
     598             : 
     599           2 : IMPL_META_ACTION( Ellipse, META_ELLIPSE_ACTION )
     600             : 
     601             : // ------------------------------------------------------------------------
     602             : 
     603           1 : MetaEllipseAction::MetaEllipseAction( const Rectangle& rRect ) :
     604             :     MetaAction  ( META_ELLIPSE_ACTION ),
     605           1 :     maRect      ( rRect )
     606             : {
     607           1 : }
     608             : 
     609             : // ------------------------------------------------------------------------
     610             : 
     611           0 : void MetaEllipseAction::Execute( OutputDevice* pOut )
     612             : {
     613           0 :     pOut->DrawEllipse( maRect );
     614           0 : }
     615             : 
     616             : // ------------------------------------------------------------------------
     617             : 
     618           0 : MetaAction* MetaEllipseAction::Clone()
     619             : {
     620           0 :     MetaAction* pClone = (MetaAction*) new MetaEllipseAction( *this );
     621           0 :     pClone->ResetRefCount();
     622           0 :     return pClone;
     623             : }
     624             : 
     625             : // ------------------------------------------------------------------------
     626             : 
     627           0 : void MetaEllipseAction::Move( long nHorzMove, long nVertMove )
     628             : {
     629           0 :     maRect.Move( nHorzMove, nVertMove );
     630           0 : }
     631             : 
     632             : // ------------------------------------------------------------------------
     633             : 
     634           0 : void MetaEllipseAction::Scale( double fScaleX, double fScaleY )
     635             : {
     636           0 :     ImplScaleRect( maRect, fScaleX, fScaleY );
     637           0 : }
     638             : 
     639             : // ------------------------------------------------------------------------
     640             : 
     641           0 : sal_Bool MetaEllipseAction::Compare( const MetaAction& rMetaAction ) const
     642             : {
     643           0 :     return maRect == ((MetaEllipseAction&)rMetaAction).maRect;
     644             : }
     645             : 
     646             : // ------------------------------------------------------------------------
     647             : 
     648           0 : void MetaEllipseAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
     649             : {
     650           0 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
     651           0 :     rOStm << maRect;
     652           0 : }
     653             : 
     654             : // ------------------------------------------------------------------------
     655             : 
     656           0 : void MetaEllipseAction::Read( SvStream& rIStm, ImplMetaReadData* )
     657             : {
     658           0 :     COMPAT( rIStm );
     659           0 :     rIStm >> maRect;
     660           0 : }
     661             : 
     662             : // ========================================================================
     663             : 
     664           0 : IMPL_META_ACTION( Arc, META_ARC_ACTION )
     665             : 
     666             : // ------------------------------------------------------------------------
     667             : 
     668           0 : MetaArcAction::MetaArcAction( const Rectangle& rRect,
     669             :                               const Point& rStart, const Point& rEnd ) :
     670             :     MetaAction  ( META_ARC_ACTION ),
     671             :     maRect      ( rRect ),
     672             :     maStartPt   ( rStart ),
     673           0 :     maEndPt     ( rEnd )
     674             : {
     675           0 : }
     676             : 
     677             : // ------------------------------------------------------------------------
     678             : 
     679           0 : void MetaArcAction::Execute( OutputDevice* pOut )
     680             : {
     681           0 :     pOut->DrawArc( maRect, maStartPt, maEndPt );
     682           0 : }
     683             : 
     684             : // ------------------------------------------------------------------------
     685             : 
     686           0 : MetaAction* MetaArcAction::Clone()
     687             : {
     688           0 :     MetaAction* pClone = (MetaAction*) new MetaArcAction( *this );
     689           0 :     pClone->ResetRefCount();
     690           0 :     return pClone;
     691             : }
     692             : 
     693             : // ------------------------------------------------------------------------
     694             : 
     695           0 : void MetaArcAction::Move( long nHorzMove, long nVertMove )
     696             : {
     697           0 :     maRect.Move(  nHorzMove, nVertMove );
     698           0 :     maStartPt.Move(  nHorzMove, nVertMove );
     699           0 :     maEndPt.Move(  nHorzMove, nVertMove );
     700           0 : }
     701             : 
     702             : // ------------------------------------------------------------------------
     703             : 
     704           0 : void MetaArcAction::Scale( double fScaleX, double fScaleY )
     705             : {
     706           0 :     ImplScaleRect( maRect, fScaleX, fScaleY );
     707           0 :     ImplScalePoint( maStartPt, fScaleX, fScaleY );
     708           0 :     ImplScalePoint( maEndPt, fScaleX, fScaleY );
     709           0 : }
     710             : 
     711             : // ------------------------------------------------------------------------
     712             : 
     713           0 : sal_Bool MetaArcAction::Compare( const MetaAction& rMetaAction ) const
     714             : {
     715           0 :     return ( maRect == ((MetaArcAction&)rMetaAction).maRect ) &&
     716           0 :            ( maStartPt == ((MetaArcAction&)rMetaAction).maStartPt ) &&
     717           0 :            ( maEndPt == ((MetaArcAction&)rMetaAction).maEndPt );
     718             : }
     719             : 
     720             : // ------------------------------------------------------------------------
     721             : 
     722           0 : void MetaArcAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
     723             : {
     724           0 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
     725           0 :     rOStm << maRect << maStartPt << maEndPt;
     726           0 : }
     727             : 
     728             : // ------------------------------------------------------------------------
     729             : 
     730           0 : void MetaArcAction::Read( SvStream& rIStm, ImplMetaReadData* )
     731             : {
     732           0 :     COMPAT( rIStm );
     733           0 :     rIStm >> maRect >> maStartPt >> maEndPt;
     734           0 : }
     735             : 
     736             : // ========================================================================
     737             : 
     738           0 : IMPL_META_ACTION( Pie, META_PIE_ACTION )
     739             : 
     740             : // ------------------------------------------------------------------------
     741             : 
     742           0 : MetaPieAction::MetaPieAction( const Rectangle& rRect,
     743             :                               const Point& rStart, const Point& rEnd ) :
     744             :     MetaAction  ( META_PIE_ACTION ),
     745             :     maRect      ( rRect ),
     746             :     maStartPt   ( rStart ),
     747           0 :     maEndPt     ( rEnd )
     748             : {
     749           0 : }
     750             : 
     751             : // ------------------------------------------------------------------------
     752             : 
     753           0 : void MetaPieAction::Execute( OutputDevice* pOut )
     754             : {
     755           0 :     pOut->DrawPie( maRect, maStartPt, maEndPt );
     756           0 : }
     757             : 
     758             : // ------------------------------------------------------------------------
     759             : 
     760           0 : MetaAction* MetaPieAction::Clone()
     761             : {
     762           0 :     MetaAction* pClone = (MetaAction*) new MetaPieAction( *this );
     763           0 :     pClone->ResetRefCount();
     764           0 :     return pClone;
     765             : }
     766             : 
     767             : // ------------------------------------------------------------------------
     768             : 
     769           0 : void MetaPieAction::Move( long nHorzMove, long nVertMove )
     770             : {
     771           0 :     maRect.Move(  nHorzMove, nVertMove );
     772           0 :     maStartPt.Move(  nHorzMove, nVertMove );
     773           0 :     maEndPt.Move(  nHorzMove, nVertMove );
     774           0 : }
     775             : 
     776             : // ------------------------------------------------------------------------
     777             : 
     778           0 : void MetaPieAction::Scale( double fScaleX, double fScaleY )
     779             : {
     780           0 :     ImplScaleRect( maRect, fScaleX, fScaleY );
     781           0 :     ImplScalePoint( maStartPt, fScaleX, fScaleY );
     782           0 :     ImplScalePoint( maEndPt, fScaleX, fScaleY );
     783           0 : }
     784             : 
     785             : // ------------------------------------------------------------------------
     786             : 
     787           0 : sal_Bool MetaPieAction::Compare( const MetaAction& rMetaAction ) const
     788             : {
     789           0 :     return ( maRect == ((MetaPieAction&)rMetaAction).maRect ) &&
     790           0 :            ( maStartPt == ((MetaPieAction&)rMetaAction).maStartPt ) &&
     791           0 :            ( maEndPt == ((MetaPieAction&)rMetaAction).maEndPt );
     792             : }
     793             : 
     794             : // ------------------------------------------------------------------------
     795             : 
     796           0 : void MetaPieAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
     797             : {
     798           0 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
     799           0 :     rOStm << maRect << maStartPt << maEndPt;
     800           0 : }
     801             : 
     802             : // ------------------------------------------------------------------------
     803             : 
     804           0 : void MetaPieAction::Read( SvStream& rIStm, ImplMetaReadData* )
     805             : {
     806           0 :     COMPAT( rIStm );
     807           0 :     rIStm >> maRect >> maStartPt >> maEndPt;
     808           0 : }
     809             : 
     810             : // ========================================================================
     811             : 
     812           0 : IMPL_META_ACTION( Chord, META_CHORD_ACTION )
     813             : 
     814             : // ------------------------------------------------------------------------
     815             : 
     816           0 : MetaChordAction::MetaChordAction( const Rectangle& rRect,
     817             :                                   const Point& rStart, const Point& rEnd ) :
     818             :     MetaAction  ( META_CHORD_ACTION ),
     819             :     maRect      ( rRect ),
     820             :     maStartPt   ( rStart ),
     821           0 :     maEndPt     ( rEnd )
     822             : {
     823           0 : }
     824             : 
     825             : // ------------------------------------------------------------------------
     826             : 
     827           0 : void MetaChordAction::Execute( OutputDevice* pOut )
     828             : {
     829           0 :     pOut->DrawChord( maRect, maStartPt, maEndPt );
     830           0 : }
     831             : 
     832             : // ------------------------------------------------------------------------
     833             : 
     834           0 : MetaAction* MetaChordAction::Clone()
     835             : {
     836           0 :     MetaAction* pClone = (MetaAction*) new MetaChordAction( *this );
     837           0 :     pClone->ResetRefCount();
     838           0 :     return pClone;
     839             : }
     840             : 
     841             : // ------------------------------------------------------------------------
     842             : 
     843           0 : void MetaChordAction::Move( long nHorzMove, long nVertMove )
     844             : {
     845           0 :     maRect.Move(  nHorzMove, nVertMove );
     846           0 :     maStartPt.Move(  nHorzMove, nVertMove );
     847           0 :     maEndPt.Move(  nHorzMove, nVertMove );
     848           0 : }
     849             : 
     850             : // ------------------------------------------------------------------------
     851             : 
     852           0 : void MetaChordAction::Scale( double fScaleX, double fScaleY )
     853             : {
     854           0 :     ImplScaleRect( maRect, fScaleX, fScaleY );
     855           0 :     ImplScalePoint( maStartPt, fScaleX, fScaleY );
     856           0 :     ImplScalePoint( maEndPt, fScaleX, fScaleY );
     857           0 : }
     858             : 
     859             : // ------------------------------------------------------------------------
     860             : 
     861           0 : sal_Bool MetaChordAction::Compare( const MetaAction& rMetaAction ) const
     862             : {
     863           0 :     return ( maRect == ((MetaChordAction&)rMetaAction).maRect ) &&
     864           0 :            ( maStartPt == ((MetaChordAction&)rMetaAction).maStartPt ) &&
     865           0 :            ( maEndPt == ((MetaChordAction&)rMetaAction).maEndPt );
     866             : }
     867             : 
     868             : // ------------------------------------------------------------------------
     869             : 
     870           0 : void MetaChordAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
     871             : {
     872           0 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
     873           0 :     rOStm << maRect << maStartPt << maEndPt;
     874           0 : }
     875             : 
     876             : // ------------------------------------------------------------------------
     877             : 
     878           0 : void MetaChordAction::Read( SvStream& rIStm, ImplMetaReadData* )
     879             : {
     880           0 :     COMPAT( rIStm );
     881           0 :     rIStm >> maRect >> maStartPt >> maEndPt;
     882           0 : }
     883             : 
     884             : // ========================================================================
     885             : 
     886         330 : IMPL_META_ACTION( PolyLine, META_POLYLINE_ACTION )
     887             : 
     888             : // ------------------------------------------------------------------------
     889             : 
     890           0 : MetaPolyLineAction::MetaPolyLineAction( const Polygon& rPoly ) :
     891             :     MetaAction  ( META_POLYLINE_ACTION ),
     892           0 :     maPoly      ( rPoly )
     893             : {
     894           0 : }
     895             : 
     896             : // ------------------------------------------------------------------------
     897             : 
     898         165 : MetaPolyLineAction::MetaPolyLineAction( const Polygon& rPoly, const LineInfo& rLineInfo ) :
     899             :     MetaAction  ( META_POLYLINE_ACTION ),
     900             :     maLineInfo  ( rLineInfo ),
     901         165 :     maPoly      ( rPoly )
     902             : {
     903         165 : }
     904             : 
     905             : // ------------------------------------------------------------------------
     906             : 
     907           0 : void MetaPolyLineAction::Execute( OutputDevice* pOut )
     908             : {
     909           0 :     if( maLineInfo.IsDefault() )
     910           0 :         pOut->DrawPolyLine( maPoly );
     911             :     else
     912           0 :         pOut->DrawPolyLine( maPoly, maLineInfo );
     913           0 : }
     914             : 
     915             : // ------------------------------------------------------------------------
     916             : 
     917           0 : MetaAction* MetaPolyLineAction::Clone()
     918             : {
     919           0 :     MetaAction* pClone = (MetaAction*) new MetaPolyLineAction( *this );
     920           0 :     pClone->ResetRefCount();
     921           0 :     return pClone;
     922             : }
     923             : 
     924             : // ------------------------------------------------------------------------
     925             : 
     926           0 : void MetaPolyLineAction::Move( long nHorzMove, long nVertMove )
     927             : {
     928           0 :     maPoly.Move( nHorzMove, nVertMove );
     929           0 : }
     930             : 
     931             : // ------------------------------------------------------------------------
     932             : 
     933           0 : void MetaPolyLineAction::Scale( double fScaleX, double fScaleY )
     934             : {
     935           0 :     ImplScalePoly( maPoly, fScaleX, fScaleY );
     936           0 :     ImplScaleLineInfo( maLineInfo, fScaleX, fScaleY );
     937           0 : }
     938             : 
     939             : // ------------------------------------------------------------------------
     940             : 
     941           0 : sal_Bool MetaPolyLineAction::Compare( const MetaAction& rMetaAction ) const
     942             : {
     943           0 :     sal_Bool bIsEqual = sal_True;
     944           0 :     if ( maLineInfo != ((MetaPolyLineAction&)rMetaAction).maLineInfo )
     945           0 :         bIsEqual = sal_False;
     946             :     else
     947           0 :         bIsEqual = maPoly.IsEqual(((MetaPolyLineAction&)rMetaAction).maPoly );
     948           0 :     return bIsEqual;
     949             : 
     950             : }
     951             : 
     952             : // ------------------------------------------------------------------------
     953             : 
     954         276 : void MetaPolyLineAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
     955             : {
     956         276 :     WRITE_BASE_COMPAT( rOStm, 3, pData );
     957             : 
     958         276 :     Polygon aSimplePoly;
     959         276 :     maPoly.AdaptiveSubdivide( aSimplePoly );
     960             : 
     961         276 :     rOStm << aSimplePoly;                               // Version 1
     962         276 :     rOStm << maLineInfo;                                // Version 2
     963             : 
     964         276 :     sal_uInt8 bHasPolyFlags = maPoly.HasFlags();        // Version 3
     965         276 :     rOStm << bHasPolyFlags;
     966         276 :     if ( bHasPolyFlags )
     967           0 :         maPoly.Write( rOStm );
     968         276 : }
     969             : 
     970             : // ------------------------------------------------------------------------
     971             : 
     972           0 : void MetaPolyLineAction::Read( SvStream& rIStm, ImplMetaReadData* )
     973             : {
     974           0 :     COMPAT( rIStm );
     975             : 
     976             :     // Version 1
     977           0 :     rIStm >> maPoly;
     978             : 
     979             :     // Version 2
     980           0 :     if( aCompat.GetVersion() >= 2 )
     981           0 :         rIStm >> maLineInfo;
     982           0 :     if ( aCompat.GetVersion() >= 3 )
     983             :     {
     984             :         sal_uInt8 bHasPolyFlags;
     985           0 :         rIStm >> bHasPolyFlags;
     986           0 :         if ( bHasPolyFlags )
     987           0 :             maPoly.Read( rIStm );
     988           0 :     }
     989           0 : }
     990             : 
     991             : // ========================================================================
     992             : 
     993         126 : IMPL_META_ACTION( Polygon, META_POLYGON_ACTION )
     994             : 
     995             : // ------------------------------------------------------------------------
     996             : 
     997          69 : MetaPolygonAction::MetaPolygonAction( const Polygon& rPoly ) :
     998             :     MetaAction  ( META_POLYGON_ACTION ),
     999          69 :     maPoly      ( rPoly )
    1000             : {
    1001          69 : }
    1002             : 
    1003             : // ------------------------------------------------------------------------
    1004             : 
    1005           0 : void MetaPolygonAction::Execute( OutputDevice* pOut )
    1006             : {
    1007           0 :     pOut->DrawPolygon( maPoly );
    1008           0 : }
    1009             : 
    1010             : // ------------------------------------------------------------------------
    1011             : 
    1012           0 : MetaAction* MetaPolygonAction::Clone()
    1013             : {
    1014           0 :     MetaAction* pClone = (MetaAction*) new MetaPolygonAction( *this );
    1015           0 :     pClone->ResetRefCount();
    1016           0 :     return pClone;
    1017             : }
    1018             : 
    1019             : // ------------------------------------------------------------------------
    1020             : 
    1021           0 : void MetaPolygonAction::Move( long nHorzMove, long nVertMove )
    1022             : {
    1023           0 :     maPoly.Move( nHorzMove, nVertMove );
    1024           0 : }
    1025             : 
    1026             : // ------------------------------------------------------------------------
    1027             : 
    1028           0 : void MetaPolygonAction::Scale( double fScaleX, double fScaleY )
    1029             : {
    1030           0 :     ImplScalePoly( maPoly, fScaleX, fScaleY );
    1031           0 : }
    1032             : 
    1033             : // ------------------------------------------------------------------------
    1034             : 
    1035           0 : sal_Bool MetaPolygonAction::Compare( const MetaAction& rMetaAction ) const
    1036             : {
    1037           0 :     return maPoly.IsEqual(((MetaPolygonAction&)rMetaAction).maPoly );
    1038             : }
    1039             : 
    1040             : // ------------------------------------------------------------------------
    1041             : 
    1042         108 : void MetaPolygonAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    1043             : {
    1044         108 :     WRITE_BASE_COMPAT( rOStm, 2, pData );
    1045             : 
    1046         108 :     Polygon aSimplePoly;                            // Version 1
    1047         108 :     maPoly.AdaptiveSubdivide( aSimplePoly );
    1048         108 :     rOStm << aSimplePoly;
    1049             : 
    1050         108 :     sal_uInt8 bHasPolyFlags = maPoly.HasFlags();    // Version 2
    1051         108 :     rOStm << bHasPolyFlags;
    1052         108 :     if ( bHasPolyFlags )
    1053          12 :         maPoly.Write( rOStm );
    1054         108 : }
    1055             : 
    1056             : // ------------------------------------------------------------------------
    1057             : 
    1058           0 : void MetaPolygonAction::Read( SvStream& rIStm, ImplMetaReadData* )
    1059             : {
    1060           0 :     COMPAT( rIStm );
    1061             : 
    1062           0 :     rIStm >> maPoly;                    // Version 1
    1063             : 
    1064           0 :     if( aCompat.GetVersion() >= 2 )     // Version 2
    1065             :     {
    1066             :         sal_uInt8 bHasPolyFlags;
    1067           0 :         rIStm >> bHasPolyFlags;
    1068           0 :         if ( bHasPolyFlags )
    1069           0 :             maPoly.Read( rIStm );
    1070           0 :     }
    1071           0 : }
    1072             : 
    1073             : // ========================================================================
    1074             : 
    1075         162 : IMPL_META_ACTION( PolyPolygon, META_POLYPOLYGON_ACTION )
    1076             : 
    1077             : // ------------------------------------------------------------------------
    1078             : 
    1079          92 : MetaPolyPolygonAction::MetaPolyPolygonAction( const PolyPolygon& rPolyPoly ) :
    1080             :     MetaAction  ( META_POLYPOLYGON_ACTION ),
    1081          92 :     maPolyPoly  ( rPolyPoly )
    1082             : {
    1083          92 : }
    1084             : 
    1085             : // ------------------------------------------------------------------------
    1086             : 
    1087           0 : void MetaPolyPolygonAction::Execute( OutputDevice* pOut )
    1088             : {
    1089           0 :     pOut->DrawPolyPolygon( maPolyPoly );
    1090           0 : }
    1091             : 
    1092             : // ------------------------------------------------------------------------
    1093             : 
    1094           0 : MetaAction* MetaPolyPolygonAction::Clone()
    1095             : {
    1096           0 :     MetaAction* pClone = (MetaAction*) new MetaPolyPolygonAction( *this );
    1097           0 :     pClone->ResetRefCount();
    1098           0 :     return pClone;
    1099             : }
    1100             : 
    1101             : // ------------------------------------------------------------------------
    1102             : 
    1103           0 : void MetaPolyPolygonAction::Move( long nHorzMove, long nVertMove )
    1104             : {
    1105           0 :     maPolyPoly.Move( nHorzMove, nVertMove );
    1106           0 : }
    1107             : 
    1108             : // ------------------------------------------------------------------------
    1109             : 
    1110           0 : void MetaPolyPolygonAction::Scale( double fScaleX, double fScaleY )
    1111             : {
    1112           0 :     for( sal_uInt16 i = 0, nCount = maPolyPoly.Count(); i < nCount; i++ )
    1113           0 :         ImplScalePoly( maPolyPoly[ i ], fScaleX, fScaleY );
    1114           0 : }
    1115             : 
    1116             : // ------------------------------------------------------------------------
    1117             : 
    1118           0 : sal_Bool MetaPolyPolygonAction::Compare( const MetaAction& rMetaAction ) const
    1119             : {
    1120           0 :     return maPolyPoly.IsEqual(((MetaPolyPolygonAction&)rMetaAction).maPolyPoly );
    1121             : }
    1122             : 
    1123             : // ------------------------------------------------------------------------
    1124             : 
    1125          22 : void MetaPolyPolygonAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    1126             : {
    1127          22 :     WRITE_BASE_COMPAT( rOStm, 2, pData );
    1128             : 
    1129          22 :     sal_uInt16 nNumberOfComplexPolygons = 0;
    1130          22 :     sal_uInt16 i, nPolyCount = maPolyPoly.Count();
    1131             : 
    1132          22 :     Polygon aSimplePoly;                                // Version 1
    1133          22 :     rOStm << nPolyCount;
    1134          60 :     for ( i = 0; i < nPolyCount; i++ )
    1135             :     {
    1136          38 :         const Polygon& rPoly = maPolyPoly.GetObject( i );
    1137          38 :         if ( rPoly.HasFlags() )
    1138          20 :             nNumberOfComplexPolygons++;
    1139          38 :         rPoly.AdaptiveSubdivide( aSimplePoly );
    1140          38 :         rOStm << aSimplePoly;
    1141             :     }
    1142             : 
    1143          22 :     rOStm << nNumberOfComplexPolygons;                  // Version 2
    1144          48 :     for ( i = 0; nNumberOfComplexPolygons && ( i < nPolyCount ); i++ )
    1145             :     {
    1146          26 :         const Polygon& rPoly = maPolyPoly.GetObject( i );
    1147          26 :         if ( rPoly.HasFlags() )
    1148             :         {
    1149          20 :             rOStm << i;
    1150          20 :             rPoly.Write( rOStm );
    1151             : 
    1152          20 :             nNumberOfComplexPolygons--;
    1153             :         }
    1154          22 :     }
    1155          22 : }
    1156             : 
    1157             : // ------------------------------------------------------------------------
    1158             : 
    1159           0 : void MetaPolyPolygonAction::Read( SvStream& rIStm, ImplMetaReadData* )
    1160             : {
    1161           0 :     COMPAT( rIStm );
    1162           0 :     rIStm >> maPolyPoly;                // Version 1
    1163             : 
    1164           0 :     if ( aCompat.GetVersion() >= 2 )    // Version 2
    1165             :     {
    1166             :         sal_uInt16 i, nIndex, nNumberOfComplexPolygons;
    1167           0 :         rIStm >> nNumberOfComplexPolygons;
    1168           0 :         for ( i = 0; i < nNumberOfComplexPolygons; i++ )
    1169             :         {
    1170           0 :             rIStm >> nIndex;
    1171           0 :             Polygon aPoly;
    1172           0 :             aPoly.Read( rIStm );
    1173           0 :             maPolyPoly.Replace( aPoly, nIndex );
    1174           0 :         }
    1175           0 :     }
    1176           0 : }
    1177             : 
    1178             : // ========================================================================
    1179             : 
    1180           0 : IMPL_META_ACTION( Text, META_TEXT_ACTION )
    1181             : 
    1182             : // ------------------------------------------------------------------------
    1183             : 
    1184           0 : MetaTextAction::MetaTextAction( const Point& rPt, const rtl::OUString& rStr,
    1185             :                                 sal_uInt16 nIndex, sal_uInt16 nLen ) :
    1186             :     MetaAction  ( META_TEXT_ACTION ),
    1187             :     maPt        ( rPt ),
    1188             :     maStr       ( rStr ),
    1189             :     mnIndex     ( nIndex ),
    1190           0 :     mnLen       ( nLen )
    1191             : {
    1192           0 : }
    1193             : 
    1194             : // ------------------------------------------------------------------------
    1195             : 
    1196           0 : void MetaTextAction::Execute( OutputDevice* pOut )
    1197             : {
    1198           0 :     pOut->DrawText( maPt, maStr, mnIndex, mnLen );
    1199           0 : }
    1200             : 
    1201             : // ------------------------------------------------------------------------
    1202             : 
    1203           0 : MetaAction* MetaTextAction::Clone()
    1204             : {
    1205           0 :     MetaAction* pClone = (MetaAction*) new MetaTextAction( *this );
    1206           0 :     pClone->ResetRefCount();
    1207           0 :     return pClone;
    1208             : }
    1209             : 
    1210             : // ------------------------------------------------------------------------
    1211             : 
    1212           0 : void MetaTextAction::Move( long nHorzMove, long nVertMove )
    1213             : {
    1214           0 :     maPt.Move( nHorzMove, nVertMove );
    1215           0 : }
    1216             : 
    1217             : // ------------------------------------------------------------------------
    1218             : 
    1219           0 : void MetaTextAction::Scale( double fScaleX, double fScaleY )
    1220             : {
    1221           0 :     ImplScalePoint( maPt, fScaleX, fScaleY );
    1222           0 : }
    1223             : 
    1224             : // ------------------------------------------------------------------------
    1225             : 
    1226           0 : sal_Bool MetaTextAction::Compare( const MetaAction& rMetaAction ) const
    1227             : {
    1228           0 :     return ( maPt == ((MetaTextAction&)rMetaAction).maPt ) &&
    1229           0 :            ( maStr == ((MetaTextAction&)rMetaAction).maStr ) &&
    1230             :            ( mnIndex == ((MetaTextAction&)rMetaAction).mnIndex ) &&
    1231           0 :            ( mnLen == ((MetaTextAction&)rMetaAction).mnLen );
    1232             : }
    1233             : 
    1234             : // ------------------------------------------------------------------------
    1235             : 
    1236           0 : void MetaTextAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    1237             : {
    1238           0 :     WRITE_BASE_COMPAT( rOStm, 2, pData );
    1239           0 :     rOStm   << maPt;
    1240           0 :     rOStm.WriteUniOrByteString( maStr, pData->meActualCharSet );
    1241           0 :     rOStm   << mnIndex;
    1242           0 :     rOStm   << mnLen;
    1243             : 
    1244           0 :     write_lenPrefixed_uInt16s_FromOUString<sal_uInt16>(rOStm, maStr); // version 2
    1245           0 : }
    1246             : 
    1247             : // ------------------------------------------------------------------------
    1248             : 
    1249           0 : void MetaTextAction::Read( SvStream& rIStm, ImplMetaReadData* pData )
    1250             : {
    1251           0 :     COMPAT( rIStm );
    1252           0 :     rIStm   >> maPt;
    1253           0 :     maStr = rIStm.ReadUniOrByteString(pData->meActualCharSet);
    1254           0 :     rIStm   >> mnIndex;
    1255           0 :     rIStm   >> mnLen;
    1256             : 
    1257           0 :     if ( aCompat.GetVersion() >= 2 )                            // Version 2
    1258           0 :         maStr = read_lenPrefixed_uInt16s_ToOUString<sal_uInt16>(rIStm);
    1259           0 : }
    1260             : 
    1261             : // ========================================================================
    1262             : 
    1263           2 : MetaTextArrayAction::MetaTextArrayAction() :
    1264             :     MetaAction  ( META_TEXTARRAY_ACTION ),
    1265             :     mpDXAry     ( NULL ),
    1266             :     mnIndex     ( 0 ),
    1267           2 :     mnLen       ( 0 )
    1268             : {
    1269           2 : }
    1270             : 
    1271             : // ------------------------------------------------------------------------
    1272             : 
    1273           3 : MetaTextArrayAction::MetaTextArrayAction( const MetaTextArrayAction& rAction ) :
    1274             :     MetaAction  ( META_TEXTARRAY_ACTION ),
    1275             :     maStartPt   ( rAction.maStartPt ),
    1276             :     maStr       ( rAction.maStr ),
    1277             :     mnIndex     ( rAction.mnIndex ),
    1278           3 :     mnLen       ( rAction.mnLen )
    1279             : {
    1280           3 :     if( rAction.mpDXAry )
    1281             :     {
    1282           3 :         const sal_uLong nAryLen = mnLen;
    1283             : 
    1284           3 :         mpDXAry = new sal_Int32[ nAryLen ];
    1285           3 :         memcpy( mpDXAry, rAction.mpDXAry, nAryLen * sizeof( sal_Int32 ) );
    1286             :     }
    1287             :     else
    1288           0 :         mpDXAry = NULL;
    1289           3 : }
    1290             : 
    1291             : // ------------------------------------------------------------------------
    1292             : 
    1293          76 : MetaTextArrayAction::MetaTextArrayAction( const Point& rStartPt,
    1294             :                                           const rtl::OUString& rStr,
    1295             :                                           const sal_Int32* pDXAry,
    1296             :                                           sal_uInt16 nIndex,
    1297             :                                           sal_uInt16 nLen ) :
    1298             :     MetaAction  ( META_TEXTARRAY_ACTION ),
    1299             :     maStartPt   ( rStartPt ),
    1300             :     maStr       ( rStr ),
    1301             :     mnIndex     ( nIndex ),
    1302          76 :     mnLen       ( ( nLen == STRING_LEN ) ? rStr.getLength() : nLen )
    1303             : {
    1304          76 :     const sal_uLong nAryLen = pDXAry ? mnLen : 0;
    1305             : 
    1306          76 :     if( nAryLen )
    1307             :     {
    1308          76 :         mpDXAry = new sal_Int32[ nAryLen ];
    1309          76 :         memcpy( mpDXAry, pDXAry, nAryLen * sizeof( sal_Int32 ) );
    1310             :     }
    1311             :     else
    1312           0 :         mpDXAry = NULL;
    1313          76 : }
    1314             : 
    1315             : // ------------------------------------------------------------------------
    1316             : 
    1317         219 : MetaTextArrayAction::~MetaTextArrayAction()
    1318             : {
    1319          73 :     delete[] mpDXAry;
    1320         146 : }
    1321             : 
    1322             : // ------------------------------------------------------------------------
    1323             : 
    1324          12 : void MetaTextArrayAction::Execute( OutputDevice* pOut )
    1325             : {
    1326          12 :     pOut->DrawTextArray( maStartPt, maStr, mpDXAry, mnIndex, mnLen );
    1327          12 : }
    1328             : 
    1329             : // ------------------------------------------------------------------------
    1330             : 
    1331           3 : MetaAction* MetaTextArrayAction::Clone()
    1332             : {
    1333           3 :     MetaAction* pClone = (MetaAction*) new MetaTextArrayAction( *this );
    1334           3 :     pClone->ResetRefCount();
    1335           3 :     return pClone;
    1336             : }
    1337             : 
    1338             : // ------------------------------------------------------------------------
    1339             : 
    1340           0 : void MetaTextArrayAction::Move( long nHorzMove, long nVertMove )
    1341             : {
    1342           0 :     maStartPt.Move( nHorzMove, nVertMove );
    1343           0 : }
    1344             : 
    1345             : // ------------------------------------------------------------------------
    1346             : 
    1347           3 : void MetaTextArrayAction::Scale( double fScaleX, double fScaleY )
    1348             : {
    1349           3 :     ImplScalePoint( maStartPt, fScaleX, fScaleY );
    1350             : 
    1351           3 :     if ( mpDXAry && mnLen )
    1352             :     {
    1353          21 :         for ( sal_uInt16 i = 0, nCount = mnLen; i < nCount; i++ )
    1354          18 :             mpDXAry[ i ] = FRound( mpDXAry[ i ] * fabs(fScaleX) );
    1355             :     }
    1356           3 : }
    1357             : 
    1358             : // ------------------------------------------------------------------------
    1359             : 
    1360           0 : sal_Bool MetaTextArrayAction::Compare( const MetaAction& rMetaAction ) const
    1361             : {
    1362           0 :     return ( maStartPt == ((MetaTextArrayAction&)rMetaAction).maStartPt ) &&
    1363           0 :            ( maStr == ((MetaTextArrayAction&)rMetaAction).maStr ) &&
    1364             :            ( mnIndex == ((MetaTextArrayAction&)rMetaAction).mnIndex ) &&
    1365             :            ( mnLen == ((MetaTextArrayAction&)rMetaAction).mnLen ) &&
    1366           0 :            ( memcmp( mpDXAry, ((MetaTextArrayAction&)rMetaAction).mpDXAry, mnLen ) == 0 );
    1367             : }
    1368             : 
    1369             : // ------------------------------------------------------------------------
    1370             : 
    1371         141 : void MetaTextArrayAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    1372             : {
    1373         141 :     const sal_uInt32 nAryLen = mpDXAry ? mnLen : 0;
    1374             : 
    1375         141 :     WRITE_BASE_COMPAT( rOStm, 2, pData );
    1376         141 :     rOStm   << maStartPt;
    1377         141 :     rOStm.WriteUniOrByteString( maStr, pData->meActualCharSet );
    1378         141 :     rOStm   << mnIndex;
    1379         141 :     rOStm   << mnLen;
    1380         141 :     rOStm   << nAryLen;
    1381             : 
    1382         761 :     for( sal_uLong i = 0UL; i < nAryLen; i++ )
    1383         620 :         rOStm << mpDXAry[ i ];
    1384             : 
    1385         141 :     write_lenPrefixed_uInt16s_FromOUString<sal_uInt16>(rOStm, maStr); // version 2
    1386         141 : }
    1387             : 
    1388             : // ------------------------------------------------------------------------
    1389             : 
    1390           2 : void MetaTextArrayAction::Read( SvStream& rIStm, ImplMetaReadData* pData )
    1391             : {
    1392             :     sal_uInt32 nAryLen;
    1393             : 
    1394           2 :     delete[] mpDXAry;
    1395             : 
    1396           2 :     COMPAT( rIStm );
    1397           2 :     rIStm   >> maStartPt;
    1398           2 :     maStr = rIStm.ReadUniOrByteString(pData->meActualCharSet);
    1399           2 :     rIStm   >> mnIndex;
    1400           2 :     rIStm   >> mnLen;
    1401           2 :     rIStm   >> nAryLen;
    1402             : 
    1403           2 :     if ( mnIndex + mnLen > maStr.getLength() )
    1404             :     {
    1405           0 :         mnIndex = 0;
    1406           0 :         mpDXAry = 0;
    1407             :         return;
    1408             :     }
    1409             : 
    1410           2 :     if( nAryLen )
    1411             :     {
    1412             :         // #i9762#, #106172# Ensure that DX array is at least mnLen entries long
    1413           2 :         if ( mnLen >= nAryLen )
    1414             :         {
    1415           2 :             mpDXAry = new (std::nothrow)sal_Int32[ mnLen ];
    1416           2 :             if ( mpDXAry )
    1417             :             {
    1418             :                    sal_uLong i;
    1419           6 :                 for( i = 0UL; i < nAryLen; i++ )
    1420           4 :                     rIStm >> mpDXAry[ i ];
    1421             : 
    1422             :                 // #106172# setup remainder
    1423           2 :                 for( ; i < mnLen; i++ )
    1424           0 :                     mpDXAry[ i ] = 0;
    1425             :             }
    1426             :         }
    1427             :         else
    1428             :         {
    1429           0 :             mpDXAry = NULL;
    1430             :             return;
    1431             :         }
    1432             :     }
    1433             :     else
    1434           0 :         mpDXAry = NULL;
    1435             : 
    1436           2 :     if ( aCompat.GetVersion() >= 2 )                            // Version 2
    1437             :     {
    1438           2 :         maStr = read_lenPrefixed_uInt16s_ToOUString<sal_uInt16>(rIStm);
    1439             : 
    1440           2 :         if ( mnIndex + mnLen > maStr.getLength() )
    1441             :         {
    1442           0 :             mnIndex = 0;
    1443           0 :             delete[] mpDXAry, mpDXAry = NULL;
    1444             :         }
    1445           2 :     }
    1446             : }
    1447             : 
    1448             : // ========================================================================
    1449             : 
    1450      102538 : IMPL_META_ACTION( StretchText, META_STRETCHTEXT_ACTION )
    1451             : 
    1452             : // ------------------------------------------------------------------------
    1453             : 
    1454       20768 : MetaStretchTextAction::MetaStretchTextAction( const Point& rPt, sal_uInt32 nWidth,
    1455             :                                               const rtl::OUString& rStr,
    1456             :                                               sal_uInt16 nIndex, sal_uInt16 nLen ) :
    1457             :     MetaAction  ( META_STRETCHTEXT_ACTION ),
    1458             :     maPt        ( rPt ),
    1459             :     maStr       ( rStr ),
    1460             :     mnWidth     ( nWidth ),
    1461             :     mnIndex     ( nIndex ),
    1462       20768 :     mnLen       ( nLen )
    1463             : {
    1464       20768 : }
    1465             : 
    1466             : // ------------------------------------------------------------------------
    1467             : 
    1468        1487 : void MetaStretchTextAction::Execute( OutputDevice* pOut )
    1469             : {
    1470        1487 :     pOut->DrawStretchText( maPt, mnWidth, maStr, mnIndex, mnLen );
    1471        1487 : }
    1472             : 
    1473             : // ------------------------------------------------------------------------
    1474             : 
    1475           0 : MetaAction* MetaStretchTextAction::Clone()
    1476             : {
    1477           0 :     MetaAction* pClone = (MetaAction*) new MetaStretchTextAction( *this );
    1478           0 :     pClone->ResetRefCount();
    1479           0 :     return pClone;
    1480             : }
    1481             : 
    1482             : // ------------------------------------------------------------------------
    1483             : 
    1484           0 : void MetaStretchTextAction::Move( long nHorzMove, long nVertMove )
    1485             : {
    1486           0 :     maPt.Move( nHorzMove, nVertMove );
    1487           0 : }
    1488             : 
    1489             : // ------------------------------------------------------------------------
    1490             : 
    1491           0 : void MetaStretchTextAction::Scale( double fScaleX, double fScaleY )
    1492             : {
    1493           0 :     ImplScalePoint( maPt, fScaleX, fScaleY );
    1494           0 :     mnWidth = (sal_uLong)FRound( mnWidth * fabs(fScaleX) );
    1495           0 : }
    1496             : 
    1497             : // ------------------------------------------------------------------------
    1498             : 
    1499           0 : sal_Bool MetaStretchTextAction::Compare( const MetaAction& rMetaAction ) const
    1500             : {
    1501           0 :     return ( maPt == ((MetaStretchTextAction&)rMetaAction).maPt ) &&
    1502           0 :            ( maStr == ((MetaStretchTextAction&)rMetaAction).maStr ) &&
    1503             :            ( mnWidth == ((MetaStretchTextAction&)rMetaAction).mnWidth ) &&
    1504             :            ( mnIndex == ((MetaStretchTextAction&)rMetaAction).mnIndex ) &&
    1505           0 :            ( mnLen == ((MetaStretchTextAction&)rMetaAction).mnLen );
    1506             : }
    1507             : 
    1508             : // ------------------------------------------------------------------------
    1509             : 
    1510       22066 : void MetaStretchTextAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    1511             : {
    1512       22066 :     WRITE_BASE_COMPAT( rOStm, 2, pData );
    1513       22066 :     rOStm   << maPt;
    1514       22066 :     rOStm.WriteUniOrByteString( maStr, pData->meActualCharSet );
    1515       22066 :     rOStm   << mnWidth;
    1516       22066 :     rOStm   << mnIndex;
    1517       22066 :     rOStm   << mnLen;
    1518             : 
    1519       22066 :     write_lenPrefixed_uInt16s_FromOUString<sal_uInt16>(rOStm, maStr); // version 2
    1520       22066 : }
    1521             : 
    1522             : // ------------------------------------------------------------------------
    1523             : 
    1524       20768 : void MetaStretchTextAction::Read( SvStream& rIStm, ImplMetaReadData* pData )
    1525             : {
    1526       20768 :     COMPAT( rIStm );
    1527       20768 :     rIStm   >> maPt;
    1528       20768 :     maStr = rIStm.ReadUniOrByteString(pData->meActualCharSet);
    1529       20768 :     rIStm   >> mnWidth;
    1530       20768 :     rIStm   >> mnIndex;
    1531       20768 :     rIStm   >> mnLen;
    1532             : 
    1533       20768 :     if ( aCompat.GetVersion() >= 2 )                            // Version 2
    1534       20768 :         maStr = read_lenPrefixed_uInt16s_ToOUString<sal_uInt16>(rIStm);
    1535       20768 : }
    1536             : 
    1537             : // ========================================================================
    1538             : 
    1539           0 : IMPL_META_ACTION( TextRect, META_TEXTRECT_ACTION )
    1540             : 
    1541             : // ------------------------------------------------------------------------
    1542             : 
    1543           0 : MetaTextRectAction::MetaTextRectAction( const Rectangle& rRect,
    1544             :                                         const rtl::OUString& rStr, sal_uInt16 nStyle ) :
    1545             :     MetaAction  ( META_TEXTRECT_ACTION ),
    1546             :     maRect      ( rRect ),
    1547             :     maStr       ( rStr ),
    1548           0 :     mnStyle     ( nStyle )
    1549             : {
    1550           0 : }
    1551             : 
    1552             : // ------------------------------------------------------------------------
    1553             : 
    1554           0 : void MetaTextRectAction::Execute( OutputDevice* pOut )
    1555             : {
    1556           0 :     pOut->DrawText( maRect, maStr, mnStyle );
    1557           0 : }
    1558             : 
    1559             : // ------------------------------------------------------------------------
    1560             : 
    1561           0 : MetaAction* MetaTextRectAction::Clone()
    1562             : {
    1563           0 :     MetaAction* pClone = (MetaAction*) new MetaTextRectAction( *this );
    1564           0 :     pClone->ResetRefCount();
    1565           0 :     return pClone;
    1566             : }
    1567             : 
    1568             : // ------------------------------------------------------------------------
    1569             : 
    1570           0 : void MetaTextRectAction::Move( long nHorzMove, long nVertMove )
    1571             : {
    1572           0 :     maRect.Move( nHorzMove, nVertMove );
    1573           0 : }
    1574             : 
    1575             : // ------------------------------------------------------------------------
    1576             : 
    1577           0 : void MetaTextRectAction::Scale( double fScaleX, double fScaleY )
    1578             : {
    1579           0 :     ImplScaleRect( maRect, fScaleX, fScaleY );
    1580           0 : }
    1581             : 
    1582             : // ------------------------------------------------------------------------
    1583             : 
    1584           0 : sal_Bool MetaTextRectAction::Compare( const MetaAction& rMetaAction ) const
    1585             : {
    1586           0 :     return ( maRect == ((MetaTextRectAction&)rMetaAction).maRect ) &&
    1587           0 :            ( maStr == ((MetaTextRectAction&)rMetaAction).maStr ) &&
    1588           0 :            ( mnStyle == ((MetaTextRectAction&)rMetaAction).mnStyle );
    1589             : }
    1590             : 
    1591             : // ------------------------------------------------------------------------
    1592             : 
    1593           0 : void MetaTextRectAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    1594             : {
    1595           0 :     WRITE_BASE_COMPAT( rOStm, 2, pData );
    1596           0 :     rOStm   << maRect;
    1597           0 :     rOStm.WriteUniOrByteString( maStr, pData->meActualCharSet );
    1598           0 :     rOStm   << mnStyle;
    1599             : 
    1600           0 :     write_lenPrefixed_uInt16s_FromOUString<sal_uInt16>(rOStm, maStr); // version 2
    1601           0 : }
    1602             : 
    1603             : // ------------------------------------------------------------------------
    1604             : 
    1605           0 : void MetaTextRectAction::Read( SvStream& rIStm, ImplMetaReadData* pData )
    1606             : {
    1607           0 :     COMPAT( rIStm );
    1608           0 :     rIStm   >> maRect;
    1609           0 :     maStr = rIStm.ReadUniOrByteString(pData->meActualCharSet);
    1610           0 :     rIStm   >> mnStyle;
    1611             : 
    1612           0 :     if ( aCompat.GetVersion() >= 2 )                            // Version 2
    1613           0 :         maStr = read_lenPrefixed_uInt16s_ToOUString<sal_uInt16>(rIStm);
    1614           0 : }
    1615             : 
    1616             : // ========================================================================
    1617             : 
    1618           0 : IMPL_META_ACTION( TextLine, META_TEXTLINE_ACTION )
    1619             : 
    1620             : // ------------------------------------------------------------------------
    1621             : 
    1622           0 : MetaTextLineAction::MetaTextLineAction( const Point& rPos, long nWidth,
    1623             :                                         FontStrikeout eStrikeout,
    1624             :                                         FontUnderline eUnderline,
    1625             :                                         FontUnderline eOverline ) :
    1626             :     MetaAction  ( META_TEXTLINE_ACTION ),
    1627             :     maPos       ( rPos ),
    1628             :     mnWidth     ( nWidth ),
    1629             :     meStrikeout ( eStrikeout ),
    1630             :     meUnderline ( eUnderline ),
    1631           0 :     meOverline  ( eOverline )
    1632             : {
    1633           0 : }
    1634             : 
    1635             : // ------------------------------------------------------------------------
    1636             : 
    1637           0 : void MetaTextLineAction::Execute( OutputDevice* pOut )
    1638             : {
    1639           0 :     pOut->DrawTextLine( maPos, mnWidth, meStrikeout, meUnderline, meOverline );
    1640           0 : }
    1641             : 
    1642             : // ------------------------------------------------------------------------
    1643             : 
    1644           0 : MetaAction* MetaTextLineAction::Clone()
    1645             : {
    1646           0 :     MetaAction* pClone = (MetaAction*)new MetaTextLineAction( *this );
    1647           0 :     pClone->ResetRefCount();
    1648           0 :     return pClone;
    1649             : }
    1650             : 
    1651             : // ------------------------------------------------------------------------
    1652             : 
    1653           0 : void MetaTextLineAction::Move( long nHorzMove, long nVertMove )
    1654             : {
    1655           0 :     maPos.Move( nHorzMove, nVertMove );
    1656           0 : }
    1657             : 
    1658             : // ------------------------------------------------------------------------
    1659             : 
    1660           0 : void MetaTextLineAction::Scale( double fScaleX, double fScaleY )
    1661             : {
    1662           0 :     ImplScalePoint( maPos, fScaleX, fScaleY );
    1663           0 :     mnWidth = FRound( mnWidth * fabs(fScaleX) );
    1664           0 : }
    1665             : 
    1666             : // ------------------------------------------------------------------------
    1667             : 
    1668           0 : sal_Bool MetaTextLineAction::Compare( const MetaAction& rMetaAction ) const
    1669             : {
    1670           0 :     return ( maPos == ((MetaTextLineAction&)rMetaAction).maPos ) &&
    1671             :            ( mnWidth == ((MetaTextLineAction&)rMetaAction).mnWidth ) &&
    1672             :            ( meStrikeout == ((MetaTextLineAction&)rMetaAction).meStrikeout ) &&
    1673             :            ( meUnderline == ((MetaTextLineAction&)rMetaAction).meUnderline ) &&
    1674           0 :            ( meOverline  == ((MetaTextLineAction&)rMetaAction).meOverline );
    1675             : }
    1676             : 
    1677             : // ------------------------------------------------------------------------
    1678             : 
    1679           0 : void MetaTextLineAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    1680             : {
    1681           0 :     WRITE_BASE_COMPAT( rOStm, 2, pData );
    1682             : 
    1683             :     //#fdo39428 SvStream no longer supports operator<<(long)
    1684           0 :     rOStm << maPos;
    1685           0 :     rOStm << sal::static_int_cast<sal_Int32>(mnWidth);
    1686           0 :     rOStm << static_cast<sal_uInt32>(meStrikeout);
    1687           0 :     rOStm << static_cast<sal_uInt32>(meUnderline);
    1688             :     // new in version 2
    1689           0 :     rOStm << static_cast<sal_uInt32>(meOverline);
    1690           0 : }
    1691             : 
    1692             : // ------------------------------------------------------------------------
    1693             : 
    1694           0 : void MetaTextLineAction::Read( SvStream& rIStm, ImplMetaReadData* )
    1695             : {
    1696           0 :     COMPAT( rIStm );
    1697             : 
    1698             :     //#fdo39428 SvStream no longer supports operator>>(long&)
    1699             :     sal_uInt32 nTemp;
    1700             :     sal_Int32 nTemp2;
    1701           0 :     rIStm >> maPos;
    1702           0 :     rIStm >> nTemp2;
    1703           0 :     mnWidth = nTemp2;
    1704           0 :     rIStm >> nTemp;
    1705           0 :     meStrikeout = (FontStrikeout)nTemp;
    1706           0 :     rIStm >> nTemp;
    1707           0 :     meUnderline = (FontUnderline)nTemp;
    1708           0 :     if ( aCompat.GetVersion() >= 2 ) {
    1709           0 :         rIStm >> nTemp;
    1710           0 :         meUnderline = (FontUnderline)nTemp;
    1711           0 :     }
    1712           0 : }
    1713             : 
    1714             : // ========================================================================
    1715             : 
    1716           0 : IMPL_META_ACTION( Bmp, META_BMP_ACTION )
    1717             : 
    1718             : // ------------------------------------------------------------------------
    1719             : 
    1720           0 : MetaBmpAction::MetaBmpAction( const Point& rPt, const Bitmap& rBmp ) :
    1721             :     MetaAction  ( META_BMP_ACTION ),
    1722             :     maBmp       ( rBmp ),
    1723           0 :     maPt        ( rPt )
    1724             : {
    1725           0 : }
    1726             : 
    1727             : // ------------------------------------------------------------------------
    1728             : 
    1729           0 : void MetaBmpAction::Execute( OutputDevice* pOut )
    1730             : {
    1731           0 :     pOut->DrawBitmap( maPt, maBmp );
    1732           0 : }
    1733             : 
    1734             : // ------------------------------------------------------------------------
    1735             : 
    1736           0 : MetaAction* MetaBmpAction::Clone()
    1737             : {
    1738           0 :     MetaAction* pClone = (MetaAction*) new MetaBmpAction( *this );
    1739           0 :     pClone->ResetRefCount();
    1740           0 :     return pClone;
    1741             : }
    1742             : 
    1743             : // ------------------------------------------------------------------------
    1744             : 
    1745           0 : void MetaBmpAction::Move( long nHorzMove, long nVertMove )
    1746             : {
    1747           0 :     maPt.Move( nHorzMove, nVertMove );
    1748           0 : }
    1749             : 
    1750             : // ------------------------------------------------------------------------
    1751             : 
    1752           0 : void MetaBmpAction::Scale( double fScaleX, double fScaleY )
    1753             : {
    1754           0 :     ImplScalePoint( maPt, fScaleX, fScaleY );
    1755           0 : }
    1756             : 
    1757             : // ------------------------------------------------------------------------
    1758             : 
    1759           0 : sal_Bool MetaBmpAction::Compare( const MetaAction& rMetaAction ) const
    1760             : {
    1761           0 :     return maBmp.IsEqual(((MetaBmpAction&)rMetaAction).maBmp ) &&
    1762           0 :            ( maPt == ((MetaBmpAction&)rMetaAction).maPt );
    1763             : }
    1764             : 
    1765             : // ------------------------------------------------------------------------
    1766             : 
    1767           0 : void MetaBmpAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    1768             : {
    1769           0 :     if( !!maBmp )
    1770             :     {
    1771           0 :         WRITE_BASE_COMPAT( rOStm, 1, pData );
    1772           0 :         rOStm << maBmp << maPt;
    1773             :     }
    1774           0 : }
    1775             : 
    1776             : // ------------------------------------------------------------------------
    1777             : 
    1778           0 : void MetaBmpAction::Read( SvStream& rIStm, ImplMetaReadData* )
    1779             : {
    1780           0 :     COMPAT( rIStm );
    1781           0 :     rIStm >> maBmp >> maPt;
    1782           0 : }
    1783             : 
    1784             : // ========================================================================
    1785             : 
    1786          16 : IMPL_META_ACTION( BmpScale, META_BMPSCALE_ACTION )
    1787             : 
    1788             : // ------------------------------------------------------------------------
    1789             : 
    1790          10 : MetaBmpScaleAction::MetaBmpScaleAction( const Point& rPt, const Size& rSz,
    1791             :                                         const Bitmap& rBmp ) :
    1792             :     MetaAction  ( META_BMPSCALE_ACTION ),
    1793             :     maBmp       ( rBmp ),
    1794             :     maPt        ( rPt ),
    1795          10 :     maSz        ( rSz )
    1796             : {
    1797          10 : }
    1798             : 
    1799             : // ------------------------------------------------------------------------
    1800             : 
    1801           0 : void MetaBmpScaleAction::Execute( OutputDevice* pOut )
    1802             : {
    1803           0 :     pOut->DrawBitmap( maPt, maSz, maBmp );
    1804           0 : }
    1805             : 
    1806             : // ------------------------------------------------------------------------
    1807             : 
    1808           0 : MetaAction* MetaBmpScaleAction::Clone()
    1809             : {
    1810           0 :     MetaAction* pClone = (MetaAction*) new MetaBmpScaleAction( *this );
    1811           0 :     pClone->ResetRefCount();
    1812           0 :     return pClone;
    1813             : }
    1814             : 
    1815             : // ------------------------------------------------------------------------
    1816             : 
    1817           0 : void MetaBmpScaleAction::Move( long nHorzMove, long nVertMove )
    1818             : {
    1819           0 :     maPt.Move( nHorzMove, nVertMove );
    1820           0 : }
    1821             : 
    1822             : // ------------------------------------------------------------------------
    1823             : 
    1824           0 : void MetaBmpScaleAction::Scale( double fScaleX, double fScaleY )
    1825             : {
    1826           0 :     Rectangle aRectangle(maPt, maSz);
    1827           0 :     ImplScaleRect( aRectangle, fScaleX, fScaleY );
    1828           0 :     maPt = aRectangle.TopLeft();
    1829           0 :     maSz = aRectangle.GetSize();
    1830           0 : }
    1831             : 
    1832             : // ------------------------------------------------------------------------
    1833             : 
    1834           0 : sal_Bool MetaBmpScaleAction::Compare( const MetaAction& rMetaAction ) const
    1835             : {
    1836           0 :     return ( maBmp.IsEqual(((MetaBmpScaleAction&)rMetaAction).maBmp )) &&
    1837           0 :            ( maPt == ((MetaBmpScaleAction&)rMetaAction).maPt ) &&
    1838           0 :            ( maSz == ((MetaBmpScaleAction&)rMetaAction).maSz );
    1839             : }
    1840             : 
    1841             : // ------------------------------------------------------------------------
    1842             : 
    1843           1 : void MetaBmpScaleAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    1844             : {
    1845           1 :     if( !!maBmp )
    1846             :     {
    1847           1 :         WRITE_BASE_COMPAT( rOStm, 1, pData );
    1848           1 :         rOStm << maBmp << maPt << maSz;
    1849             :     }
    1850           1 : }
    1851             : 
    1852             : // ------------------------------------------------------------------------
    1853             : 
    1854           0 : void MetaBmpScaleAction::Read( SvStream& rIStm, ImplMetaReadData* )
    1855             : {
    1856           0 :     COMPAT( rIStm );
    1857           0 :     rIStm >> maBmp >> maPt >> maSz;
    1858           0 : }
    1859             : 
    1860             : // ========================================================================
    1861             : 
    1862           0 : IMPL_META_ACTION( BmpScalePart, META_BMPSCALEPART_ACTION )
    1863             : 
    1864             : // ------------------------------------------------------------------------
    1865             : 
    1866           0 : MetaBmpScalePartAction::MetaBmpScalePartAction( const Point& rDstPt, const Size& rDstSz,
    1867             :                                                 const Point& rSrcPt, const Size& rSrcSz,
    1868             :                                                 const Bitmap& rBmp ) :
    1869             :     MetaAction  ( META_BMPSCALEPART_ACTION ),
    1870             :     maBmp       ( rBmp ),
    1871             :     maDstPt     ( rDstPt ),
    1872             :     maDstSz     ( rDstSz ),
    1873             :     maSrcPt     ( rSrcPt ),
    1874           0 :     maSrcSz     ( rSrcSz )
    1875             : {
    1876           0 : }
    1877             : 
    1878             : // ------------------------------------------------------------------------
    1879             : 
    1880           0 : void MetaBmpScalePartAction::Execute( OutputDevice* pOut )
    1881             : {
    1882           0 :     pOut->DrawBitmap( maDstPt, maDstSz, maSrcPt, maSrcSz, maBmp );
    1883           0 : }
    1884             : 
    1885             : // ------------------------------------------------------------------------
    1886             : 
    1887           0 : MetaAction* MetaBmpScalePartAction::Clone()
    1888             : {
    1889           0 :     MetaAction* pClone = (MetaAction*) new MetaBmpScalePartAction( *this );
    1890           0 :     pClone->ResetRefCount();
    1891           0 :     return pClone;
    1892             : }
    1893             : 
    1894             : // ------------------------------------------------------------------------
    1895             : 
    1896           0 : void MetaBmpScalePartAction::Move( long nHorzMove, long nVertMove )
    1897             : {
    1898           0 :     maDstPt.Move( nHorzMove, nVertMove );
    1899           0 : }
    1900             : 
    1901             : // ------------------------------------------------------------------------
    1902             : 
    1903           0 : void MetaBmpScalePartAction::Scale( double fScaleX, double fScaleY )
    1904             : {
    1905           0 :     Rectangle aRectangle(maDstPt, maDstSz);
    1906           0 :     ImplScaleRect( aRectangle, fScaleX, fScaleY );
    1907           0 :     maDstPt = aRectangle.TopLeft();
    1908           0 :     maDstSz = aRectangle.GetSize();
    1909           0 : }
    1910             : 
    1911             : // ------------------------------------------------------------------------
    1912             : 
    1913           0 : sal_Bool MetaBmpScalePartAction::Compare( const MetaAction& rMetaAction ) const
    1914             : {
    1915           0 :     return ( maBmp.IsEqual(((MetaBmpScalePartAction&)rMetaAction).maBmp )) &&
    1916           0 :            ( maDstPt == ((MetaBmpScalePartAction&)rMetaAction).maDstPt ) &&
    1917           0 :            ( maDstSz == ((MetaBmpScalePartAction&)rMetaAction).maDstSz ) &&
    1918           0 :            ( maSrcPt == ((MetaBmpScalePartAction&)rMetaAction).maSrcPt ) &&
    1919           0 :            ( maSrcSz == ((MetaBmpScalePartAction&)rMetaAction).maSrcSz );
    1920             : }
    1921             : 
    1922             : // ------------------------------------------------------------------------
    1923             : 
    1924           0 : void MetaBmpScalePartAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    1925             : {
    1926           0 :     if( !!maBmp )
    1927             :     {
    1928           0 :         WRITE_BASE_COMPAT( rOStm, 1, pData );
    1929           0 :         rOStm << maBmp << maDstPt << maDstSz << maSrcPt << maSrcSz;
    1930             :     }
    1931           0 : }
    1932             : 
    1933             : // ------------------------------------------------------------------------
    1934             : 
    1935           0 : void MetaBmpScalePartAction::Read( SvStream& rIStm, ImplMetaReadData* )
    1936             : {
    1937           0 :     COMPAT( rIStm );
    1938           0 :     rIStm >> maBmp >> maDstPt >> maDstSz >> maSrcPt >> maSrcSz;
    1939           0 : }
    1940             : 
    1941             : // ========================================================================
    1942             : 
    1943           0 : IMPL_META_ACTION( BmpEx, META_BMPEX_ACTION )
    1944             : 
    1945             : // ------------------------------------------------------------------------
    1946             : 
    1947           0 : MetaBmpExAction::MetaBmpExAction( const Point& rPt, const BitmapEx& rBmpEx ) :
    1948             :     MetaAction  ( META_BMPEX_ACTION ),
    1949             :     maBmpEx     ( rBmpEx ),
    1950           0 :     maPt        ( rPt )
    1951             : {
    1952           0 : }
    1953             : 
    1954             : // ------------------------------------------------------------------------
    1955             : 
    1956           0 : void MetaBmpExAction::Execute( OutputDevice* pOut )
    1957             : {
    1958           0 :     pOut->DrawBitmapEx( maPt, maBmpEx );
    1959           0 : }
    1960             : 
    1961             : // ------------------------------------------------------------------------
    1962             : 
    1963           0 : MetaAction* MetaBmpExAction::Clone()
    1964             : {
    1965           0 :     MetaBmpExAction* pClone = new MetaBmpExAction( *this );
    1966           0 :     pClone->ResetRefCount();
    1967           0 :     return pClone;
    1968             : }
    1969             : 
    1970             : // ------------------------------------------------------------------------
    1971             : 
    1972           0 : void MetaBmpExAction::Move( long nHorzMove, long nVertMove )
    1973             : {
    1974           0 :     maPt.Move( nHorzMove, nVertMove );
    1975           0 : }
    1976             : 
    1977             : // ------------------------------------------------------------------------
    1978             : 
    1979           0 : void MetaBmpExAction::Scale( double fScaleX, double fScaleY )
    1980             : {
    1981           0 :     ImplScalePoint( maPt, fScaleX, fScaleY );
    1982           0 : }
    1983             : 
    1984             : // ------------------------------------------------------------------------
    1985             : 
    1986           0 : sal_Bool MetaBmpExAction::Compare( const MetaAction& rMetaAction ) const
    1987             : {
    1988           0 :     return ( maBmpEx.IsEqual(((MetaBmpExAction&)rMetaAction).maBmpEx )) &&
    1989           0 :            ( maPt == ((MetaBmpExAction&)rMetaAction).maPt );
    1990             : }
    1991             : 
    1992             : // ------------------------------------------------------------------------
    1993             : 
    1994           0 : void MetaBmpExAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    1995             : {
    1996           0 :     if( !!maBmpEx.GetBitmap() )
    1997             :     {
    1998           0 :         WRITE_BASE_COMPAT( rOStm, 1, pData );
    1999           0 :         rOStm << maBmpEx << maPt;
    2000             :     }
    2001           0 : }
    2002             : 
    2003             : // ------------------------------------------------------------------------
    2004             : 
    2005           0 : void MetaBmpExAction::Read( SvStream& rIStm, ImplMetaReadData* )
    2006             : {
    2007           0 :     COMPAT( rIStm );
    2008           0 :     rIStm >> maBmpEx >> maPt;
    2009           0 : }
    2010             : 
    2011             : // ========================================================================
    2012             : 
    2013           2 : IMPL_META_ACTION( BmpExScale, META_BMPEXSCALE_ACTION )
    2014             : 
    2015             : // ------------------------------------------------------------------------
    2016             : 
    2017           1 : MetaBmpExScaleAction::MetaBmpExScaleAction( const Point& rPt, const Size& rSz,
    2018             :                                             const BitmapEx& rBmpEx ) :
    2019             :     MetaAction  ( META_BMPEXSCALE_ACTION ),
    2020             :     maBmpEx     ( rBmpEx ),
    2021             :     maPt        ( rPt ),
    2022           1 :     maSz        ( rSz )
    2023             : {
    2024           1 : }
    2025             : 
    2026             : // ------------------------------------------------------------------------
    2027             : 
    2028           0 : void MetaBmpExScaleAction::Execute( OutputDevice* pOut )
    2029             : {
    2030           0 :     pOut->DrawBitmapEx( maPt, maSz, maBmpEx );
    2031           0 : }
    2032             : 
    2033             : // ------------------------------------------------------------------------
    2034             : 
    2035           0 : MetaAction* MetaBmpExScaleAction::Clone()
    2036             : {
    2037           0 :     MetaAction* pClone = (MetaAction*) new MetaBmpExScaleAction( *this );
    2038           0 :     pClone->ResetRefCount();
    2039           0 :     return pClone;
    2040             : }
    2041             : 
    2042             : // ------------------------------------------------------------------------
    2043             : 
    2044           0 : void MetaBmpExScaleAction::Move( long nHorzMove, long nVertMove )
    2045             : {
    2046           0 :     maPt.Move( nHorzMove, nVertMove );
    2047           0 : }
    2048             : 
    2049             : // ------------------------------------------------------------------------
    2050             : 
    2051           0 : void MetaBmpExScaleAction::Scale( double fScaleX, double fScaleY )
    2052             : {
    2053           0 :     Rectangle aRectangle(maPt, maSz);
    2054           0 :     ImplScaleRect( aRectangle, fScaleX, fScaleY );
    2055           0 :     maPt = aRectangle.TopLeft();
    2056           0 :     maSz = aRectangle.GetSize();
    2057           0 : }
    2058             : 
    2059             : // ------------------------------------------------------------------------
    2060             : 
    2061           0 : sal_Bool MetaBmpExScaleAction::Compare( const MetaAction& rMetaAction ) const
    2062             : {
    2063           0 :     return ( maBmpEx.IsEqual(((MetaBmpExScaleAction&)rMetaAction).maBmpEx )) &&
    2064           0 :            ( maPt == ((MetaBmpExScaleAction&)rMetaAction).maPt ) &&
    2065           0 :            ( maSz == ((MetaBmpExScaleAction&)rMetaAction).maSz );
    2066             : }
    2067             : 
    2068             : // ------------------------------------------------------------------------
    2069             : 
    2070           0 : void MetaBmpExScaleAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    2071             : {
    2072           0 :     if( !!maBmpEx.GetBitmap() )
    2073             :     {
    2074           0 :         WRITE_BASE_COMPAT( rOStm, 1, pData );
    2075           0 :         rOStm << maBmpEx << maPt << maSz;
    2076             :     }
    2077           0 : }
    2078             : 
    2079             : // ------------------------------------------------------------------------
    2080             : 
    2081           0 : void MetaBmpExScaleAction::Read( SvStream& rIStm, ImplMetaReadData* )
    2082             : {
    2083           0 :     COMPAT( rIStm );
    2084           0 :     rIStm >> maBmpEx >> maPt >> maSz;
    2085           0 : }
    2086             : 
    2087             : // ========================================================================
    2088             : 
    2089           0 : IMPL_META_ACTION( BmpExScalePart, META_BMPEXSCALEPART_ACTION )
    2090             : 
    2091             : // ------------------------------------------------------------------------
    2092             : 
    2093           0 : MetaBmpExScalePartAction::MetaBmpExScalePartAction( const Point& rDstPt, const Size& rDstSz,
    2094             :                                                     const Point& rSrcPt, const Size& rSrcSz,
    2095             :                                                     const BitmapEx& rBmpEx ) :
    2096             :     MetaAction  ( META_BMPEXSCALEPART_ACTION ),
    2097             :     maBmpEx     ( rBmpEx ),
    2098             :     maDstPt     ( rDstPt ),
    2099             :     maDstSz     ( rDstSz ),
    2100             :     maSrcPt     ( rSrcPt ),
    2101           0 :     maSrcSz     ( rSrcSz )
    2102             : {
    2103           0 : }
    2104             : 
    2105             : // ------------------------------------------------------------------------
    2106             : 
    2107           0 : void MetaBmpExScalePartAction::Execute( OutputDevice* pOut )
    2108             : {
    2109           0 :     pOut->DrawBitmapEx( maDstPt, maDstSz, maSrcPt, maSrcSz, maBmpEx );
    2110           0 : }
    2111             : 
    2112             : // ------------------------------------------------------------------------
    2113             : 
    2114           0 : MetaAction* MetaBmpExScalePartAction::Clone()
    2115             : {
    2116           0 :     MetaAction* pClone = (MetaAction*) new MetaBmpExScalePartAction( *this );
    2117           0 :     pClone->ResetRefCount();
    2118           0 :     return pClone;
    2119             : }
    2120             : 
    2121             : // ------------------------------------------------------------------------
    2122             : 
    2123           0 : void MetaBmpExScalePartAction::Move( long nHorzMove, long nVertMove )
    2124             : {
    2125           0 :     maDstPt.Move( nHorzMove, nVertMove );
    2126           0 : }
    2127             : 
    2128             : // ------------------------------------------------------------------------
    2129             : 
    2130           0 : void MetaBmpExScalePartAction::Scale( double fScaleX, double fScaleY )
    2131             : {
    2132           0 :     Rectangle aRectangle(maDstPt, maDstSz);
    2133           0 :     ImplScaleRect( aRectangle, fScaleX, fScaleY );
    2134           0 :     maDstPt = aRectangle.TopLeft();
    2135           0 :     maDstSz = aRectangle.GetSize();
    2136           0 : }
    2137             : 
    2138             : // ------------------------------------------------------------------------
    2139             : 
    2140           0 : sal_Bool MetaBmpExScalePartAction::Compare( const MetaAction& rMetaAction ) const
    2141             : {
    2142           0 :     return ( maBmpEx.IsEqual(((MetaBmpExScalePartAction&)rMetaAction).maBmpEx )) &&
    2143           0 :            ( maDstPt == ((MetaBmpExScalePartAction&)rMetaAction).maDstPt ) &&
    2144           0 :            ( maDstSz == ((MetaBmpExScalePartAction&)rMetaAction).maDstSz ) &&
    2145           0 :            ( maSrcPt == ((MetaBmpExScalePartAction&)rMetaAction).maSrcPt ) &&
    2146           0 :            ( maSrcSz == ((MetaBmpExScalePartAction&)rMetaAction).maSrcSz );
    2147             : }
    2148             : 
    2149             : // ------------------------------------------------------------------------
    2150             : 
    2151           0 : void MetaBmpExScalePartAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    2152             : {
    2153           0 :     if( !!maBmpEx.GetBitmap() )
    2154             :     {
    2155           0 :         WRITE_BASE_COMPAT( rOStm, 1, pData );
    2156           0 :         rOStm << maBmpEx << maDstPt << maDstSz << maSrcPt << maSrcSz;
    2157             :     }
    2158           0 : }
    2159             : 
    2160             : // ------------------------------------------------------------------------
    2161             : 
    2162           0 : void MetaBmpExScalePartAction::Read( SvStream& rIStm, ImplMetaReadData* )
    2163             : {
    2164           0 :     COMPAT( rIStm );
    2165           0 :     rIStm >> maBmpEx >> maDstPt >> maDstSz >> maSrcPt >> maSrcSz;
    2166           0 : }
    2167             : 
    2168             : // ========================================================================
    2169             : 
    2170           0 : IMPL_META_ACTION( Mask, META_MASK_ACTION )
    2171             : 
    2172             : // ------------------------------------------------------------------------
    2173             : 
    2174           0 : MetaMaskAction::MetaMaskAction( const Point& rPt,
    2175             :                                 const Bitmap& rBmp,
    2176             :                                 const Color& rColor ) :
    2177             :     MetaAction  ( META_MASK_ACTION ),
    2178             :     maBmp       ( rBmp ),
    2179             :     maColor     ( rColor ),
    2180           0 :     maPt        ( rPt )
    2181             : {
    2182           0 : }
    2183             : 
    2184             : // ------------------------------------------------------------------------
    2185             : 
    2186           0 : void MetaMaskAction::Execute( OutputDevice* pOut )
    2187             : {
    2188           0 :     pOut->DrawMask( maPt, maBmp, maColor );
    2189           0 : }
    2190             : 
    2191             : // ------------------------------------------------------------------------
    2192             : 
    2193           0 : MetaAction* MetaMaskAction::Clone()
    2194             : {
    2195           0 :     MetaAction* pClone = (MetaAction*) new MetaMaskAction( *this );
    2196           0 :     pClone->ResetRefCount();
    2197           0 :     return pClone;
    2198             : }
    2199             : 
    2200             : // ------------------------------------------------------------------------
    2201             : 
    2202           0 : void MetaMaskAction::Move( long nHorzMove, long nVertMove )
    2203             : {
    2204           0 :     maPt.Move( nHorzMove, nVertMove );
    2205           0 : }
    2206             : 
    2207             : // ------------------------------------------------------------------------
    2208             : 
    2209           0 : void MetaMaskAction::Scale( double fScaleX, double fScaleY )
    2210             : {
    2211           0 :     ImplScalePoint( maPt, fScaleX, fScaleY );
    2212           0 : }
    2213             : 
    2214             : // ------------------------------------------------------------------------
    2215             : 
    2216           0 : sal_Bool MetaMaskAction::Compare( const MetaAction& rMetaAction ) const
    2217             : {
    2218           0 :     return ( maBmp.IsEqual(((MetaMaskAction&)rMetaAction).maBmp )) &&
    2219           0 :            ( maColor == ((MetaMaskAction&)rMetaAction).maColor ) &&
    2220           0 :            ( maPt == ((MetaMaskAction&)rMetaAction).maPt );
    2221             : }
    2222             : 
    2223             : // ------------------------------------------------------------------------
    2224             : 
    2225           0 : void MetaMaskAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    2226             : {
    2227           0 :     if( !!maBmp )
    2228             :     {
    2229           0 :         WRITE_BASE_COMPAT( rOStm, 1, pData );
    2230           0 :         rOStm << maBmp << maPt;
    2231             :     }
    2232           0 : }
    2233             : 
    2234             : // ------------------------------------------------------------------------
    2235             : 
    2236           0 : void MetaMaskAction::Read( SvStream& rIStm, ImplMetaReadData* )
    2237             : {
    2238           0 :     COMPAT( rIStm );
    2239           0 :     rIStm >> maBmp >> maPt;
    2240           0 : }
    2241             : 
    2242             : // ========================================================================
    2243             : 
    2244           0 : IMPL_META_ACTION( MaskScale, META_MASKSCALE_ACTION )
    2245             : 
    2246             : // ------------------------------------------------------------------------
    2247             : 
    2248           0 : MetaMaskScaleAction::MetaMaskScaleAction( const Point& rPt, const Size& rSz,
    2249             :                                           const Bitmap& rBmp,
    2250             :                                           const Color& rColor ) :
    2251             :     MetaAction  ( META_MASKSCALE_ACTION ),
    2252             :     maBmp       ( rBmp ),
    2253             :     maColor     ( rColor ),
    2254             :     maPt        ( rPt ),
    2255           0 :     maSz        ( rSz )
    2256             : {
    2257           0 : }
    2258             : 
    2259             : // ------------------------------------------------------------------------
    2260             : 
    2261           0 : void MetaMaskScaleAction::Execute( OutputDevice* pOut )
    2262             : {
    2263           0 :     pOut->DrawMask( maPt, maSz, maBmp, maColor );
    2264           0 : }
    2265             : 
    2266             : // ------------------------------------------------------------------------
    2267             : 
    2268           0 : MetaAction* MetaMaskScaleAction::Clone()
    2269             : {
    2270           0 :     MetaAction* pClone = (MetaAction*) new MetaMaskScaleAction( *this );
    2271           0 :     pClone->ResetRefCount();
    2272           0 :     return pClone;
    2273             : }
    2274             : 
    2275             : // ------------------------------------------------------------------------
    2276             : 
    2277           0 : void MetaMaskScaleAction::Move( long nHorzMove, long nVertMove )
    2278             : {
    2279           0 :     maPt.Move( nHorzMove, nVertMove );
    2280           0 : }
    2281             : 
    2282             : // ------------------------------------------------------------------------
    2283             : 
    2284           0 : void MetaMaskScaleAction::Scale( double fScaleX, double fScaleY )
    2285             : {
    2286           0 :     Rectangle aRectangle(maPt, maSz);
    2287           0 :     ImplScaleRect( aRectangle, fScaleX, fScaleY );
    2288           0 :     maPt = aRectangle.TopLeft();
    2289           0 :     maSz = aRectangle.GetSize();
    2290           0 : }
    2291             : 
    2292             : // ------------------------------------------------------------------------
    2293             : 
    2294           0 : sal_Bool MetaMaskScaleAction::Compare( const MetaAction& rMetaAction ) const
    2295             : {
    2296           0 :     return ( maBmp.IsEqual(((MetaMaskScaleAction&)rMetaAction).maBmp )) &&
    2297           0 :            ( maColor == ((MetaMaskScaleAction&)rMetaAction).maColor ) &&
    2298           0 :            ( maPt == ((MetaMaskScaleAction&)rMetaAction).maPt ) &&
    2299           0 :            ( maSz == ((MetaMaskScaleAction&)rMetaAction).maSz );
    2300             : }
    2301             : 
    2302             : // ------------------------------------------------------------------------
    2303             : 
    2304           0 : void MetaMaskScaleAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    2305             : {
    2306           0 :     if( !!maBmp )
    2307             :     {
    2308           0 :         WRITE_BASE_COMPAT( rOStm, 1, pData );
    2309           0 :         rOStm << maBmp << maPt << maSz;
    2310             :     }
    2311           0 : }
    2312             : 
    2313             : // ------------------------------------------------------------------------
    2314             : 
    2315           0 : void MetaMaskScaleAction::Read( SvStream& rIStm, ImplMetaReadData* )
    2316             : {
    2317           0 :     COMPAT( rIStm );
    2318           0 :     rIStm >> maBmp >> maPt >> maSz;
    2319           0 : }
    2320             : 
    2321             : // ========================================================================
    2322             : 
    2323           0 : IMPL_META_ACTION( MaskScalePart, META_MASKSCALEPART_ACTION )
    2324             : 
    2325             : // ------------------------------------------------------------------------
    2326             : 
    2327           0 : MetaMaskScalePartAction::MetaMaskScalePartAction( const Point& rDstPt, const Size& rDstSz,
    2328             :                                                   const Point& rSrcPt, const Size& rSrcSz,
    2329             :                                                   const Bitmap& rBmp,
    2330             :                                                   const Color& rColor ) :
    2331             :     MetaAction  ( META_MASKSCALEPART_ACTION ),
    2332             :     maBmp       ( rBmp ),
    2333             :     maColor     ( rColor ),
    2334             :     maDstPt     ( rDstPt ),
    2335             :     maDstSz     ( rDstSz ),
    2336             :     maSrcPt     ( rSrcPt ),
    2337           0 :     maSrcSz     ( rSrcSz )
    2338             : {
    2339           0 : }
    2340             : 
    2341             : // ------------------------------------------------------------------------
    2342             : 
    2343           0 : void MetaMaskScalePartAction::Execute( OutputDevice* pOut )
    2344             : {
    2345           0 :     pOut->DrawMask( maDstPt, maDstSz, maSrcPt, maSrcSz, maBmp, maColor );
    2346           0 : }
    2347             : 
    2348             : // ------------------------------------------------------------------------
    2349             : 
    2350           0 : MetaAction* MetaMaskScalePartAction::Clone()
    2351             : {
    2352           0 :     MetaAction* pClone = (MetaAction*) new MetaMaskScalePartAction( *this );
    2353           0 :     pClone->ResetRefCount();
    2354           0 :     return pClone;
    2355             : }
    2356             : 
    2357             : // ------------------------------------------------------------------------
    2358             : 
    2359           0 : void MetaMaskScalePartAction::Move( long nHorzMove, long nVertMove )
    2360             : {
    2361           0 :     maDstPt.Move( nHorzMove, nVertMove );
    2362           0 : }
    2363             : 
    2364             : // ------------------------------------------------------------------------
    2365             : 
    2366           0 : void MetaMaskScalePartAction::Scale( double fScaleX, double fScaleY )
    2367             : {
    2368           0 :     Rectangle aRectangle(maDstPt, maDstSz);
    2369           0 :     ImplScaleRect( aRectangle, fScaleX, fScaleY );
    2370           0 :     maDstPt = aRectangle.TopLeft();
    2371           0 :     maDstSz = aRectangle.GetSize();
    2372           0 : }
    2373             : 
    2374             : // ------------------------------------------------------------------------
    2375             : 
    2376           0 : sal_Bool MetaMaskScalePartAction::Compare( const MetaAction& rMetaAction ) const
    2377             : {
    2378           0 :     return ( maBmp.IsEqual(((MetaMaskScalePartAction&)rMetaAction).maBmp )) &&
    2379           0 :            ( maColor == ((MetaMaskScalePartAction&)rMetaAction).maColor ) &&
    2380           0 :            ( maDstPt == ((MetaMaskScalePartAction&)rMetaAction).maDstPt ) &&
    2381           0 :            ( maDstSz == ((MetaMaskScalePartAction&)rMetaAction).maDstSz ) &&
    2382           0 :            ( maSrcPt == ((MetaMaskScalePartAction&)rMetaAction).maSrcPt ) &&
    2383           0 :            ( maSrcSz == ((MetaMaskScalePartAction&)rMetaAction).maSrcSz );
    2384             : }
    2385             : 
    2386             : // ------------------------------------------------------------------------
    2387             : 
    2388           0 : void MetaMaskScalePartAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    2389             : {
    2390           0 :     if( !!maBmp )
    2391             :     {
    2392           0 :         WRITE_BASE_COMPAT( rOStm, 1, pData );
    2393           0 :         rOStm << maBmp;
    2394           0 :         maColor.Write( rOStm, sal_True );
    2395           0 :         rOStm << maDstPt << maDstSz << maSrcPt << maSrcSz;
    2396             :     }
    2397           0 : }
    2398             : 
    2399             : // ------------------------------------------------------------------------
    2400             : 
    2401           0 : void MetaMaskScalePartAction::Read( SvStream& rIStm, ImplMetaReadData* )
    2402             : {
    2403           0 :     COMPAT( rIStm );
    2404           0 :     rIStm >> maBmp;
    2405           0 :     maColor.Read( rIStm, sal_True );
    2406           0 :     rIStm >> maDstPt >> maDstSz >> maSrcPt >> maSrcSz;
    2407           0 : }
    2408             : 
    2409             : // ========================================================================
    2410             : 
    2411           0 : IMPL_META_ACTION( Gradient, META_GRADIENT_ACTION )
    2412             : 
    2413             : // ------------------------------------------------------------------------
    2414             : 
    2415           0 : MetaGradientAction::MetaGradientAction( const Rectangle& rRect, const Gradient& rGradient ) :
    2416             :     MetaAction  ( META_GRADIENT_ACTION ),
    2417             :     maRect      ( rRect ),
    2418           0 :     maGradient  ( rGradient )
    2419             : {
    2420           0 : }
    2421             : 
    2422             : // ------------------------------------------------------------------------
    2423             : 
    2424           0 : void MetaGradientAction::Execute( OutputDevice* pOut )
    2425             : {
    2426           0 :     pOut->DrawGradient( maRect, maGradient );
    2427           0 : }
    2428             : 
    2429             : // ------------------------------------------------------------------------
    2430             : 
    2431           0 : MetaAction* MetaGradientAction::Clone()
    2432             : {
    2433           0 :     MetaAction* pClone = (MetaAction*) new MetaGradientAction( *this );
    2434           0 :     pClone->ResetRefCount();
    2435           0 :     return pClone;
    2436             : }
    2437             : 
    2438             : // ------------------------------------------------------------------------
    2439             : 
    2440           0 : void MetaGradientAction::Move( long nHorzMove, long nVertMove )
    2441             : {
    2442           0 :     maRect.Move( nHorzMove, nVertMove );
    2443           0 : }
    2444             : 
    2445             : // ------------------------------------------------------------------------
    2446             : 
    2447           0 : void MetaGradientAction::Scale( double fScaleX, double fScaleY )
    2448             : {
    2449           0 :     ImplScaleRect( maRect, fScaleX, fScaleY );
    2450           0 : }
    2451             : 
    2452             : // ------------------------------------------------------------------------
    2453             : 
    2454           0 : sal_Bool MetaGradientAction::Compare( const MetaAction& rMetaAction ) const
    2455             : {
    2456           0 :     return ( maRect == ((MetaGradientAction&)rMetaAction).maRect ) &&
    2457           0 :            ( maGradient == ((MetaGradientAction&)rMetaAction).maGradient );
    2458             : }
    2459             : 
    2460             : // ------------------------------------------------------------------------
    2461             : 
    2462           0 : void MetaGradientAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    2463             : {
    2464           0 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
    2465           0 :     rOStm << maRect << maGradient;
    2466           0 : }
    2467             : 
    2468             : // ------------------------------------------------------------------------
    2469             : 
    2470           0 : void MetaGradientAction::Read( SvStream& rIStm, ImplMetaReadData* )
    2471             : {
    2472           0 :     COMPAT( rIStm );
    2473           0 :     rIStm >> maRect >> maGradient;
    2474           0 : }
    2475             : 
    2476             : // ========================================================================
    2477             : 
    2478           0 : MetaGradientExAction::MetaGradientExAction() :
    2479           0 :     MetaAction  ( META_GRADIENTEX_ACTION )
    2480             : {
    2481           0 : }
    2482             : 
    2483             : // ------------------------------------------------------------------------
    2484             : 
    2485           0 : MetaGradientExAction::MetaGradientExAction( const PolyPolygon& rPolyPoly, const Gradient& rGradient ) :
    2486             :     MetaAction  ( META_GRADIENTEX_ACTION ),
    2487             :     maPolyPoly  ( rPolyPoly ),
    2488           0 :     maGradient  ( rGradient )
    2489             : {
    2490           0 : }
    2491             : 
    2492             : // ------------------------------------------------------------------------
    2493             : 
    2494           0 : MetaGradientExAction::~MetaGradientExAction()
    2495             : {
    2496           0 : }
    2497             : 
    2498             : // ------------------------------------------------------------------------
    2499             : 
    2500           0 : void MetaGradientExAction::Execute( OutputDevice* pOut )
    2501             : {
    2502           0 :     if( pOut->GetConnectMetaFile() )
    2503             :     {
    2504           0 :         Duplicate();
    2505           0 :         pOut->GetConnectMetaFile()->AddAction( this );
    2506             :     }
    2507           0 : }
    2508             : 
    2509             : // ------------------------------------------------------------------------
    2510             : 
    2511           0 : MetaAction* MetaGradientExAction::Clone()
    2512             : {
    2513           0 :     MetaAction* pClone = (MetaAction*) new MetaGradientExAction( *this );
    2514           0 :     pClone->ResetRefCount();
    2515           0 :     return pClone;
    2516             : }
    2517             : 
    2518             : // ------------------------------------------------------------------------
    2519             : 
    2520           0 : void MetaGradientExAction::Move( long nHorzMove, long nVertMove )
    2521             : {
    2522           0 :     maPolyPoly.Move( nHorzMove, nVertMove );
    2523           0 : }
    2524             : 
    2525             : // ------------------------------------------------------------------------
    2526             : 
    2527           0 : void MetaGradientExAction::Scale( double fScaleX, double fScaleY )
    2528             : {
    2529           0 :     for( sal_uInt16 i = 0, nCount = maPolyPoly.Count(); i < nCount; i++ )
    2530           0 :         ImplScalePoly( maPolyPoly[ i ], fScaleX, fScaleY );
    2531           0 : }
    2532             : 
    2533             : // ------------------------------------------------------------------------
    2534             : 
    2535           0 : sal_Bool MetaGradientExAction::Compare( const MetaAction& rMetaAction ) const
    2536             : {
    2537           0 :     return ( maPolyPoly == ((MetaGradientExAction&)rMetaAction).maPolyPoly ) &&
    2538           0 :            ( maGradient == ((MetaGradientExAction&)rMetaAction).maGradient );
    2539             : }
    2540             : 
    2541             : // ------------------------------------------------------------------------
    2542             : 
    2543           0 : void MetaGradientExAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    2544             : {
    2545           0 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
    2546             : 
    2547             :     // #i105373# see comment at MetaTransparentAction::Write
    2548           0 :     PolyPolygon aNoCurvePolyPolygon;
    2549           0 :     maPolyPoly.AdaptiveSubdivide(aNoCurvePolyPolygon);
    2550             : 
    2551           0 :     rOStm << aNoCurvePolyPolygon;
    2552           0 :     rOStm << maGradient;
    2553           0 : }
    2554             : 
    2555             : // ------------------------------------------------------------------------
    2556             : 
    2557           0 : void MetaGradientExAction::Read( SvStream& rIStm, ImplMetaReadData* )
    2558             : {
    2559           0 :     COMPAT( rIStm );
    2560           0 :     rIStm >> maPolyPoly >> maGradient;
    2561           0 : }
    2562             : 
    2563             : // ========================================================================
    2564             : 
    2565           0 : IMPL_META_ACTION( Hatch, META_HATCH_ACTION )
    2566             : 
    2567             : // ------------------------------------------------------------------------
    2568             : 
    2569           0 : MetaHatchAction::MetaHatchAction( const PolyPolygon& rPolyPoly, const Hatch& rHatch ) :
    2570             :     MetaAction  ( META_HATCH_ACTION ),
    2571             :     maPolyPoly  ( rPolyPoly ),
    2572           0 :     maHatch     ( rHatch )
    2573             : {
    2574           0 : }
    2575             : 
    2576             : // ------------------------------------------------------------------------
    2577             : 
    2578           0 : void MetaHatchAction::Execute( OutputDevice* pOut )
    2579             : {
    2580           0 :     pOut->DrawHatch( maPolyPoly, maHatch );
    2581           0 : }
    2582             : 
    2583             : // ------------------------------------------------------------------------
    2584             : 
    2585           0 : MetaAction* MetaHatchAction::Clone()
    2586             : {
    2587           0 :     MetaAction* pClone = (MetaAction*) new MetaHatchAction( *this );
    2588           0 :     pClone->ResetRefCount();
    2589           0 :     return pClone;
    2590             : }
    2591             : 
    2592             : // ------------------------------------------------------------------------
    2593             : 
    2594           0 : void MetaHatchAction::Move( long nHorzMove, long nVertMove )
    2595             : {
    2596           0 :     maPolyPoly.Move( nHorzMove, nVertMove );
    2597           0 : }
    2598             : 
    2599             : // ------------------------------------------------------------------------
    2600             : 
    2601           0 : void MetaHatchAction::Scale( double fScaleX, double fScaleY )
    2602             : {
    2603           0 :     for( sal_uInt16 i = 0, nCount = maPolyPoly.Count(); i < nCount; i++ )
    2604           0 :         ImplScalePoly( maPolyPoly[ i ], fScaleX, fScaleY );
    2605           0 : }
    2606             : 
    2607             : // ------------------------------------------------------------------------
    2608             : 
    2609           0 : sal_Bool MetaHatchAction::Compare( const MetaAction& rMetaAction ) const
    2610             : {
    2611           0 :     return ( maPolyPoly == ((MetaHatchAction&)rMetaAction).maPolyPoly ) &&
    2612           0 :            ( maHatch == ((MetaHatchAction&)rMetaAction).maHatch );
    2613             : }
    2614             : 
    2615             : // ------------------------------------------------------------------------
    2616             : 
    2617           0 : void MetaHatchAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    2618             : {
    2619           0 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
    2620             : 
    2621             :     // #i105373# see comment at MetaTransparentAction::Write
    2622           0 :     PolyPolygon aNoCurvePolyPolygon;
    2623           0 :     maPolyPoly.AdaptiveSubdivide(aNoCurvePolyPolygon);
    2624             : 
    2625           0 :     rOStm << aNoCurvePolyPolygon;
    2626           0 :     rOStm << maHatch;
    2627           0 : }
    2628             : 
    2629             : // ------------------------------------------------------------------------
    2630             : 
    2631           0 : void MetaHatchAction::Read( SvStream& rIStm, ImplMetaReadData* )
    2632             : {
    2633           0 :     COMPAT( rIStm );
    2634           0 :     rIStm >> maPolyPoly >> maHatch;
    2635           0 : }
    2636             : 
    2637             : // ========================================================================
    2638             : 
    2639           0 : IMPL_META_ACTION( Wallpaper, META_WALLPAPER_ACTION )
    2640             : 
    2641             : // ------------------------------------------------------------------------
    2642             : 
    2643           0 : MetaWallpaperAction::MetaWallpaperAction( const Rectangle& rRect,
    2644             :                                           const Wallpaper& rPaper ) :
    2645             :     MetaAction  ( META_WALLPAPER_ACTION ),
    2646             :     maRect      ( rRect ),
    2647           0 :     maWallpaper ( rPaper )
    2648             : {
    2649           0 : }
    2650             : 
    2651             : // ------------------------------------------------------------------------
    2652             : 
    2653           0 : void MetaWallpaperAction::Execute( OutputDevice* pOut )
    2654             : {
    2655           0 :     pOut->DrawWallpaper( maRect, maWallpaper );
    2656           0 : }
    2657             : 
    2658             : // ------------------------------------------------------------------------
    2659             : 
    2660           0 : MetaAction* MetaWallpaperAction::Clone()
    2661             : {
    2662           0 :     MetaAction* pClone = (MetaAction*) new MetaWallpaperAction( *this );
    2663           0 :     pClone->ResetRefCount();
    2664           0 :     return pClone;
    2665             : }
    2666             : 
    2667             : // ------------------------------------------------------------------------
    2668             : 
    2669           0 : void MetaWallpaperAction::Move( long nHorzMove, long nVertMove )
    2670             : {
    2671           0 :     maRect.Move( nHorzMove, nVertMove );
    2672           0 : }
    2673             : 
    2674             : // ------------------------------------------------------------------------
    2675             : 
    2676           0 : void MetaWallpaperAction::Scale( double fScaleX, double fScaleY )
    2677             : {
    2678           0 :     ImplScaleRect( maRect, fScaleX, fScaleY );
    2679           0 : }
    2680             : 
    2681             : // ------------------------------------------------------------------------
    2682             : 
    2683           0 : sal_Bool MetaWallpaperAction::Compare( const MetaAction& rMetaAction ) const
    2684             : {
    2685           0 :     return ( maRect == ((MetaWallpaperAction&)rMetaAction).maRect ) &&
    2686           0 :            ( maWallpaper == ((MetaWallpaperAction&)rMetaAction).maWallpaper );
    2687             : }
    2688             : 
    2689             : // ------------------------------------------------------------------------
    2690             : 
    2691           0 : void MetaWallpaperAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    2692             : {
    2693           0 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
    2694           0 :     rOStm << maWallpaper;
    2695           0 : }
    2696             : 
    2697             : // ------------------------------------------------------------------------
    2698             : 
    2699           0 : void MetaWallpaperAction::Read( SvStream& rIStm, ImplMetaReadData* )
    2700             : {
    2701           0 :     COMPAT( rIStm );
    2702           0 :     rIStm >> maWallpaper;
    2703           0 : }
    2704             : 
    2705             : // ========================================================================
    2706             : 
    2707          10 : IMPL_META_ACTION( ClipRegion, META_CLIPREGION_ACTION )
    2708             : 
    2709             : // ------------------------------------------------------------------------
    2710             : 
    2711           5 : MetaClipRegionAction::MetaClipRegionAction( const Region& rRegion, sal_Bool bClip ) :
    2712             :     MetaAction  ( META_CLIPREGION_ACTION ),
    2713             :     maRegion    ( rRegion ),
    2714           5 :     mbClip      ( bClip )
    2715             : {
    2716           5 : }
    2717             : 
    2718             : // ------------------------------------------------------------------------
    2719             : 
    2720           0 : void MetaClipRegionAction::Execute( OutputDevice* pOut )
    2721             : {
    2722           0 :     if( mbClip )
    2723           0 :         pOut->SetClipRegion( maRegion );
    2724             :     else
    2725           0 :         pOut->SetClipRegion();
    2726           0 : }
    2727             : 
    2728             : // ------------------------------------------------------------------------
    2729             : 
    2730           0 : MetaAction* MetaClipRegionAction::Clone()
    2731             : {
    2732           0 :     MetaAction* pClone = (MetaAction*) new MetaClipRegionAction( *this );
    2733           0 :     pClone->ResetRefCount();
    2734           0 :     return pClone;
    2735             : }
    2736             : 
    2737             : // ------------------------------------------------------------------------
    2738             : 
    2739           0 : void MetaClipRegionAction::Move( long nHorzMove, long nVertMove )
    2740             : {
    2741           0 :     maRegion.Move( nHorzMove, nVertMove );
    2742           0 : }
    2743             : 
    2744             : // ------------------------------------------------------------------------
    2745             : 
    2746           0 : void MetaClipRegionAction::Scale( double fScaleX, double fScaleY )
    2747             : {
    2748           0 :     maRegion.Scale( fScaleX, fScaleY );
    2749           0 : }
    2750             : 
    2751             : // ------------------------------------------------------------------------
    2752             : 
    2753           0 : sal_Bool MetaClipRegionAction::Compare( const MetaAction& rMetaAction ) const
    2754             : {
    2755           0 :     return ( maRegion == ((MetaClipRegionAction&)rMetaAction).maRegion ) &&
    2756           0 :            ( mbClip == ((MetaClipRegionAction&)rMetaAction).mbClip );
    2757             : }
    2758             : 
    2759             : // ------------------------------------------------------------------------
    2760             : 
    2761           0 : void MetaClipRegionAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    2762             : {
    2763           0 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
    2764           0 :     rOStm << maRegion << mbClip;
    2765           0 : }
    2766             : 
    2767             : // ------------------------------------------------------------------------
    2768             : 
    2769           0 : void MetaClipRegionAction::Read( SvStream& rIStm, ImplMetaReadData* )
    2770             : {
    2771           0 :     COMPAT( rIStm );
    2772           0 :     rIStm >> maRegion >> mbClip;
    2773           0 : }
    2774             : 
    2775             : // ========================================================================
    2776             : 
    2777       11306 : IMPL_META_ACTION( ISectRectClipRegion, META_ISECTRECTCLIPREGION_ACTION )
    2778             : 
    2779             : // ------------------------------------------------------------------------
    2780             : 
    2781        2298 : MetaISectRectClipRegionAction::MetaISectRectClipRegionAction( const Rectangle& rRect ) :
    2782             :     MetaAction  ( META_ISECTRECTCLIPREGION_ACTION ),
    2783        2298 :     maRect      ( rRect )
    2784             : {
    2785        2298 : }
    2786             : 
    2787             : // ------------------------------------------------------------------------
    2788             : 
    2789         198 : void MetaISectRectClipRegionAction::Execute( OutputDevice* pOut )
    2790             : {
    2791         198 :     pOut->IntersectClipRegion( maRect );
    2792         198 : }
    2793             : 
    2794             : // ------------------------------------------------------------------------
    2795             : 
    2796           0 : MetaAction* MetaISectRectClipRegionAction::Clone()
    2797             : {
    2798           0 :     MetaAction* pClone = (MetaAction*) new MetaISectRectClipRegionAction( *this );
    2799           0 :     pClone->ResetRefCount();
    2800           0 :     return pClone;
    2801             : }
    2802             : 
    2803             : // ------------------------------------------------------------------------
    2804             : 
    2805           0 : void MetaISectRectClipRegionAction::Move( long nHorzMove, long nVertMove )
    2806             : {
    2807           0 :     maRect.Move( nHorzMove, nVertMove );
    2808           0 : }
    2809             : 
    2810             : // ------------------------------------------------------------------------
    2811             : 
    2812           0 : void MetaISectRectClipRegionAction::Scale( double fScaleX, double fScaleY )
    2813             : {
    2814           0 :     ImplScaleRect( maRect, fScaleX, fScaleY );
    2815           0 : }
    2816             : 
    2817             : // ------------------------------------------------------------------------
    2818             : 
    2819           0 : sal_Bool MetaISectRectClipRegionAction::Compare( const MetaAction& rMetaAction ) const
    2820             : {
    2821           0 :     return maRect == ((MetaISectRectClipRegionAction&)rMetaAction).maRect;
    2822             : }
    2823             : 
    2824             : // ------------------------------------------------------------------------
    2825             : 
    2826        2447 : void MetaISectRectClipRegionAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    2827             : {
    2828        2447 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
    2829        2447 :     rOStm << maRect;
    2830        2447 : }
    2831             : 
    2832             : // ------------------------------------------------------------------------
    2833             : 
    2834        2288 : void MetaISectRectClipRegionAction::Read( SvStream& rIStm, ImplMetaReadData* )
    2835             : {
    2836        2288 :     COMPAT( rIStm );
    2837        2288 :     rIStm >> maRect;
    2838        2288 : }
    2839             : 
    2840             : // ========================================================================
    2841             : 
    2842          32 : IMPL_META_ACTION( ISectRegionClipRegion, META_ISECTREGIONCLIPREGION_ACTION )
    2843             : 
    2844             : // ------------------------------------------------------------------------
    2845             : 
    2846          10 : MetaISectRegionClipRegionAction::MetaISectRegionClipRegionAction( const Region& rRegion ) :
    2847             :     MetaAction  ( META_ISECTREGIONCLIPREGION_ACTION ),
    2848          10 :     maRegion    ( rRegion )
    2849             : {
    2850          10 : }
    2851             : 
    2852             : // ------------------------------------------------------------------------
    2853             : 
    2854          14 : void MetaISectRegionClipRegionAction::Execute( OutputDevice* pOut )
    2855             : {
    2856          14 :     pOut->IntersectClipRegion( maRegion );
    2857          14 : }
    2858             : 
    2859             : // ------------------------------------------------------------------------
    2860             : 
    2861           0 : MetaAction* MetaISectRegionClipRegionAction::Clone()
    2862             : {
    2863           0 :     MetaAction* pClone = (MetaAction*) new MetaISectRegionClipRegionAction( *this );
    2864           0 :     pClone->ResetRefCount();
    2865           0 :     return pClone;
    2866             : }
    2867             : 
    2868             : // ------------------------------------------------------------------------
    2869             : 
    2870           0 : void MetaISectRegionClipRegionAction::Move( long nHorzMove, long nVertMove )
    2871             : {
    2872           0 :     maRegion.Move( nHorzMove, nVertMove );
    2873           0 : }
    2874             : 
    2875             : // ------------------------------------------------------------------------
    2876             : 
    2877           0 : void MetaISectRegionClipRegionAction::Scale( double fScaleX, double fScaleY )
    2878             : {
    2879           0 :     maRegion.Scale( fScaleX, fScaleY );
    2880           0 : }
    2881             : 
    2882             : // ------------------------------------------------------------------------
    2883             : 
    2884           0 : sal_Bool MetaISectRegionClipRegionAction::Compare( const MetaAction& rMetaAction ) const
    2885             : {
    2886           0 :     return maRegion == ((MetaISectRegionClipRegionAction&)rMetaAction).maRegion;
    2887             : }
    2888             : 
    2889             : // ------------------------------------------------------------------------
    2890             : 
    2891           0 : void MetaISectRegionClipRegionAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    2892             : {
    2893           0 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
    2894           0 :     rOStm << maRegion;
    2895           0 : }
    2896             : 
    2897             : // ------------------------------------------------------------------------
    2898             : 
    2899           4 : void MetaISectRegionClipRegionAction::Read( SvStream& rIStm, ImplMetaReadData* )
    2900             : {
    2901           4 :     COMPAT( rIStm );
    2902           4 :     rIStm >> maRegion;
    2903           4 : }
    2904             : 
    2905             : // ========================================================================
    2906             : 
    2907           0 : IMPL_META_ACTION( MoveClipRegion, META_MOVECLIPREGION_ACTION )
    2908             : 
    2909             : // ------------------------------------------------------------------------
    2910             : 
    2911           0 : MetaMoveClipRegionAction::MetaMoveClipRegionAction( long nHorzMove, long nVertMove ) :
    2912             :     MetaAction  ( META_MOVECLIPREGION_ACTION ),
    2913             :     mnHorzMove  ( nHorzMove ),
    2914           0 :     mnVertMove  ( nVertMove )
    2915             : {
    2916           0 : }
    2917             : 
    2918             : // ------------------------------------------------------------------------
    2919             : 
    2920           0 : void MetaMoveClipRegionAction::Execute( OutputDevice* pOut )
    2921             : {
    2922           0 :     pOut->MoveClipRegion( mnHorzMove, mnVertMove );
    2923           0 : }
    2924             : 
    2925             : // ------------------------------------------------------------------------
    2926             : 
    2927           0 : MetaAction* MetaMoveClipRegionAction::Clone()
    2928             : {
    2929           0 :     MetaAction* pClone = (MetaAction*) new MetaMoveClipRegionAction( *this );
    2930           0 :     pClone->ResetRefCount();
    2931           0 :     return pClone;
    2932             : }
    2933             : 
    2934             : // ------------------------------------------------------------------------
    2935             : 
    2936           0 : void MetaMoveClipRegionAction::Scale( double fScaleX, double fScaleY )
    2937             : {
    2938           0 :     mnHorzMove = FRound( mnHorzMove * fScaleX );
    2939           0 :     mnVertMove = FRound( mnVertMove * fScaleY );
    2940           0 : }
    2941             : 
    2942             : // ------------------------------------------------------------------------
    2943             : 
    2944           0 : sal_Bool MetaMoveClipRegionAction::Compare( const MetaAction& rMetaAction ) const
    2945             : {
    2946             :     return ( mnHorzMove == ((MetaMoveClipRegionAction&)rMetaAction).mnHorzMove ) &&
    2947           0 :            ( mnVertMove == ((MetaMoveClipRegionAction&)rMetaAction).mnVertMove );
    2948             : }
    2949             : 
    2950             : // ------------------------------------------------------------------------
    2951             : 
    2952           0 : void MetaMoveClipRegionAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    2953             : {
    2954           0 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
    2955             :     //#fdo39428 SvStream no longer supports operator<<(long)
    2956           0 :     rOStm << sal::static_int_cast<sal_Int32>(mnHorzMove) << sal::static_int_cast<sal_Int32>(mnVertMove);
    2957           0 : }
    2958             : 
    2959             : // ------------------------------------------------------------------------
    2960             : 
    2961           0 : void MetaMoveClipRegionAction::Read( SvStream& rIStm, ImplMetaReadData* )
    2962             : {
    2963           0 :     COMPAT( rIStm );
    2964             :     //#fdo39428 SvStream no longer supports operator>>(long&)
    2965           0 :     sal_Int32 nTmpHM(0), nTmpVM(0);
    2966           0 :     rIStm >> nTmpHM >> nTmpVM;
    2967           0 :     mnHorzMove = nTmpHM;
    2968           0 :     mnVertMove = nTmpVM;
    2969           0 : }
    2970             : 
    2971             : // ========================================================================
    2972             : 
    2973        6606 : IMPL_META_ACTION( LineColor, META_LINECOLOR_ACTION )
    2974             : 
    2975             : // ------------------------------------------------------------------------
    2976             : 
    2977        1526 : MetaLineColorAction::MetaLineColorAction( const Color& rColor, sal_Bool bSet ) :
    2978             :     MetaAction  ( META_LINECOLOR_ACTION ),
    2979             :     maColor     ( rColor ),
    2980        1526 :     mbSet       ( bSet )
    2981             : {
    2982        1526 : }
    2983             : 
    2984             : // ------------------------------------------------------------------------
    2985             : 
    2986         122 : void MetaLineColorAction::Execute( OutputDevice* pOut )
    2987             : {
    2988         122 :     if( mbSet )
    2989           0 :         pOut->SetLineColor( maColor );
    2990             :     else
    2991         122 :         pOut->SetLineColor();
    2992         122 : }
    2993             : 
    2994             : // ------------------------------------------------------------------------
    2995             : 
    2996           0 : MetaAction* MetaLineColorAction::Clone()
    2997             : {
    2998           0 :     MetaAction* pClone = (MetaAction*) new MetaLineColorAction( *this );
    2999           0 :     pClone->ResetRefCount();
    3000           0 :     return pClone;
    3001             : }
    3002             : 
    3003             : // ------------------------------------------------------------------------
    3004             : 
    3005           0 : sal_Bool MetaLineColorAction::Compare( const MetaAction& rMetaAction ) const
    3006             : {
    3007           0 :     return ( maColor == ((MetaLineColorAction&)rMetaAction).maColor ) &&
    3008           0 :            ( mbSet == ((MetaLineColorAction&)rMetaAction).mbSet );
    3009             : }
    3010             : 
    3011             : // ------------------------------------------------------------------------
    3012             : 
    3013        1544 : void MetaLineColorAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    3014             : {
    3015        1544 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
    3016        1544 :     maColor.Write( rOStm, sal_True );
    3017        1544 :     rOStm << mbSet;
    3018        1544 : }
    3019             : 
    3020             : // ------------------------------------------------------------------------
    3021             : 
    3022        1218 : void MetaLineColorAction::Read( SvStream& rIStm, ImplMetaReadData* )
    3023             : {
    3024        1218 :     COMPAT( rIStm );
    3025        1218 :     maColor.Read( rIStm, sal_True );
    3026        1218 :     rIStm >> mbSet;
    3027        1218 : }
    3028             : 
    3029             : // ========================================================================
    3030             : 
    3031        6444 : IMPL_META_ACTION( FillColor, META_FILLCOLOR_ACTION )
    3032             : 
    3033             : // ------------------------------------------------------------------------
    3034             : 
    3035        1443 : MetaFillColorAction::MetaFillColorAction( const Color& rColor, sal_Bool bSet ) :
    3036             :     MetaAction  ( META_FILLCOLOR_ACTION ),
    3037             :     maColor     ( rColor ),
    3038        1443 :     mbSet       ( bSet )
    3039             : {
    3040        1443 : }
    3041             : 
    3042             : // ------------------------------------------------------------------------
    3043             : 
    3044         109 : void MetaFillColorAction::Execute( OutputDevice* pOut )
    3045             : {
    3046         109 :     if( mbSet )
    3047         107 :         pOut->SetFillColor( maColor );
    3048             :     else
    3049           2 :         pOut->SetFillColor();
    3050         109 : }
    3051             : 
    3052             : // ------------------------------------------------------------------------
    3053             : 
    3054           0 : MetaAction* MetaFillColorAction::Clone()
    3055             : {
    3056           0 :     MetaAction* pClone = (MetaAction*) new MetaFillColorAction( *this );
    3057           0 :     pClone->ResetRefCount();
    3058           0 :     return pClone;
    3059             : }
    3060             : 
    3061             : // ------------------------------------------------------------------------
    3062             : 
    3063           0 : sal_Bool MetaFillColorAction::Compare( const MetaAction& rMetaAction ) const
    3064             : {
    3065           0 :     return ( maColor == ((MetaFillColorAction&)rMetaAction).maColor ) &&
    3066           0 :            ( mbSet == ((MetaFillColorAction&)rMetaAction).mbSet );
    3067             : }
    3068             : 
    3069             : // ------------------------------------------------------------------------
    3070             : 
    3071        1414 : void MetaFillColorAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    3072             : {
    3073        1414 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
    3074        1414 :     maColor.Write( rOStm, sal_True );
    3075        1414 :     rOStm << mbSet;
    3076        1414 : }
    3077             : 
    3078             : // ------------------------------------------------------------------------
    3079             : 
    3080        1216 : void MetaFillColorAction::Read( SvStream& rIStm, ImplMetaReadData* )
    3081             : {
    3082        1216 :     COMPAT( rIStm );
    3083        1216 :     maColor.Read( rIStm, sal_True );
    3084        1216 :     rIStm >> mbSet;
    3085        1216 : }
    3086             : 
    3087             : // ========================================================================
    3088             : 
    3089      109541 : IMPL_META_ACTION( TextColor, META_TEXTCOLOR_ACTION )
    3090             : 
    3091             : // ------------------------------------------------------------------------
    3092             : 
    3093       22202 : MetaTextColorAction::MetaTextColorAction( const Color& rColor ) :
    3094             :     MetaAction  ( META_TEXTCOLOR_ACTION ),
    3095       22202 :     maColor     ( rColor )
    3096             : {
    3097       22202 : }
    3098             : 
    3099             : // ------------------------------------------------------------------------
    3100             : 
    3101        1946 : void MetaTextColorAction::Execute( OutputDevice* pOut )
    3102             : {
    3103        1946 :     pOut->SetTextColor( maColor );
    3104        1946 : }
    3105             : 
    3106             : // ------------------------------------------------------------------------
    3107             : 
    3108           1 : MetaAction* MetaTextColorAction::Clone()
    3109             : {
    3110           1 :     MetaAction* pClone = (MetaAction*) new MetaTextColorAction( *this );
    3111           1 :     pClone->ResetRefCount();
    3112           1 :     return pClone;
    3113             : }
    3114             : 
    3115             : // ------------------------------------------------------------------------
    3116             : 
    3117           0 : sal_Bool MetaTextColorAction::Compare( const MetaAction& rMetaAction ) const
    3118             : {
    3119           0 :     return maColor == ((MetaTextColorAction&)rMetaAction).maColor;
    3120             : }
    3121             : 
    3122             : // ------------------------------------------------------------------------
    3123             : 
    3124       23598 : void MetaTextColorAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    3125             : {
    3126       23598 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
    3127       23598 :     maColor.Write( rOStm, sal_True );
    3128       23598 : }
    3129             : 
    3130             : // ------------------------------------------------------------------------
    3131             : 
    3132       22177 : void MetaTextColorAction::Read( SvStream& rIStm, ImplMetaReadData* )
    3133             : {
    3134       22177 :     COMPAT( rIStm );
    3135       22177 :     maColor.Read( rIStm, sal_True );
    3136       22177 : }
    3137             : 
    3138             : // ========================================================================
    3139             : 
    3140      108625 : IMPL_META_ACTION( TextFillColor, META_TEXTFILLCOLOR_ACTION )
    3141             : 
    3142             : // ------------------------------------------------------------------------
    3143             : 
    3144       22028 : MetaTextFillColorAction::MetaTextFillColorAction( const Color& rColor, sal_Bool bSet ) :
    3145             :     MetaAction  ( META_TEXTFILLCOLOR_ACTION ),
    3146             :     maColor     ( rColor ),
    3147       22028 :     mbSet       ( bSet )
    3148             : {
    3149       22028 : }
    3150             : 
    3151             : // ------------------------------------------------------------------------
    3152             : 
    3153        1940 : void MetaTextFillColorAction::Execute( OutputDevice* pOut )
    3154             : {
    3155        1940 :     if( mbSet )
    3156           0 :         pOut->SetTextFillColor( maColor );
    3157             :     else
    3158        1940 :         pOut->SetTextFillColor();
    3159        1940 : }
    3160             : 
    3161             : // ------------------------------------------------------------------------
    3162             : 
    3163           2 : MetaAction* MetaTextFillColorAction::Clone()
    3164             : {
    3165           2 :     MetaAction* pClone = (MetaAction*) new MetaTextFillColorAction( *this );
    3166           2 :     pClone->ResetRefCount();
    3167           2 :     return pClone;
    3168             : }
    3169             : 
    3170             : // ------------------------------------------------------------------------
    3171             : 
    3172           0 : sal_Bool MetaTextFillColorAction::Compare( const MetaAction& rMetaAction ) const
    3173             : {
    3174           0 :     return ( maColor == ((MetaTextFillColorAction&)rMetaAction).maColor ) &&
    3175           0 :            ( mbSet == ((MetaTextFillColorAction&)rMetaAction).mbSet );
    3176             : }
    3177             : 
    3178             : // ------------------------------------------------------------------------
    3179             : 
    3180       23418 : void MetaTextFillColorAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    3181             : {
    3182       23418 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
    3183       23418 :     maColor.Write( rOStm, sal_True );
    3184       23418 :     rOStm << mbSet;
    3185       23418 : }
    3186             : 
    3187             : // ------------------------------------------------------------------------
    3188             : 
    3189       21985 : void MetaTextFillColorAction::Read( SvStream& rIStm, ImplMetaReadData* )
    3190             : {
    3191       21985 :     COMPAT( rIStm );
    3192       21985 :     maColor.Read( rIStm, sal_True );
    3193       21985 :     rIStm >> mbSet;
    3194       21985 : }
    3195             : 
    3196             : // ========================================================================
    3197             : 
    3198           5 : IMPL_META_ACTION( TextLineColor, META_TEXTLINECOLOR_ACTION )
    3199             : 
    3200             : // ------------------------------------------------------------------------
    3201             : 
    3202           1 : MetaTextLineColorAction::MetaTextLineColorAction( const Color& rColor, sal_Bool bSet ) :
    3203             :     MetaAction  ( META_TEXTLINECOLOR_ACTION ),
    3204             :     maColor     ( rColor ),
    3205           1 :     mbSet       ( bSet )
    3206             : {
    3207           1 : }
    3208             : 
    3209             : // ------------------------------------------------------------------------
    3210             : 
    3211           2 : void MetaTextLineColorAction::Execute( OutputDevice* pOut )
    3212             : {
    3213           2 :     if( mbSet )
    3214           2 :         pOut->SetTextLineColor( maColor );
    3215             :     else
    3216           0 :         pOut->SetTextLineColor();
    3217           2 : }
    3218             : 
    3219             : // ------------------------------------------------------------------------
    3220             : 
    3221           0 : MetaAction* MetaTextLineColorAction::Clone()
    3222             : {
    3223           0 :     MetaAction* pClone = (MetaAction*) new MetaTextLineColorAction( *this );
    3224           0 :     pClone->ResetRefCount();
    3225           0 :     return pClone;
    3226             : }
    3227             : 
    3228             : // ------------------------------------------------------------------------
    3229             : 
    3230           0 : sal_Bool MetaTextLineColorAction::Compare( const MetaAction& rMetaAction ) const
    3231             : {
    3232           0 :     return ( maColor == ((MetaTextLineColorAction&)rMetaAction).maColor ) &&
    3233           0 :            ( mbSet == ((MetaTextLineColorAction&)rMetaAction).mbSet );
    3234             : }
    3235             : 
    3236             : // ------------------------------------------------------------------------
    3237             : 
    3238           0 : void MetaTextLineColorAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    3239             : {
    3240           0 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
    3241           0 :     maColor.Write( rOStm, sal_True );
    3242           0 :     rOStm << mbSet;
    3243           0 : }
    3244             : 
    3245             : // ------------------------------------------------------------------------
    3246             : 
    3247           1 : void MetaTextLineColorAction::Read( SvStream& rIStm, ImplMetaReadData* )
    3248             : {
    3249           1 :     COMPAT( rIStm );
    3250           1 :     maColor.Read( rIStm, sal_True );
    3251           1 :     rIStm >> mbSet;
    3252           1 : }
    3253             : 
    3254             : // ========================================================================
    3255             : 
    3256           5 : IMPL_META_ACTION( OverlineColor, META_OVERLINECOLOR_ACTION )
    3257             : 
    3258             : // ------------------------------------------------------------------------
    3259             : 
    3260           1 : MetaOverlineColorAction::MetaOverlineColorAction( const Color& rColor, sal_Bool bSet ) :
    3261             :     MetaAction  ( META_OVERLINECOLOR_ACTION ),
    3262             :     maColor     ( rColor ),
    3263           1 :     mbSet       ( bSet )
    3264             : {
    3265           1 : }
    3266             : 
    3267             : // ------------------------------------------------------------------------
    3268             : 
    3269           1 : void MetaOverlineColorAction::Execute( OutputDevice* pOut )
    3270             : {
    3271           1 :     if( mbSet )
    3272           1 :         pOut->SetOverlineColor( maColor );
    3273             :     else
    3274           0 :         pOut->SetOverlineColor();
    3275           1 : }
    3276             : 
    3277             : // ------------------------------------------------------------------------
    3278             : 
    3279           0 : MetaAction* MetaOverlineColorAction::Clone()
    3280             : {
    3281           0 :     MetaAction* pClone = (MetaAction*) new MetaOverlineColorAction( *this );
    3282           0 :     pClone->ResetRefCount();
    3283           0 :     return pClone;
    3284             : }
    3285             : 
    3286             : // ------------------------------------------------------------------------
    3287             : 
    3288           0 : sal_Bool MetaOverlineColorAction::Compare( const MetaAction& rMetaAction ) const
    3289             : {
    3290           0 :     return ( maColor == ((MetaOverlineColorAction&)rMetaAction).maColor ) &&
    3291           0 :            ( mbSet == ((MetaOverlineColorAction&)rMetaAction).mbSet );
    3292             : }
    3293             : 
    3294             : // ------------------------------------------------------------------------
    3295             : 
    3296           0 : void MetaOverlineColorAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    3297             : {
    3298           0 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
    3299           0 :     maColor.Write( rOStm, sal_True );
    3300           0 :     rOStm << mbSet;
    3301           0 : }
    3302             : 
    3303             : // ------------------------------------------------------------------------
    3304             : 
    3305           1 : void MetaOverlineColorAction::Read( SvStream& rIStm, ImplMetaReadData* )
    3306             : {
    3307           1 :     COMPAT( rIStm );
    3308           1 :     maColor.Read( rIStm, sal_True );
    3309           1 :     rIStm >> mbSet;
    3310           1 : }
    3311             : 
    3312             : // ========================================================================
    3313             : 
    3314      108619 : IMPL_META_ACTION( TextAlign, META_TEXTALIGN_ACTION )
    3315             : 
    3316             : // ------------------------------------------------------------------------
    3317             : 
    3318       22024 : MetaTextAlignAction::MetaTextAlignAction( TextAlign aAlign ) :
    3319             :     MetaAction  ( META_TEXTALIGN_ACTION ),
    3320       22024 :     maAlign     ( aAlign )
    3321             : {
    3322       22024 : }
    3323             : 
    3324             : // ------------------------------------------------------------------------
    3325             : 
    3326        1938 : void MetaTextAlignAction::Execute( OutputDevice* pOut )
    3327             : {
    3328        1938 :     pOut->SetTextAlign( maAlign );
    3329        1938 : }
    3330             : 
    3331             : // ------------------------------------------------------------------------
    3332             : 
    3333           1 : MetaAction* MetaTextAlignAction::Clone()
    3334             : {
    3335           1 :     MetaAction* pClone = (MetaAction*) new MetaTextAlignAction( *this );
    3336           1 :     pClone->ResetRefCount();
    3337           1 :     return pClone;
    3338             : }
    3339             : 
    3340             : // ------------------------------------------------------------------------
    3341             : 
    3342           0 : sal_Bool MetaTextAlignAction::Compare( const MetaAction& rMetaAction ) const
    3343             : {
    3344           0 :     return maAlign == ((MetaTextAlignAction&)rMetaAction).maAlign;
    3345             : }
    3346             : 
    3347             : // ------------------------------------------------------------------------
    3348             : 
    3349       23403 : void MetaTextAlignAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    3350             : {
    3351       23403 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
    3352       23403 :     rOStm << (sal_uInt16) maAlign;
    3353       23403 : }
    3354             : 
    3355             : // ------------------------------------------------------------------------
    3356             : 
    3357       21985 : void MetaTextAlignAction::Read( SvStream& rIStm, ImplMetaReadData* )
    3358             : {
    3359             :     sal_uInt16 nTmp16;
    3360             : 
    3361       21985 :     COMPAT( rIStm );
    3362       21985 :     rIStm >> nTmp16; maAlign = (TextAlign) nTmp16;
    3363       21985 : }
    3364             : 
    3365             : // ========================================================================
    3366             : 
    3367          28 : IMPL_META_ACTION( MapMode, META_MAPMODE_ACTION )
    3368             : 
    3369             : // ------------------------------------------------------------------------
    3370             : 
    3371          15 : MetaMapModeAction::MetaMapModeAction( const MapMode& rMapMode ) :
    3372             :     MetaAction  ( META_MAPMODE_ACTION ),
    3373          15 :     maMapMode   ( rMapMode )
    3374             : {
    3375          15 : }
    3376             : 
    3377             : // ------------------------------------------------------------------------
    3378             : 
    3379           2 : void MetaMapModeAction::Execute( OutputDevice* pOut )
    3380             : {
    3381           2 :     pOut->SetMapMode( maMapMode );
    3382           2 : }
    3383             : 
    3384             : // ------------------------------------------------------------------------
    3385             : 
    3386           0 : MetaAction* MetaMapModeAction::Clone()
    3387             : {
    3388           0 :     MetaAction* pClone = (MetaAction*) new MetaMapModeAction( *this );
    3389           0 :     pClone->ResetRefCount();
    3390           0 :     return pClone;
    3391             : }
    3392             : 
    3393             : // ------------------------------------------------------------------------
    3394             : 
    3395           0 : void MetaMapModeAction::Scale( double fScaleX, double fScaleY )
    3396             : {
    3397           0 :     Point aPoint( maMapMode.GetOrigin() );
    3398             : 
    3399           0 :     ImplScalePoint( aPoint, fScaleX, fScaleY );
    3400           0 :     maMapMode.SetOrigin( aPoint );
    3401           0 : }
    3402             : 
    3403             : // ------------------------------------------------------------------------
    3404             : 
    3405           0 : sal_Bool MetaMapModeAction::Compare( const MetaAction& rMetaAction ) const
    3406             : {
    3407           0 :     return maMapMode == ((MetaMapModeAction&)rMetaAction).maMapMode;
    3408             : }
    3409             : 
    3410             : // ------------------------------------------------------------------------
    3411             : 
    3412           2 : void MetaMapModeAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    3413             : {
    3414           2 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
    3415           2 :     rOStm << maMapMode;
    3416           2 : }
    3417             : 
    3418             : // ------------------------------------------------------------------------
    3419             : 
    3420           0 : void MetaMapModeAction::Read( SvStream& rIStm, ImplMetaReadData* )
    3421             : {
    3422           0 :     COMPAT( rIStm );
    3423           0 :     rIStm >> maMapMode;
    3424           0 : }
    3425             : 
    3426             : // ========================================================================
    3427             : 
    3428      108613 : IMPL_META_ACTION( Font, META_FONT_ACTION )
    3429             : 
    3430             : // ------------------------------------------------------------------------
    3431             : 
    3432       22020 : MetaFontAction::MetaFontAction( const Font& rFont ) :
    3433             :     MetaAction  ( META_FONT_ACTION ),
    3434       22020 :     maFont      ( rFont )
    3435             : {
    3436             :     // #96876: because RTL_TEXTENCODING_SYMBOL is often set at the StarSymbol font,
    3437             :     // we change the textencoding to RTL_TEXTENCODING_UNICODE here, which seems
    3438             :     // to be the right way; changing the textencoding at other sources
    3439             :     // is too dangerous at the moment
    3440       52504 :     if( ( ( maFont.GetName().SearchAscii( "StarSymbol" ) != STRING_NOTFOUND )
    3441       22020 :        || ( maFont.GetName().SearchAscii( "OpenSymbol" ) != STRING_NOTFOUND ) )
    3442        8464 :      && ( maFont.GetCharSet() != RTL_TEXTENCODING_UNICODE ) )
    3443             :     {
    3444           0 :         maFont.SetCharSet( RTL_TEXTENCODING_UNICODE );
    3445             :     }
    3446       22020 : }
    3447             : 
    3448             : // ------------------------------------------------------------------------
    3449             : 
    3450        1938 : void MetaFontAction::Execute( OutputDevice* pOut )
    3451             : {
    3452        1938 :     pOut->SetFont( maFont );
    3453        1938 : }
    3454             : 
    3455             : // ------------------------------------------------------------------------
    3456             : 
    3457           1 : MetaAction* MetaFontAction::Clone()
    3458             : {
    3459           1 :     MetaAction* pClone = (MetaAction*) new MetaFontAction( *this );
    3460           1 :     pClone->ResetRefCount();
    3461           1 :     return pClone;
    3462             : }
    3463             : 
    3464             : // ------------------------------------------------------------------------
    3465             : 
    3466           1 : void MetaFontAction::Scale( double fScaleX, double fScaleY )
    3467             : {
    3468             :     const Size aSize(
    3469           2 :         FRound(maFont.GetSize().Width() * fabs(fScaleX)),
    3470           3 :         FRound(maFont.GetSize().Height() * fabs(fScaleY)));
    3471           1 :     maFont.SetSize( aSize );
    3472           1 : }
    3473             : 
    3474             : // ------------------------------------------------------------------------
    3475             : 
    3476           0 : sal_Bool MetaFontAction::Compare( const MetaAction& rMetaAction ) const
    3477             : {
    3478           0 :     return maFont == ((MetaFontAction&)rMetaAction).maFont;
    3479             : }
    3480             : 
    3481             : // ------------------------------------------------------------------------
    3482             : 
    3483       23394 : void MetaFontAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    3484             : {
    3485       23394 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
    3486       23394 :     rOStm << maFont;
    3487       23394 :     pData->meActualCharSet = maFont.GetCharSet();
    3488       23394 :     if ( pData->meActualCharSet == RTL_TEXTENCODING_DONTKNOW )
    3489       14365 :         pData->meActualCharSet = osl_getThreadTextEncoding();
    3490       23394 : }
    3491             : 
    3492             : // ------------------------------------------------------------------------
    3493             : 
    3494       21985 : void MetaFontAction::Read( SvStream& rIStm, ImplMetaReadData* pData )
    3495             : {
    3496       21985 :     COMPAT( rIStm );
    3497       21985 :     rIStm >> maFont;
    3498       21985 :     pData->meActualCharSet = maFont.GetCharSet();
    3499       21985 :     if ( pData->meActualCharSet == RTL_TEXTENCODING_DONTKNOW )
    3500       13520 :         pData->meActualCharSet = osl_getThreadTextEncoding();
    3501       21985 : }
    3502             : 
    3503             : // ========================================================================
    3504             : 
    3505      119985 : IMPL_META_ACTION( Push, META_PUSH_ACTION )
    3506             : 
    3507             : // ------------------------------------------------------------------------
    3508             : 
    3509       24362 : MetaPushAction::MetaPushAction( sal_uInt16 nFlags ) :
    3510             :     MetaAction  ( META_PUSH_ACTION ),
    3511       24362 :     mnFlags     ( nFlags )
    3512             : {
    3513       24362 : }
    3514             : 
    3515             : // ------------------------------------------------------------------------
    3516             : 
    3517        2168 : void MetaPushAction::Execute( OutputDevice* pOut )
    3518             : {
    3519        2168 :     pOut->Push( mnFlags );
    3520        2168 : }
    3521             : 
    3522             : // ------------------------------------------------------------------------
    3523             : 
    3524           2 : MetaAction* MetaPushAction::Clone()
    3525             : {
    3526           2 :     MetaAction* pClone = (MetaAction*) new MetaPushAction( *this );
    3527           2 :     pClone->ResetRefCount();
    3528           2 :     return pClone;
    3529             : }
    3530             : 
    3531             : // ------------------------------------------------------------------------
    3532             : 
    3533           0 : sal_Bool MetaPushAction::Compare( const MetaAction& rMetaAction ) const
    3534             : {
    3535           0 :     return mnFlags == ((MetaPushAction&)rMetaAction).mnFlags;
    3536             : }
    3537             : 
    3538             : // ------------------------------------------------------------------------
    3539             : 
    3540       25883 : void MetaPushAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    3541             : {
    3542       25883 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
    3543       25883 :     rOStm << mnFlags;
    3544       25883 : }
    3545             : 
    3546             : // ------------------------------------------------------------------------
    3547             : 
    3548       24277 : void MetaPushAction::Read( SvStream& rIStm, ImplMetaReadData* )
    3549             : {
    3550       24277 :     COMPAT( rIStm );
    3551       24277 :     rIStm >> mnFlags;
    3552       24277 : }
    3553             : 
    3554             : // ========================================================================
    3555             : 
    3556      144347 : IMPL_META_ACTION( Pop, META_POP_ACTION )
    3557             : 
    3558             : // ------------------------------------------------------------------------
    3559             : 
    3560        2168 : void MetaPopAction::Execute( OutputDevice* pOut )
    3561             : {
    3562        2168 :     pOut->Pop();
    3563        2168 : }
    3564             : 
    3565             : // ------------------------------------------------------------------------
    3566             : 
    3567           2 : MetaAction* MetaPopAction::Clone()
    3568             : {
    3569           2 :     MetaAction* pClone = (MetaAction*) new MetaPopAction( *this );
    3570           2 :     pClone->ResetRefCount();
    3571           2 :     return pClone;
    3572             : }
    3573             : 
    3574             : // ------------------------------------------------------------------------
    3575             : 
    3576       25883 : void MetaPopAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    3577             : {
    3578       25883 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
    3579       25883 : }
    3580             : 
    3581             : // ------------------------------------------------------------------------
    3582             : 
    3583       24277 : void MetaPopAction::Read( SvStream& rIStm, ImplMetaReadData* )
    3584             : {
    3585       24277 :     COMPAT( rIStm );
    3586       24277 : }
    3587             : 
    3588             : // ========================================================================
    3589             : 
    3590         374 : IMPL_META_ACTION( RasterOp, META_RASTEROP_ACTION )
    3591             : 
    3592             : // ------------------------------------------------------------------------
    3593             : 
    3594         204 : MetaRasterOpAction::MetaRasterOpAction( RasterOp eRasterOp ) :
    3595             :     MetaAction  ( META_RASTEROP_ACTION ),
    3596         204 :     meRasterOp  ( eRasterOp )
    3597             : {
    3598         204 : }
    3599             : 
    3600             : // ------------------------------------------------------------------------
    3601             : 
    3602          11 : void MetaRasterOpAction::Execute( OutputDevice* pOut )
    3603             : {
    3604          11 :     pOut->SetRasterOp( meRasterOp );
    3605          11 : }
    3606             : 
    3607             : // ------------------------------------------------------------------------
    3608             : 
    3609           1 : MetaAction* MetaRasterOpAction::Clone()
    3610             : {
    3611           1 :     MetaAction* pClone = (MetaAction*) new MetaRasterOpAction( *this );
    3612           1 :     pClone->ResetRefCount();
    3613           1 :     return pClone;
    3614             : }
    3615             : 
    3616             : // ------------------------------------------------------------------------
    3617             : 
    3618           0 : sal_Bool MetaRasterOpAction::Compare( const MetaAction& rMetaAction ) const
    3619             : {
    3620           0 :     return meRasterOp == ((MetaRasterOpAction&)rMetaAction).meRasterOp;
    3621             : }
    3622             : 
    3623             : // ------------------------------------------------------------------------
    3624             : 
    3625         450 : void MetaRasterOpAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    3626             : {
    3627         450 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
    3628         450 :     rOStm << (sal_uInt16) meRasterOp;
    3629         450 : }
    3630             : 
    3631             : // ------------------------------------------------------------------------
    3632             : 
    3633           0 : void MetaRasterOpAction::Read( SvStream& rIStm, ImplMetaReadData* )
    3634             : {
    3635             :     sal_uInt16 nTmp16;
    3636             : 
    3637           0 :     COMPAT( rIStm );
    3638           0 :     rIStm >> nTmp16; meRasterOp = (RasterOp) nTmp16;
    3639           0 : }
    3640             : 
    3641             : // ========================================================================
    3642             : 
    3643           0 : IMPL_META_ACTION( Transparent, META_TRANSPARENT_ACTION )
    3644             : 
    3645             : // ------------------------------------------------------------------------
    3646             : 
    3647           0 : MetaTransparentAction::MetaTransparentAction( const PolyPolygon& rPolyPoly, sal_uInt16 nTransPercent ) :
    3648             :     MetaAction      ( META_TRANSPARENT_ACTION ),
    3649             :     maPolyPoly      ( rPolyPoly ),
    3650           0 :     mnTransPercent  ( nTransPercent )
    3651             : {
    3652           0 : }
    3653             : 
    3654             : // ------------------------------------------------------------------------
    3655             : 
    3656           0 : void MetaTransparentAction::Execute( OutputDevice* pOut )
    3657             : {
    3658           0 :     pOut->DrawTransparent( maPolyPoly, mnTransPercent );
    3659           0 : }
    3660             : 
    3661             : // ------------------------------------------------------------------------
    3662             : 
    3663           0 : MetaAction* MetaTransparentAction::Clone()
    3664             : {
    3665           0 :     MetaAction* pClone = (MetaAction*) new MetaTransparentAction( *this );
    3666           0 :     pClone->ResetRefCount();
    3667           0 :     return pClone;
    3668             : }
    3669             : 
    3670             : // ------------------------------------------------------------------------
    3671             : 
    3672           0 : void MetaTransparentAction::Move( long nHorzMove, long nVertMove )
    3673             : {
    3674           0 :     maPolyPoly.Move( nHorzMove, nVertMove );
    3675           0 : }
    3676             : 
    3677             : // ------------------------------------------------------------------------
    3678             : 
    3679           0 : void MetaTransparentAction::Scale( double fScaleX, double fScaleY )
    3680             : {
    3681           0 :     for( sal_uInt16 i = 0, nCount = maPolyPoly.Count(); i < nCount; i++ )
    3682           0 :         ImplScalePoly( maPolyPoly[ i ], fScaleX, fScaleY );
    3683           0 : }
    3684             : 
    3685             : // ------------------------------------------------------------------------
    3686             : 
    3687           0 : sal_Bool MetaTransparentAction::Compare( const MetaAction& rMetaAction ) const
    3688             : {
    3689           0 :     return ( maPolyPoly == ((MetaTransparentAction&)rMetaAction).maPolyPoly ) &&
    3690           0 :            ( mnTransPercent == ((MetaTransparentAction&)rMetaAction).mnTransPercent );
    3691             : }
    3692             : 
    3693             : // ------------------------------------------------------------------------
    3694             : 
    3695           0 : void MetaTransparentAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    3696             : {
    3697           0 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
    3698             : 
    3699             :     // #i105373# The PolyPolygon in this action may be a curve; this
    3700             :     // was ignored until now what is an error. To make older office
    3701             :     // versions work with MetaFiles, i opt for applying AdaptiveSubdivide
    3702             :     // to the PolyPoylgon.
    3703             :     // The alternative would be to really write the curve information
    3704             :     // like in MetaPolyPolygonAction::Write (where someone extended it
    3705             :     // correctly, but not here :-( ).
    3706             :     // The golden solution would be to combine both, but i think it's
    3707             :     // not necessary; a good subdivision will be sufficient.
    3708           0 :     PolyPolygon aNoCurvePolyPolygon;
    3709           0 :     maPolyPoly.AdaptiveSubdivide(aNoCurvePolyPolygon);
    3710             : 
    3711           0 :     rOStm << aNoCurvePolyPolygon;
    3712           0 :     rOStm << mnTransPercent;
    3713           0 : }
    3714             : 
    3715             : // ------------------------------------------------------------------------
    3716             : 
    3717           0 : void MetaTransparentAction::Read( SvStream& rIStm, ImplMetaReadData* )
    3718             : {
    3719           0 :     COMPAT( rIStm );
    3720           0 :     rIStm >> maPolyPoly;
    3721           0 :     rIStm >> mnTransPercent;
    3722           0 : }
    3723             : 
    3724             : // ========================================================================
    3725             : 
    3726           0 : IMPL_META_ACTION( FloatTransparent, META_FLOATTRANSPARENT_ACTION )
    3727             : 
    3728             : // ------------------------------------------------------------------------
    3729             : 
    3730           0 : MetaFloatTransparentAction::MetaFloatTransparentAction( const GDIMetaFile& rMtf, const Point& rPos,
    3731             :                                                         const Size& rSize, const Gradient& rGradient ) :
    3732             :     MetaAction      ( META_FLOATTRANSPARENT_ACTION ),
    3733             :     maMtf           ( rMtf ),
    3734             :     maPoint         ( rPos ),
    3735             :     maSize          ( rSize ),
    3736           0 :     maGradient      ( rGradient )
    3737             : {
    3738           0 : }
    3739             : 
    3740             : // ------------------------------------------------------------------------
    3741             : 
    3742           0 : void MetaFloatTransparentAction::Execute( OutputDevice* pOut )
    3743             : {
    3744           0 :     pOut->DrawTransparent( maMtf, maPoint, maSize, maGradient );
    3745           0 : }
    3746             : 
    3747             : // ------------------------------------------------------------------------
    3748             : 
    3749           0 : MetaAction* MetaFloatTransparentAction::Clone()
    3750             : {
    3751           0 :     MetaAction* pClone = (MetaAction*) new MetaFloatTransparentAction( *this );
    3752           0 :     pClone->ResetRefCount();
    3753           0 :     return pClone;
    3754             : }
    3755             : 
    3756             : // ------------------------------------------------------------------------
    3757             : 
    3758           0 : void MetaFloatTransparentAction::Move( long nHorzMove, long nVertMove )
    3759             : {
    3760           0 :     maPoint.Move( nHorzMove, nVertMove );
    3761           0 : }
    3762             : 
    3763             : // ------------------------------------------------------------------------
    3764             : 
    3765           0 : void MetaFloatTransparentAction::Scale( double fScaleX, double fScaleY )
    3766             : {
    3767           0 :     Rectangle aRectangle(maPoint, maSize);
    3768           0 :     ImplScaleRect( aRectangle, fScaleX, fScaleY );
    3769           0 :     maPoint = aRectangle.TopLeft();
    3770           0 :     maSize = aRectangle.GetSize();
    3771           0 : }
    3772             : 
    3773             : // ------------------------------------------------------------------------
    3774             : 
    3775           0 : sal_Bool MetaFloatTransparentAction::Compare( const MetaAction& rMetaAction ) const
    3776             : {
    3777           0 :     return ( maMtf == ((MetaFloatTransparentAction&)rMetaAction).maMtf ) &&
    3778           0 :            ( maPoint == ((MetaFloatTransparentAction&)rMetaAction).maPoint ) &&
    3779           0 :            ( maSize == ((MetaFloatTransparentAction&)rMetaAction).maSize ) &&
    3780           0 :            ( maGradient == ((MetaFloatTransparentAction&)rMetaAction).maGradient );
    3781             : }
    3782             : 
    3783             : // ------------------------------------------------------------------------
    3784             : 
    3785           0 : void MetaFloatTransparentAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    3786             : {
    3787           0 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
    3788             : 
    3789           0 :     maMtf.Write( rOStm );
    3790           0 :     rOStm << maPoint << maSize << maGradient;
    3791           0 : }
    3792             : 
    3793             : // ------------------------------------------------------------------------
    3794             : 
    3795           0 : void MetaFloatTransparentAction::Read( SvStream& rIStm, ImplMetaReadData* )
    3796             : {
    3797           0 :     COMPAT( rIStm );
    3798           0 :     rIStm >> maMtf >> maPoint >> maSize >> maGradient;
    3799           0 : }
    3800             : 
    3801             : // ========================================================================
    3802             : 
    3803           0 : IMPL_META_ACTION( EPS, META_EPS_ACTION )
    3804             : 
    3805             : // ------------------------------------------------------------------------
    3806             : 
    3807           0 : MetaEPSAction::MetaEPSAction( const Point& rPoint, const Size& rSize,
    3808             :                               const GfxLink& rGfxLink, const GDIMetaFile& rSubst ) :
    3809             :     MetaAction  ( META_EPS_ACTION ),
    3810             :     maGfxLink   ( rGfxLink ),
    3811             :     maSubst     ( rSubst ),
    3812             :     maPoint     ( rPoint ),
    3813           0 :     maSize      ( rSize )
    3814             : {
    3815           0 : }
    3816             : 
    3817             : // ------------------------------------------------------------------------
    3818             : 
    3819           0 : void MetaEPSAction::Execute( OutputDevice* pOut )
    3820             : {
    3821           0 :     pOut->DrawEPS( maPoint, maSize, maGfxLink, &maSubst );
    3822           0 : }
    3823             : 
    3824             : // ------------------------------------------------------------------------
    3825             : 
    3826           0 : MetaAction* MetaEPSAction::Clone()
    3827             : {
    3828           0 :     MetaAction* pClone = (MetaAction*) new MetaEPSAction( *this );
    3829           0 :     pClone->ResetRefCount();
    3830           0 :     return pClone;
    3831             : }
    3832             : 
    3833             : // ------------------------------------------------------------------------
    3834             : 
    3835           0 : void MetaEPSAction::Move( long nHorzMove, long nVertMove )
    3836             : {
    3837           0 :     maPoint.Move( nHorzMove, nVertMove );
    3838           0 : }
    3839             : 
    3840             : // ------------------------------------------------------------------------
    3841             : 
    3842           0 : void MetaEPSAction::Scale( double fScaleX, double fScaleY )
    3843             : {
    3844           0 :     Rectangle aRectangle(maPoint, maSize);
    3845           0 :     ImplScaleRect( aRectangle, fScaleX, fScaleY );
    3846           0 :     maPoint = aRectangle.TopLeft();
    3847           0 :     maSize = aRectangle.GetSize();
    3848           0 : }
    3849             : 
    3850             : // ------------------------------------------------------------------------
    3851             : 
    3852           0 : sal_Bool MetaEPSAction::Compare( const MetaAction& rMetaAction ) const
    3853             : {
    3854           0 :     return ( maGfxLink.IsEqual(((MetaEPSAction&)rMetaAction).maGfxLink )) &&
    3855           0 :            ( maSubst == ((MetaEPSAction&)rMetaAction).maSubst ) &&
    3856           0 :            ( maPoint == ((MetaEPSAction&)rMetaAction).maPoint ) &&
    3857           0 :            ( maSize == ((MetaEPSAction&)rMetaAction).maSize );
    3858             : }
    3859             : 
    3860             : // ------------------------------------------------------------------------
    3861             : 
    3862           0 : void MetaEPSAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    3863             : {
    3864           0 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
    3865           0 :     rOStm << maGfxLink;
    3866           0 :     rOStm << maPoint;
    3867           0 :     rOStm << maSize;
    3868           0 :     maSubst.Write( rOStm );
    3869           0 : }
    3870             : 
    3871             : // ------------------------------------------------------------------------
    3872             : 
    3873           0 : void MetaEPSAction::Read( SvStream& rIStm, ImplMetaReadData* )
    3874             : {
    3875           0 :     COMPAT( rIStm );
    3876           0 :     rIStm >> maGfxLink;
    3877           0 :     rIStm >> maPoint;
    3878           0 :     rIStm >> maSize;
    3879           0 :     rIStm >> maSubst;
    3880           0 : }
    3881             : 
    3882             : // ========================================================================
    3883             : 
    3884           0 : IMPL_META_ACTION( RefPoint, META_REFPOINT_ACTION )
    3885             : 
    3886             : // ------------------------------------------------------------------------
    3887             : 
    3888           0 : MetaRefPointAction::MetaRefPointAction( const Point& rRefPoint, sal_Bool bSet ) :
    3889             :     MetaAction  ( META_REFPOINT_ACTION ),
    3890             :     maRefPoint  ( rRefPoint ),
    3891           0 :     mbSet       ( bSet )
    3892             : {
    3893           0 : }
    3894             : 
    3895             : // ------------------------------------------------------------------------
    3896             : 
    3897           0 : void MetaRefPointAction::Execute( OutputDevice* pOut )
    3898             : {
    3899           0 :     if( mbSet )
    3900           0 :         pOut->SetRefPoint( maRefPoint );
    3901             :     else
    3902           0 :         pOut->SetRefPoint();
    3903           0 : }
    3904             : 
    3905             : // ------------------------------------------------------------------------
    3906             : 
    3907           0 : MetaAction* MetaRefPointAction::Clone()
    3908             : {
    3909           0 :     MetaAction* pClone = (MetaAction*) new MetaRefPointAction( *this );
    3910           0 :     pClone->ResetRefCount();
    3911           0 :     return pClone;
    3912             : }
    3913             : 
    3914             : // ------------------------------------------------------------------------
    3915             : 
    3916           0 : sal_Bool MetaRefPointAction::Compare( const MetaAction& rMetaAction ) const
    3917             : {
    3918           0 :     return ( maRefPoint == ((MetaRefPointAction&)rMetaAction).maRefPoint ) &&
    3919           0 :            ( mbSet == ((MetaRefPointAction&)rMetaAction).mbSet );
    3920             : }
    3921             : 
    3922             : // ------------------------------------------------------------------------
    3923             : 
    3924           0 : void MetaRefPointAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    3925             : {
    3926           0 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
    3927           0 :     rOStm << maRefPoint << mbSet;
    3928           0 : }
    3929             : 
    3930             : // ------------------------------------------------------------------------
    3931             : 
    3932           0 : void MetaRefPointAction::Read( SvStream& rIStm, ImplMetaReadData* )
    3933             : {
    3934           0 :     COMPAT( rIStm );
    3935           0 :     rIStm >> maRefPoint >> mbSet;
    3936           0 : }
    3937             : 
    3938             : // ========================================================================
    3939             : 
    3940           0 : MetaCommentAction::MetaCommentAction( sal_Int32 nValue ) :
    3941             :     MetaAction  ( META_COMMENT_ACTION ),
    3942           0 :     mnValue     ( nValue )
    3943             : {
    3944           0 :     ImplInitDynamicData( NULL, 0UL );
    3945           0 : }
    3946             : 
    3947             : // ------------------------------------------------------------------------
    3948             : 
    3949          21 : MetaCommentAction::MetaCommentAction( const MetaCommentAction& rAct ) :
    3950             :     MetaAction  ( META_COMMENT_ACTION ),
    3951             :     maComment   ( rAct.maComment ),
    3952          21 :     mnValue     ( rAct.mnValue )
    3953             : {
    3954          21 :     ImplInitDynamicData( rAct.mpData, rAct.mnDataSize );
    3955          21 : }
    3956             : 
    3957             : // ------------------------------------------------------------------------
    3958             : 
    3959         181 : MetaCommentAction::MetaCommentAction( const rtl::OString& rComment, sal_Int32 nValue, const sal_uInt8* pData, sal_uInt32 nDataSize ) :
    3960             :     MetaAction  ( META_COMMENT_ACTION ),
    3961             :     maComment   ( rComment ),
    3962         181 :     mnValue     ( nValue )
    3963             : {
    3964         181 :     ImplInitDynamicData( pData, nDataSize );
    3965         181 : }
    3966             : 
    3967             : // ------------------------------------------------------------------------
    3968             : 
    3969         468 : MetaCommentAction::~MetaCommentAction()
    3970             : {
    3971         156 :     if ( mpData )
    3972          74 :         delete[] mpData;
    3973         312 : }
    3974             : 
    3975             : // ------------------------------------------------------------------------
    3976             : 
    3977         203 : void MetaCommentAction::ImplInitDynamicData( const sal_uInt8* pData, sal_uInt32 nDataSize )
    3978             : {
    3979         203 :     if ( nDataSize && pData )
    3980             :     {
    3981         121 :         mnDataSize = nDataSize, mpData = new sal_uInt8[ mnDataSize ];
    3982         121 :         memcpy( mpData, pData, mnDataSize );
    3983             :     }
    3984             :     else
    3985             :     {
    3986          82 :         mnDataSize = 0;
    3987          82 :         mpData = NULL;
    3988             :     }
    3989         203 : }
    3990             : 
    3991             : // ------------------------------------------------------------------------
    3992             : 
    3993          42 : void MetaCommentAction::Execute( OutputDevice* pOut )
    3994             : {
    3995          42 :     if ( pOut->GetConnectMetaFile() )
    3996             :     {
    3997           0 :         Duplicate();
    3998           0 :         pOut->GetConnectMetaFile()->AddAction( this );
    3999             :     }
    4000          42 : }
    4001             : 
    4002             : // ------------------------------------------------------------------------
    4003             : 
    4004          21 : MetaAction* MetaCommentAction::Clone()
    4005             : {
    4006          21 :     MetaAction* pClone = (MetaAction*) new MetaCommentAction( *this );
    4007          21 :     pClone->ResetRefCount();
    4008          21 :     return pClone;
    4009             : }
    4010             : 
    4011           0 : void MetaCommentAction::Move( long nXMove, long nYMove )
    4012             : {
    4013           0 :     if ( nXMove || nYMove )
    4014             :     {
    4015           0 :         if ( mnDataSize && mpData )
    4016             :         {
    4017           0 :             sal_Bool bPathStroke = maComment.equalsL(RTL_CONSTASCII_STRINGPARAM("XPATHSTROKE_SEQ_BEGIN"));
    4018           0 :             if ( bPathStroke || maComment.equalsL(RTL_CONSTASCII_STRINGPARAM("XPATHFILL_SEQ_BEGIN")) )
    4019             :             {
    4020           0 :                 SvMemoryStream  aMemStm( (void*)mpData, mnDataSize, STREAM_READ );
    4021           0 :                 SvMemoryStream  aDest;
    4022           0 :                 if ( bPathStroke )
    4023             :                 {
    4024           0 :                     SvtGraphicStroke aStroke;
    4025           0 :                     aMemStm >> aStroke;
    4026           0 :                     Polygon aPath;
    4027           0 :                     aStroke.getPath( aPath );
    4028           0 :                     aPath.Move( nXMove, nYMove );
    4029           0 :                     aStroke.setPath( aPath );
    4030           0 :                     aDest << aStroke;
    4031             :                 }
    4032             :                 else
    4033             :                 {
    4034           0 :                     SvtGraphicFill aFill;
    4035           0 :                     aMemStm >> aFill;
    4036           0 :                     PolyPolygon aPath;
    4037           0 :                     aFill.getPath( aPath );
    4038           0 :                     aPath.Move( nXMove, nYMove );
    4039           0 :                     aFill.setPath( aPath );
    4040           0 :                     aDest << aFill;
    4041             :                 }
    4042           0 :                 delete[] mpData;
    4043           0 :                 ImplInitDynamicData( static_cast<const sal_uInt8*>( aDest.GetData() ), aDest.Tell() );
    4044             :             }
    4045             :         }
    4046             :     }
    4047           0 : }
    4048             : 
    4049             : // ------------------------------------------------------------------------
    4050             : // SJ: 25.07.06 #i56656# we are not able to mirrorcertain kind of
    4051             : // comments properly, especially the XPATHSTROKE and XPATHFILL lead to
    4052             : // problems, so it is better to remove these comments when mirroring
    4053             : // FIXME: fake comment to apply the next hunk in the right location
    4054          21 : void MetaCommentAction::Scale( double fXScale, double fYScale )
    4055             : {
    4056          21 :     if ( ( fXScale != 1.0 ) || ( fYScale != 1.0 ) )
    4057             :     {
    4058          21 :         if ( mnDataSize && mpData )
    4059             :         {
    4060          21 :             sal_Bool bPathStroke = maComment.equalsL(RTL_CONSTASCII_STRINGPARAM("XPATHSTROKE_SEQ_BEGIN"));
    4061          21 :             if ( bPathStroke || maComment.equalsL(RTL_CONSTASCII_STRINGPARAM("XPATHFILL_SEQ_BEGIN")) )
    4062             :             {
    4063           0 :                 SvMemoryStream  aMemStm( (void*)mpData, mnDataSize, STREAM_READ );
    4064           0 :                 SvMemoryStream  aDest;
    4065           0 :                 if ( bPathStroke )
    4066             :                 {
    4067           0 :                     SvtGraphicStroke aStroke;
    4068           0 :                     aMemStm >> aStroke;
    4069           0 :                     Polygon aPath;
    4070           0 :                     aStroke.getPath( aPath );
    4071           0 :                     aPath.Scale( fXScale, fYScale );
    4072           0 :                     aStroke.setPath( aPath );
    4073           0 :                     aDest << aStroke;
    4074             :                 }
    4075             :                 else
    4076             :                 {
    4077           0 :                     SvtGraphicFill aFill;
    4078           0 :                     aMemStm >> aFill;
    4079           0 :                     PolyPolygon aPath;
    4080           0 :                     aFill.getPath( aPath );
    4081           0 :                     aPath.Scale( fXScale, fYScale );
    4082           0 :                     aFill.setPath( aPath );
    4083           0 :                     aDest << aFill;
    4084             :                 }
    4085           0 :                 delete[] mpData;
    4086           0 :                 ImplInitDynamicData( static_cast<const sal_uInt8*>( aDest.GetData() ), aDest.Tell() );
    4087          21 :             } else if( maComment.equalsL(RTL_CONSTASCII_STRINGPARAM("EMF_PLUS_HEADER_INFO")) ){
    4088           1 :                 SvMemoryStream  aMemStm( (void*)mpData, mnDataSize, STREAM_READ );
    4089           1 :                 SvMemoryStream  aDest;
    4090             : 
    4091             :                 sal_Int32 nLeft, nRight, nTop, nBottom;
    4092             :                 sal_Int32 nPixX, nPixY, nMillX, nMillY;
    4093             :                 float m11, m12, m21, m22, mdx, mdy;
    4094             : 
    4095             :                 // read data
    4096           1 :                 aMemStm >> nLeft >> nTop >> nRight >> nBottom;
    4097           1 :                 aMemStm >> nPixX >> nPixY >> nMillX >> nMillY;
    4098           1 :                 aMemStm >> m11 >> m12 >> m21 >> m22 >> mdx >> mdy;
    4099             : 
    4100             :                 // add scale to the transformation
    4101           1 :                 m11 *= fXScale;
    4102           1 :                 m12 *= fXScale;
    4103           1 :                 m22 *= fYScale;
    4104           1 :                 m21 *= fYScale;
    4105             : 
    4106             :                 // prepare new data
    4107           1 :                 aDest << nLeft << nTop << nRight << nBottom;
    4108           1 :                 aDest << nPixX << nPixY << nMillX << nMillY;
    4109           1 :                 aDest << m11 << m12 << m21 << m22 << mdx << mdy;
    4110             : 
    4111             :                 // save them
    4112           1 :                 ImplInitDynamicData( static_cast<const sal_uInt8*>( aDest.GetData() ), aDest.Tell() );
    4113             :             }
    4114             :         }
    4115             :     }
    4116          21 : }
    4117             : 
    4118             : // ------------------------------------------------------------------------
    4119             : 
    4120           0 : sal_Bool MetaCommentAction::Compare( const MetaAction& rMetaAction ) const
    4121             : {
    4122           0 :     return ( maComment == ((MetaCommentAction&)rMetaAction).maComment ) &&
    4123             :            ( mnValue == ((MetaCommentAction&)rMetaAction).mnValue ) &&
    4124             :            ( mnDataSize == ((MetaCommentAction&)rMetaAction).mnDataSize ) &&
    4125           0 :            ( memcmp( mpData, ((MetaCommentAction&)rMetaAction).mpData, mnDataSize ) == 0 );
    4126             : }
    4127             : 
    4128             : // ------------------------------------------------------------------------
    4129             : 
    4130          75 : void MetaCommentAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    4131             : {
    4132          75 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
    4133          75 :     write_lenPrefixed_uInt8s_FromOString<sal_uInt16>(rOStm, maComment);
    4134          75 :     rOStm << mnValue << mnDataSize;
    4135             : 
    4136          75 :     if ( mnDataSize )
    4137          75 :         rOStm.Write( mpData, mnDataSize );
    4138          75 : }
    4139             : 
    4140             : // ------------------------------------------------------------------------
    4141             : 
    4142           0 : void MetaCommentAction::Read( SvStream& rIStm, ImplMetaReadData* )
    4143             : {
    4144           0 :     COMPAT( rIStm );
    4145           0 :     maComment = read_lenPrefixed_uInt8s_ToOString<sal_uInt16>(rIStm);
    4146           0 :     rIStm >> mnValue >> mnDataSize;
    4147             : 
    4148           0 :     delete[] mpData;
    4149             : 
    4150           0 :     if( mnDataSize )
    4151             :     {
    4152           0 :         mpData = new sal_uInt8[ mnDataSize ];
    4153           0 :         rIStm.Read( mpData, mnDataSize );
    4154             :     }
    4155             :     else
    4156           0 :         mpData = NULL;
    4157           0 : }
    4158             : 
    4159             : // ========================================================================
    4160             : 
    4161       22608 : IMPL_META_ACTION( LayoutMode, META_LAYOUTMODE_ACTION )
    4162             : 
    4163             : // ------------------------------------------------------------------------
    4164             : 
    4165        4581 : MetaLayoutModeAction::MetaLayoutModeAction( sal_uInt32 nLayoutMode ) :
    4166             :     MetaAction  ( META_LAYOUTMODE_ACTION ),
    4167        4581 :     mnLayoutMode( nLayoutMode )
    4168             : {
    4169        4581 : }
    4170             : 
    4171             : // ------------------------------------------------------------------------
    4172             : 
    4173         339 : void MetaLayoutModeAction::Execute( OutputDevice* pOut )
    4174             : {
    4175         339 :     pOut->SetLayoutMode( mnLayoutMode );
    4176         339 : }
    4177             : 
    4178             : // ------------------------------------------------------------------------
    4179             : 
    4180           0 : MetaAction* MetaLayoutModeAction::Clone()
    4181             : {
    4182           0 :     MetaAction* pClone = (MetaAction*) new MetaLayoutModeAction( *this );
    4183           0 :     pClone->ResetRefCount();
    4184           0 :     return pClone;
    4185             : }
    4186             : 
    4187             : // ------------------------------------------------------------------------
    4188             : 
    4189           0 : sal_Bool MetaLayoutModeAction::Compare( const MetaAction& rMetaAction ) const
    4190             : {
    4191           0 :     return mnLayoutMode == ((MetaLayoutModeAction&)rMetaAction).mnLayoutMode;
    4192             : }
    4193             : 
    4194             : // ------------------------------------------------------------------------
    4195             : 
    4196        4862 : void MetaLayoutModeAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    4197             : {
    4198        4862 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
    4199        4862 :     rOStm << mnLayoutMode;
    4200        4862 : }
    4201             : 
    4202             : // ------------------------------------------------------------------------
    4203             : 
    4204        4578 : void MetaLayoutModeAction::Read( SvStream& rIStm, ImplMetaReadData* )
    4205             : {
    4206        4578 :     COMPAT( rIStm );
    4207        4578 :     rIStm >> mnLayoutMode;
    4208        4578 : }
    4209             : 
    4210             : // ========================================================================
    4211             : 
    4212       33948 : IMPL_META_ACTION( TextLanguage, META_TEXTLANGUAGE_ACTION )
    4213             : 
    4214             : // ------------------------------------------------------------------------
    4215             : 
    4216        6892 : MetaTextLanguageAction::MetaTextLanguageAction( LanguageType eTextLanguage ) :
    4217             :     MetaAction  ( META_TEXTLANGUAGE_ACTION ),
    4218        6892 :     meTextLanguage( eTextLanguage )
    4219             : {
    4220        6892 : }
    4221             : 
    4222             : // ------------------------------------------------------------------------
    4223             : 
    4224         517 : void MetaTextLanguageAction::Execute( OutputDevice* pOut )
    4225             : {
    4226         517 :     pOut->SetDigitLanguage( meTextLanguage );
    4227         517 : }
    4228             : 
    4229             : // ------------------------------------------------------------------------
    4230             : 
    4231           0 : MetaAction* MetaTextLanguageAction::Clone()
    4232             : {
    4233           0 :     MetaAction* pClone = (MetaAction*) new MetaTextLanguageAction( *this );
    4234           0 :     pClone->ResetRefCount();
    4235           0 :     return pClone;
    4236             : }
    4237             : 
    4238             : // ------------------------------------------------------------------------
    4239             : 
    4240           0 : sal_Bool MetaTextLanguageAction::Compare( const MetaAction& rMetaAction ) const
    4241             : {
    4242           0 :     return meTextLanguage == ((MetaTextLanguageAction&)rMetaAction).meTextLanguage;
    4243             : }
    4244             : 
    4245             : // ------------------------------------------------------------------------
    4246             : 
    4247        7295 : void MetaTextLanguageAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
    4248             : {
    4249        7295 :     WRITE_BASE_COMPAT( rOStm, 1, pData );
    4250        7295 :     rOStm << meTextLanguage;
    4251        7295 : }
    4252             : 
    4253             : // ------------------------------------------------------------------------
    4254             : 
    4255        6866 : void MetaTextLanguageAction::Read( SvStream& rIStm, ImplMetaReadData* )
    4256             : {
    4257        6866 :     COMPAT( rIStm );
    4258        6866 :     rIStm >> meTextLanguage;
    4259        6866 : }
    4260             : 
    4261             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10