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-17 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       94362 : 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       94362 :     sal_Int32 nTmpA(0), nTmpB(0);
      30       94362 :     rIStream >> nTmpA >> nTmpB;
      31       94362 :     rPair.nA = nTmpA;
      32       94362 :     rPair.nB = nTmpB;
      33             : 
      34       94362 :     return rIStream;
      35             : }
      36             : 
      37      100742 : 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      100742 :     rOStream << sal::static_int_cast<sal_Int32>(rPair.nA) << sal::static_int_cast<sal_Int32>(rPair.nB);
      43             : 
      44      100742 :     return rOStream;
      45             : }
      46             : 
      47       11958 : void Rectangle::SetSize( const Size& rSize )
      48             : {
      49       11958 :     if ( rSize.Width() < 0 )
      50           0 :         nRight  = nLeft + rSize.Width() +1;
      51       11958 :     else if ( rSize.Width() > 0 )
      52       11956 :         nRight  = nLeft + rSize.Width() -1;
      53             :     else
      54           2 :         nRight = RECT_EMPTY;
      55             : 
      56       11958 :     if ( rSize.Height() < 0 )
      57           2 :         nBottom  = nTop + rSize.Height() +1;
      58       11956 :     else if ( rSize.Height() > 0 )
      59       11783 :         nBottom  = nTop + rSize.Height() -1;
      60             :     else
      61         173 :         nBottom = RECT_EMPTY;
      62       11958 : }
      63             : 
      64       58864 : Rectangle& Rectangle::Union( const Rectangle& rRect )
      65             : {
      66       58864 :     if ( rRect.IsEmpty() )
      67       20233 :         return *this;
      68             : 
      69       38631 :     if ( IsEmpty() )
      70       12537 :         *this = rRect;
      71             :     else
      72             :     {
      73       26094 :         nLeft  =  Min( Min( nLeft, rRect.nLeft ), Min( nRight, rRect.nRight )   );
      74       26094 :         nRight  = Max( Max( nLeft, rRect.nLeft ), Max( nRight, rRect.nRight )   );
      75       26094 :         nTop    = Min( Min( nTop, rRect.nTop ),   Min( nBottom, rRect.nBottom ) );
      76       26094 :         nBottom = Max( Max( nTop, rRect.nTop ),   Max( nBottom, rRect.nBottom ) );
      77             :     }
      78             : 
      79       38631 :     return *this;
      80             : }
      81             : 
      82       10049 : Rectangle& Rectangle::Intersection( const Rectangle& rRect )
      83             : {
      84       10049 :     if ( IsEmpty() )
      85          89 :         return *this;
      86        9960 :     if ( rRect.IsEmpty() )
      87             :     {
      88        2228 :         *this = Rectangle();
      89        2228 :         return *this;
      90             :     }
      91             : 
      92             :     // Justify rectangle
      93        7732 :     Rectangle aTmpRect( rRect );
      94        7732 :     Justify();
      95        7732 :     aTmpRect.Justify();
      96             : 
      97             :     // Perform intersection
      98        7732 :     nLeft  = Max( nLeft, aTmpRect.nLeft );
      99        7732 :     nRight = Min( nRight, aTmpRect.nRight );
     100        7732 :     nTop   = Max( nTop, aTmpRect.nTop );
     101        7732 :     nBottom= Min( nBottom, aTmpRect.nBottom );
     102             : 
     103             :     // Determine if intersection is empty
     104        7732 :     if ( nRight < nLeft || nBottom < nTop )
     105        1449 :         *this = Rectangle();
     106             : 
     107        7732 :     return *this;
     108             : }
     109             : 
     110      126490 : void Rectangle::Justify()
     111             : {
     112             :     long nHelp;
     113             : 
     114      126490 :     if ( (nRight < nLeft) && (nRight != RECT_EMPTY) )
     115             :     {
     116          30 :         nHelp = nLeft;
     117          30 :         nLeft = nRight;
     118          30 :         nRight = nHelp;
     119             :     }
     120             : 
     121      126490 :     if ( (nBottom < nTop) && (nBottom != RECT_EMPTY) )
     122             :     {
     123          94 :         nHelp = nBottom;
     124          94 :         nBottom = nTop;
     125          94 :         nTop = nHelp;
     126             :     }
     127      126490 : }
     128             : 
     129        6431 : sal_Bool Rectangle::IsInside( const Point& rPoint ) const
     130             : {
     131        6431 :     if ( IsEmpty() )
     132        1256 :         return sal_False;
     133             : 
     134        5175 :     sal_Bool bRet = sal_True;
     135        5175 :     if ( nLeft <= nRight )
     136             :     {
     137        5143 :         if ( (rPoint.X() < nLeft) || (rPoint.X() > nRight) )
     138         917 :             bRet = sal_False;
     139             :     }
     140             :     else
     141             :     {
     142          32 :         if ( (rPoint.X() > nLeft) || (rPoint.X() < nRight) )
     143           0 :             bRet = sal_False;
     144             :     }
     145        5175 :     if ( nTop <= nBottom )
     146             :     {
     147        5143 :         if ( (rPoint.Y() < nTop) || (rPoint.Y() > nBottom) )
     148         967 :             bRet = sal_False;
     149             :     }
     150             :     else
     151             :     {
     152          32 :         if ( (rPoint.Y() > nTop) || (rPoint.Y() < nBottom) )
     153           0 :             bRet = sal_False;
     154             :     }
     155        5175 :     return bRet;
     156             : }
     157             : 
     158        2175 : sal_Bool Rectangle::IsInside( const Rectangle& rRect ) const
     159             : {
     160        2175 :     if ( IsInside( rRect.TopLeft() ) && IsInside( rRect.BottomRight() ) )
     161        2085 :         return sal_True;
     162             :     else
     163          90 :         return sal_False;
     164             : }
     165             : 
     166        4653 : sal_Bool Rectangle::IsOver( const Rectangle& rRect ) const
     167             : {
     168             :     // If there's no intersection, they don't overlap
     169        4653 :     return !GetIntersection( rRect ).IsEmpty();
     170             : }
     171             : 
     172        6976 : 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        6976 :     sal_Int32 nTmpL(0), nTmpT(0), nTmpR(0), nTmpB(0);
     178             : 
     179        6976 :     rIStream >> nTmpL >> nTmpT >> nTmpR >> nTmpB;
     180             : 
     181        6976 :     rRect.nLeft = nTmpL;
     182        6976 :     rRect.nTop = nTmpT;
     183        6976 :     rRect.nRight = nTmpR;
     184        6976 :     rRect.nBottom = nTmpB;
     185             : 
     186        6976 :     return rIStream;
     187             : }
     188             : 
     189        7800 : 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        7800 :     rOStream << sal::static_int_cast<sal_Int32>(rRect.nLeft)
     195       15600 :              << sal::static_int_cast<sal_Int32>(rRect.nTop)
     196       15600 :              << sal::static_int_cast<sal_Int32>(rRect.nRight)
     197       15600 :              << sal::static_int_cast<sal_Int32>(rRect.nBottom);
     198             : 
     199        7800 :     return rOStream;
     200             : }
     201             : 
     202             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10