LCOV - code coverage report
Current view: top level - vcl/source/gdi - mapmod.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 115 116 99.1 %
Date: 2012-08-25 Functions: 20 20 100.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 61 82 74.4 %

           Branch data     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 <tools/stream.hxx>
      21                 :            : #include <tools/vcompat.hxx>
      22                 :            : #include <tools/debug.hxx>
      23                 :            : #include <vcl/mapmod.hxx>
      24                 :            : 
      25                 :            : // =======================================================================
      26                 :            : 
      27                 :            : DBG_NAME( MapMode )
      28                 :            : 
      29                 :            : // -----------------------------------------------------------------------
      30                 :            : 
      31                 :      37555 : ImplMapMode::ImplMapMode() :
      32                 :            :     maOrigin( 0, 0 ),
      33                 :            :     maScaleX( 1, 1 ),
      34                 :      37555 :     maScaleY( 1, 1 )
      35                 :            : {
      36                 :      37555 :     mnRefCount  = 1;
      37                 :      37555 :     meUnit      = MAP_PIXEL;
      38                 :      37555 :     mbSimple    = sal_False;
      39                 :      37555 : }
      40                 :            : 
      41                 :            : // -----------------------------------------------------------------------
      42                 :            : 
      43                 :      49903 : ImplMapMode::ImplMapMode( const ImplMapMode& rImplMapMode ) :
      44                 :            :     maOrigin( rImplMapMode.maOrigin ),
      45                 :            :     maScaleX( rImplMapMode.maScaleX ),
      46                 :      49903 :     maScaleY( rImplMapMode.maScaleY )
      47                 :            : {
      48                 :      49903 :     mnRefCount      = 1;
      49                 :      49903 :     meUnit          = rImplMapMode.meUnit;
      50                 :      49903 :     mbSimple        = sal_False;
      51                 :      49903 : }
      52                 :            : 
      53                 :            : // -----------------------------------------------------------------------
      54                 :            : 
      55                 :       8845 : SvStream& operator>>( SvStream& rIStm, ImplMapMode& rImplMapMode )
      56                 :            : {
      57         [ +  - ]:       8845 :     VersionCompat   aCompat( rIStm, STREAM_READ );
      58                 :            :     sal_uInt16          nTmp16;
      59                 :            : 
      60         [ +  - ]:       8845 :     rIStm >> nTmp16; rImplMapMode.meUnit = (MapUnit) nTmp16;
      61 [ +  - ][ +  - ]:       8845 :     rIStm >> rImplMapMode.maOrigin >> rImplMapMode.maScaleX >>
      62 [ +  - ][ +  - ]:       8845 :              rImplMapMode.maScaleY >> rImplMapMode.mbSimple;
      63                 :            : 
      64         [ +  - ]:       8845 :     return rIStm;
      65                 :            : }
      66                 :            : 
      67                 :            : // -----------------------------------------------------------------------
      68                 :            : 
      69                 :       9422 : SvStream& operator<<( SvStream& rOStm, const ImplMapMode& rImplMapMode )
      70                 :            : {
      71         [ +  - ]:       9422 :     VersionCompat aCompat( rOStm, STREAM_WRITE, 1 );
      72                 :            : 
      73         [ +  - ]:       9422 :     rOStm << (sal_uInt16) rImplMapMode.meUnit <<
      74         [ +  - ]:       9422 :              rImplMapMode.maOrigin <<
      75         [ +  - ]:       9422 :              rImplMapMode.maScaleX <<
      76         [ +  - ]:       9422 :              rImplMapMode.maScaleY <<
      77         [ +  - ]:       9422 :              rImplMapMode.mbSimple;
      78                 :            : 
      79         [ +  - ]:       9422 :     return rOStm;
      80                 :            : }
      81                 :            : 
      82                 :            : // -----------------------------------------------------------------------
      83                 :            : 
      84                 :    7159374 : ImplMapMode* ImplMapMode::ImplGetStaticMapMode( MapUnit eUnit )
      85                 :            : {
      86                 :            :     static long aStaticImplMapModeAry[(MAP_LASTENUMDUMMY)*sizeof(ImplMapMode)/sizeof(long)];
      87                 :            : 
      88                 :            :     // #i19496 check for out-of-bounds
      89         [ -  + ]:    7159374 :      if( eUnit >= MAP_LASTENUMDUMMY )
      90                 :          0 :         return (ImplMapMode*)aStaticImplMapModeAry;
      91                 :            : 
      92                 :    7159374 :     ImplMapMode* pImplMapMode = ((ImplMapMode*)aStaticImplMapModeAry)+eUnit;
      93         [ +  + ]:    7159374 :     if ( !pImplMapMode->mbSimple )
      94                 :            :     {
      95         [ +  - ]:        911 :         Fraction aDefFraction( 1, 1 );
      96         [ +  - ]:        911 :         pImplMapMode->maScaleX  = aDefFraction;
      97         [ +  - ]:        911 :         pImplMapMode->maScaleY  = aDefFraction;
      98                 :        911 :         pImplMapMode->meUnit    = eUnit;
      99                 :        911 :         pImplMapMode->mbSimple  = sal_True;
     100                 :            :     }
     101                 :            : 
     102                 :    7159374 :     return pImplMapMode;
     103                 :            : }
     104                 :            : 
     105                 :            : // -----------------------------------------------------------------------
     106                 :            : 
     107                 :     127155 : inline void MapMode::ImplMakeUnique()
     108                 :            : {
     109                 :            :     // Falls noch andere Referenzen bestehen, dann kopieren
     110         [ +  + ]:     127155 :     if ( mpImplMapMode->mnRefCount != 1 )
     111                 :            :     {
     112         [ +  + ]:      49903 :         if ( mpImplMapMode->mnRefCount )
     113                 :      18550 :             mpImplMapMode->mnRefCount--;
     114         [ +  - ]:      49903 :         mpImplMapMode = new ImplMapMode( *mpImplMapMode );
     115                 :            :     }
     116                 :     127155 : }
     117                 :            : 
     118                 :            : // -----------------------------------------------------------------------
     119                 :            : 
     120                 :    6225401 : MapMode::MapMode()
     121                 :            : {
     122                 :            :     DBG_CTOR( MapMode, NULL );
     123                 :            : 
     124                 :    6225401 :     mpImplMapMode = ImplMapMode::ImplGetStaticMapMode( MAP_PIXEL );
     125                 :    6225401 : }
     126                 :            : 
     127                 :            : // -----------------------------------------------------------------------
     128                 :            : 
     129                 :    4082122 : MapMode::MapMode( const MapMode& rMapMode )
     130                 :            : {
     131                 :            :     DBG_CTOR( MapMode, NULL );
     132                 :            :     DBG_CHKOBJ( &rMapMode, MapMode, NULL );
     133                 :            :     DBG_ASSERT( rMapMode.mpImplMapMode->mnRefCount < 0xFFFFFFFE, "MapMode: RefCount overflow" );
     134                 :            : 
     135                 :            :     // shared Instance Daten uebernehmen und Referenzcounter erhoehen
     136                 :    4082122 :     mpImplMapMode = rMapMode.mpImplMapMode;
     137                 :            :     // RefCount == 0 fuer statische Objekte
     138         [ +  + ]:    4082122 :     if ( mpImplMapMode->mnRefCount )
     139                 :     469756 :         mpImplMapMode->mnRefCount++;
     140                 :    4082122 : }
     141                 :            : 
     142                 :            : // -----------------------------------------------------------------------
     143                 :            : 
     144                 :     128259 : MapMode::MapMode( MapUnit eUnit )
     145                 :            : {
     146                 :            :     DBG_CTOR( MapMode, NULL );
     147                 :            : 
     148                 :     128259 :     mpImplMapMode = ImplMapMode::ImplGetStaticMapMode( eUnit );
     149                 :     128259 : }
     150                 :            : 
     151                 :            : // -----------------------------------------------------------------------
     152                 :            : 
     153                 :      37555 : MapMode::MapMode( MapUnit eUnit, const Point& rLogicOrg,
     154                 :            :                   const Fraction& rScaleX, const Fraction& rScaleY )
     155                 :            : {
     156                 :            :     DBG_CTOR( MapMode, NULL );
     157                 :            : 
     158         [ +  - ]:      37555 :     mpImplMapMode           = new ImplMapMode;
     159                 :      37555 :     mpImplMapMode->meUnit   = eUnit;
     160                 :      37555 :     mpImplMapMode->maOrigin = rLogicOrg;
     161                 :      37555 :     mpImplMapMode->maScaleX = rScaleX;
     162                 :      37555 :     mpImplMapMode->maScaleY = rScaleY;
     163                 :      37555 : }
     164                 :            : 
     165                 :            : // -----------------------------------------------------------------------
     166                 :            : 
     167                 :   10461227 : MapMode::~MapMode()
     168                 :            : {
     169                 :            :     DBG_DTOR( MapMode, NULL );
     170                 :            : 
     171                 :            :     // Wenn es keine statischen ImpDaten sind, dann loeschen, wenn es
     172                 :            :     // die letzte Referenz ist, sonst Referenzcounter decrementieren
     173         [ +  + ]:   10461227 :     if ( mpImplMapMode->mnRefCount )
     174                 :            :     {
     175         [ +  + ]:     573347 :         if ( mpImplMapMode->mnRefCount == 1 )
     176                 :      83266 :             delete mpImplMapMode;
     177                 :            :         else
     178                 :     490081 :             mpImplMapMode->mnRefCount--;
     179                 :            :     }
     180                 :   10461227 : }
     181                 :            : 
     182                 :            : // -----------------------------------------------------------------------
     183                 :            : 
     184                 :       8209 : void MapMode::SetMapUnit( MapUnit eUnit )
     185                 :            : {
     186                 :            :     DBG_CHKTHIS( MapMode, NULL );
     187                 :            : 
     188                 :       8209 :     ImplMakeUnique();
     189                 :       8209 :     mpImplMapMode->meUnit = eUnit;
     190                 :       8209 : }
     191                 :            : 
     192                 :            : // -----------------------------------------------------------------------
     193                 :            : 
     194                 :      60079 : void MapMode::SetOrigin( const Point& rLogicOrg )
     195                 :            : {
     196                 :            :     DBG_CHKTHIS( MapMode, NULL );
     197                 :            : 
     198                 :      60079 :     ImplMakeUnique();
     199                 :      60079 :     mpImplMapMode->maOrigin = rLogicOrg;
     200                 :      60079 : }
     201                 :            : 
     202                 :            : // -----------------------------------------------------------------------
     203                 :            : 
     204                 :      25011 : void MapMode::SetScaleX( const Fraction& rScaleX )
     205                 :            : {
     206                 :            :     DBG_CHKTHIS( MapMode, NULL );
     207                 :            : 
     208                 :      25011 :     ImplMakeUnique();
     209                 :      25011 :     mpImplMapMode->maScaleX = rScaleX;
     210                 :      25011 : }
     211                 :            : 
     212                 :            : // -----------------------------------------------------------------------
     213                 :            : 
     214                 :      25011 : void MapMode::SetScaleY( const Fraction& rScaleY )
     215                 :            : {
     216                 :            :     DBG_CHKTHIS( MapMode, NULL );
     217                 :            : 
     218                 :      25011 :     ImplMakeUnique();
     219                 :      25011 :     mpImplMapMode->maScaleY = rScaleY;
     220                 :      25011 : }
     221                 :            : 
     222                 :            : // -----------------------------------------------------------------------
     223                 :            : 
     224                 :    4552857 : MapMode& MapMode::operator=( const MapMode& rMapMode )
     225                 :            : {
     226                 :            :     DBG_CHKTHIS( MapMode, NULL );
     227                 :            :     DBG_CHKOBJ( &rMapMode, MapMode, NULL );
     228                 :            :     DBG_ASSERT( rMapMode.mpImplMapMode->mnRefCount < 0xFFFFFFFE, "MapMode: RefCount overflow" );
     229                 :            : 
     230                 :            :     // Zuerst Referenzcounter erhoehen, damit man sich selbst zuweisen kann
     231                 :            :     // RefCount == 0 fuer statische Objekte
     232         [ +  + ]:    4552857 :     if ( rMapMode.mpImplMapMode->mnRefCount )
     233                 :     100348 :         rMapMode.mpImplMapMode->mnRefCount++;
     234                 :            : 
     235                 :            :     // Wenn es keine statischen ImpDaten sind, dann loeschen, wenn es
     236                 :            :     // die letzte Referenz ist, sonst Referenzcounter decrementieren
     237         [ +  + ]:    4552857 :     if ( mpImplMapMode->mnRefCount )
     238                 :            :     {
     239         [ +  + ]:      64948 :         if ( mpImplMapMode->mnRefCount == 1 )
     240                 :       3525 :             delete mpImplMapMode;
     241                 :            :         else
     242                 :      61423 :             mpImplMapMode->mnRefCount--;
     243                 :            :     }
     244                 :            : 
     245                 :    4552857 :     mpImplMapMode = rMapMode.mpImplMapMode;
     246                 :            : 
     247                 :    4552857 :     return *this;
     248                 :            : }
     249                 :            : 
     250                 :            : // -----------------------------------------------------------------------
     251                 :            : 
     252                 :     545547 : sal_Bool MapMode::operator==( const MapMode& rMapMode ) const
     253                 :            : {
     254                 :            :     DBG_CHKTHIS( MapMode, NULL );
     255                 :            :     DBG_CHKOBJ( &rMapMode, MapMode, NULL );
     256                 :            : 
     257         [ +  + ]:     545547 :     if ( mpImplMapMode == rMapMode.mpImplMapMode )
     258                 :     297978 :         return sal_True;
     259                 :            : 
     260   [ +  +  +  +  :     457556 :     if ( (mpImplMapMode->meUnit   == rMapMode.mpImplMapMode->meUnit)   &&
             +  +  +  + ]
                 [ +  + ]
     261                 :      76760 :          (mpImplMapMode->maOrigin == rMapMode.mpImplMapMode->maOrigin) &&
     262                 :      67190 :          (mpImplMapMode->maScaleX == rMapMode.mpImplMapMode->maScaleX) &&
     263                 :      66037 :          (mpImplMapMode->maScaleY == rMapMode.mpImplMapMode->maScaleY) )
     264                 :      65941 :         return sal_True;
     265                 :            :     else
     266                 :     545547 :         return sal_False;
     267                 :            : }
     268                 :            : 
     269                 :            : // -----------------------------------------------------------------------
     270                 :            : 
     271                 :     805714 : sal_Bool MapMode::IsDefault() const
     272                 :            : {
     273                 :            :     DBG_CHKTHIS( MapMode, NULL );
     274                 :            : 
     275                 :     805714 :     ImplMapMode* pDefMapMode = ImplMapMode::ImplGetStaticMapMode( MAP_PIXEL );
     276         [ +  + ]:     805714 :     if ( mpImplMapMode == pDefMapMode )
     277                 :      80571 :         return sal_True;
     278                 :            : 
     279   [ +  +  +  +  :     731881 :     if ( (mpImplMapMode->meUnit   == pDefMapMode->meUnit)   &&
             +  +  +  - ]
                 [ +  + ]
     280                 :       6121 :          (mpImplMapMode->maOrigin == pDefMapMode->maOrigin) &&
     281                 :        581 :          (mpImplMapMode->maScaleX == pDefMapMode->maScaleX) &&
     282                 :         36 :          (mpImplMapMode->maScaleY == pDefMapMode->maScaleY) )
     283                 :         36 :         return sal_True;
     284                 :            :     else
     285                 :     805714 :         return sal_False;
     286                 :            : }
     287                 :            : 
     288                 :            : // -----------------------------------------------------------------------
     289                 :            : 
     290                 :       8845 : SvStream& operator>>( SvStream& rIStm, MapMode& rMapMode )
     291                 :            : {
     292                 :       8845 :     rMapMode.ImplMakeUnique();
     293                 :       8845 :     return (rIStm >> *rMapMode.mpImplMapMode);
     294                 :            : }
     295                 :            : 
     296                 :            : // -----------------------------------------------------------------------
     297                 :            : 
     298                 :       9422 : SvStream& operator<<( SvStream& rOStm, const MapMode& rMapMode )
     299                 :            : {
     300                 :       9422 :     return (rOStm << *rMapMode.mpImplMapMode);
     301                 :            : }
     302                 :            : 
     303                 :            : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10