LCOV - code coverage report
Current view: top level - libreoffice/tools/source/generic - gen.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 89 92 96.7 %
Date: 2012-12-27 Functions: 11 11 100.0 %
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 <tools/debug.hxx>
      21             : #include <tools/gen.hxx>
      22             : #include <tools/stream.hxx>
      23             : 
      24       47333 : SvStream& operator>>( SvStream& rIStream, Pair& rPair )
      25             : {
      26             :     DBG_ASSERTWARNING( rIStream.GetVersion(), "Pair::>> - Solar-Version not set on rIStream" );
      27             : 
      28             :     //39428 SvStream no longer supports operator>>(long&)
      29       47333 :     sal_Int32 nTmpA(0), nTmpB(0);
      30       47333 :     rIStream >> nTmpA >> nTmpB;
      31       47333 :     rPair.nA = nTmpA;
      32       47333 :     rPair.nB = nTmpB;
      33             : 
      34       47333 :     return rIStream;
      35             : }
      36             : 
      37       50509 : SvStream& operator<<( SvStream& rOStream, const Pair& rPair )
      38             : {
      39             :     DBG_ASSERTWARNING( rOStream.GetVersion(), "Pair::<< - Solar-Version not set on rOStream" );
      40             : 
      41             :     //39428 SvStream no longer supports operator<<(long)
      42       50509 :     rOStream << sal::static_int_cast<sal_Int32>(rPair.nA) << sal::static_int_cast<sal_Int32>(rPair.nB);
      43             : 
      44       50509 :     return rOStream;
      45             : }
      46             : 
      47        5260 : void Rectangle::SetSize( const Size& rSize )
      48             : {
      49        5260 :     if ( rSize.Width() < 0 )
      50           0 :         nRight  = nLeft + rSize.Width() +1;
      51        5260 :     else if ( rSize.Width() > 0 )
      52        5259 :         nRight  = nLeft + rSize.Width() -1;
      53             :     else
      54           1 :         nRight = RECT_EMPTY;
      55             : 
      56        5260 :     if ( rSize.Height() < 0 )
      57           1 :         nBottom  = nTop + rSize.Height() +1;
      58        5259 :     else if ( rSize.Height() > 0 )
      59        5173 :         nBottom  = nTop + rSize.Height() -1;
      60             :     else
      61          86 :         nBottom = RECT_EMPTY;
      62        5260 : }
      63             : 
      64       28247 : Rectangle& Rectangle::Union( const Rectangle& rRect )
      65             : {
      66       28247 :     if ( rRect.IsEmpty() )
      67        9499 :         return *this;
      68             : 
      69       18748 :     if ( IsEmpty() )
      70        6069 :         *this = rRect;
      71             :     else
      72             :     {
      73       12679 :         nLeft  =  Min( Min( nLeft, rRect.nLeft ), Min( nRight, rRect.nRight )   );
      74       12679 :         nRight  = Max( Max( nLeft, rRect.nLeft ), Max( nRight, rRect.nRight )   );
      75       12679 :         nTop    = Min( Min( nTop, rRect.nTop ),   Min( nBottom, rRect.nBottom ) );
      76       12679 :         nBottom = Max( Max( nTop, rRect.nTop ),   Max( nBottom, rRect.nBottom ) );
      77             :     }
      78             : 
      79       18748 :     return *this;
      80             : }
      81             : 
      82        2867 : Rectangle& Rectangle::Intersection( const Rectangle& rRect )
      83             : {
      84        2867 :     if ( IsEmpty() )
      85          15 :         return *this;
      86        2852 :     if ( rRect.IsEmpty() )
      87             :     {
      88         959 :         *this = Rectangle();
      89         959 :         return *this;
      90             :     }
      91             : 
      92             :     // Justify rectangle
      93        1893 :     Rectangle aTmpRect( rRect );
      94        1893 :     Justify();
      95        1893 :     aTmpRect.Justify();
      96             : 
      97             :     // Perform intersection
      98        1893 :     nLeft  = Max( nLeft, aTmpRect.nLeft );
      99        1893 :     nRight = Min( nRight, aTmpRect.nRight );
     100        1893 :     nTop   = Max( nTop, aTmpRect.nTop );
     101        1893 :     nBottom= Min( nBottom, aTmpRect.nBottom );
     102             : 
     103             :     // Determine if intersection is empty
     104        1893 :     if ( nRight < nLeft || nBottom < nTop )
     105           8 :         *this = Rectangle();
     106             : 
     107        1893 :     return *this;
     108             : }
     109             : 
     110       51254 : void Rectangle::Justify()
     111             : {
     112             :     long nHelp;
     113             : 
     114       51254 :     if ( (nRight < nLeft) && (nRight != RECT_EMPTY) )
     115             :     {
     116          11 :         nHelp = nLeft;
     117          11 :         nLeft = nRight;
     118          11 :         nRight = nHelp;
     119             :     }
     120             : 
     121       51254 :     if ( (nBottom < nTop) && (nBottom != RECT_EMPTY) )
     122             :     {
     123          47 :         nHelp = nBottom;
     124          47 :         nBottom = nTop;
     125          47 :         nTop = nHelp;
     126             :     }
     127       51254 : }
     128             : 
     129        2803 : sal_Bool Rectangle::IsInside( const Point& rPoint ) const
     130             : {
     131        2803 :     if ( IsEmpty() )
     132         524 :         return sal_False;
     133             : 
     134        2279 :     sal_Bool bRet = sal_True;
     135        2279 :     if ( nLeft <= nRight )
     136             :     {
     137        2263 :         if ( (rPoint.X() < nLeft) || (rPoint.X() > nRight) )
     138         367 :             bRet = sal_False;
     139             :     }
     140             :     else
     141             :     {
     142          16 :         if ( (rPoint.X() > nLeft) || (rPoint.X() < nRight) )
     143           0 :             bRet = sal_False;
     144             :     }
     145        2279 :     if ( nTop <= nBottom )
     146             :     {
     147        2263 :         if ( (rPoint.Y() < nTop) || (rPoint.Y() > nBottom) )
     148         388 :             bRet = sal_False;
     149             :     }
     150             :     else
     151             :     {
     152          16 :         if ( (rPoint.Y() > nTop) || (rPoint.Y() < nBottom) )
     153           0 :             bRet = sal_False;
     154             :     }
     155        2279 :     return bRet;
     156             : }
     157             : 
     158         984 : sal_Bool Rectangle::IsInside( const Rectangle& rRect ) const
     159             : {
     160         984 :     if ( IsInside( rRect.TopLeft() ) && IsInside( rRect.BottomRight() ) )
     161         936 :         return sal_True;
     162             :     else
     163          48 :         return sal_False;
     164             : }
     165             : 
     166        1061 : sal_Bool Rectangle::IsOver( const Rectangle& rRect ) const
     167             : {
     168             :     // If there's no intersection, they don't overlap
     169        1061 :     return !GetIntersection( rRect ).IsEmpty();
     170             : }
     171             : 
     172        3504 : SvStream& operator>>( SvStream& rIStream, Rectangle& rRect )
     173             : {
     174             :     DBG_ASSERTWARNING( rIStream.GetVersion(), "Rectangle::>> - Solar-Version not set on rIStream" );
     175             : 
     176             :     //fdo#39428 SvStream no longer supports operator>>(long&)
     177        3504 :     sal_Int32 nTmpL(0), nTmpT(0), nTmpR(0), nTmpB(0);
     178             : 
     179        3504 :     rIStream >> nTmpL >> nTmpT >> nTmpR >> nTmpB;
     180             : 
     181        3504 :     rRect.nLeft = nTmpL;
     182        3504 :     rRect.nTop = nTmpT;
     183        3504 :     rRect.nRight = nTmpR;
     184        3504 :     rRect.nBottom = nTmpB;
     185             : 
     186        3504 :     return rIStream;
     187             : }
     188             : 
     189        3877 : SvStream& operator<<( SvStream& rOStream, const Rectangle& rRect )
     190             : {
     191             :     DBG_ASSERTWARNING( rOStream.GetVersion(), "Rectangle::<< - Solar-Version not set on rOStream" );
     192             : 
     193             :     //fdo#39428 SvStream no longer supports operator<<(long)
     194        3877 :     rOStream << sal::static_int_cast<sal_Int32>(rRect.nLeft)
     195        7754 :              << sal::static_int_cast<sal_Int32>(rRect.nTop)
     196        7754 :              << sal::static_int_cast<sal_Int32>(rRect.nRight)
     197        7754 :              << sal::static_int_cast<sal_Int32>(rRect.nBottom);
     198             : 
     199        3877 :     return rOStream;
     200             : }
     201             : 
     202             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10