16e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 26e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim// Copyright 2006-2007 Adobe Systems Incorporated 36e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim// All Rights Reserved. 46e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim// 56e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim// NOTICE: Adobe permits you to use, modify, and distribute this file in 66e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim// accordance with the terms of the Adobe license agreement accompanying it. 76e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 86e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 96e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_rect.h#2 $ */ 106e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/* $DateTime: 2012/06/01 07:28:57 $ */ 116e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/* $Change: 832715 $ */ 126e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/* $Author: tknoll $ */ 136e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 146e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 156e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 166e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#ifndef __dng_rect__ 176e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#define __dng_rect__ 186e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 196e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 206e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 216e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#include "dng_exceptions.h" 226e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#include "dng_point.h" 236e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#include "dng_safe_arithmetic.h" 246e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#include "dng_types.h" 256e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#include "dng_utils.h" 266e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 276e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 286e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 296e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimclass dng_rect 306e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 316e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 326e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim public: 336e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 346e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 t; 356e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 l; 366e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 b; 376e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 r; 386e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 396e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim public: 406e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 416e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim dng_rect () 426e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim : t (0) 436e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim , l (0) 446e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim , b (0) 456e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim , r (0) 466e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 476e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 486e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 496e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim // Constructs a dng_rect from the top-left and bottom-right corner. 506e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim // Throws an exception if the resulting height or width are too large to 516e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim // be represented as an int32. The intent of this is to protect code 526e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim // that may be computing the height or width directly from the member 536e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim // variables (instead of going through H() or W()). 546e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim dng_rect (int32 tt, int32 ll, int32 bb, int32 rr) 556e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim : t (tt) 566e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim , l (ll) 576e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim , b (bb) 586e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim , r (rr) 596e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 606e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 dummy; 616e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim if (!SafeInt32Sub(r, l, &dummy) || 626e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim !SafeInt32Sub(b, t, &dummy)) 636e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 646e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim ThrowProgramError ("Overflow in dng_rect constructor"); 656e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 666e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 676e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 686e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim dng_rect (uint32 h, uint32 w) 696e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim : t (0) 706e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim , l (0) 716e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 726e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim if (!ConvertUint32ToInt32(h, &b) || 736e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim !ConvertUint32ToInt32(w, &r)) 746e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 756e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim ThrowProgramError ("Overflow in dng_rect constructor"); 766e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 776e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 786e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 796e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim dng_rect (const dng_point &size) 806e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim : t (0) 816e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim , l (0) 826e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim , b (size.v) 836e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim , r (size.h) 846e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 856e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 866e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 876e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim void Clear () 886e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 896e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim *this = dng_rect (); 906e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 916e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 926e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim bool operator== (const dng_rect &rect) const; 936e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 946e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim bool operator!= (const dng_rect &rect) const 956e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 966e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return !(*this == rect); 976e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 986e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 996e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim bool IsZero () const; 1006e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1016e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim bool NotZero () const 1026e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 1036e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return !IsZero (); 1046e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 1056e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1066e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim bool IsEmpty () const 1076e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 1086e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return (t >= b) || (l >= r); 1096e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 1106e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1116e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim bool NotEmpty () const 1126e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 1136e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return !IsEmpty (); 1146e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 1156e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1166e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim // Returns the width of the rectangle, or 0 if r is smaller than l. 1176e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim // Throws an exception if the width is too large to be represented as 1186e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim // a _signed_ int32 (even if it would fit in a uint32). This is 1196e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim // consciously conservative -- there are existing uses of W() where 1206e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim // the result is converted to an int32 without an overflow check, and 1216e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim // we want to make sure no overflow can occur in such cases. We provide 1226e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim // this check in addition to the check performed in the "two-corners" 1236e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim // constructor to protect client code that produes a dng_rect with 1246e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim // excessive size by initializing or modifying the member variables 1256e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim // directly. 1266e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 W () const 1276e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 1286e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim if (r >= l) 1296e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 1306e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 width; 1316e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim if (!SafeInt32Sub(r, l, &width)) 1326e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 1336e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim ThrowProgramError ("Overflow computing rectangle width"); 1346e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 1356e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return static_cast<uint32>(width); 1366e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 1376e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim else 1386e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 1396e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return 0; 1406e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 1416e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 1426e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1436e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim // Returns the height of the rectangle, or 0 if b is smaller than t. 1446e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim // Throws an exception if the height is too large to be represented as 1456e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim // a _signed_ int32 (see W() for rationale). 1466e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 H () const 1476e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 1486e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim if (b >= t) 1496e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 1506e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 height; 1516e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim if (!SafeInt32Sub(b, t, &height)) 1526e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 1536e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim ThrowProgramError ("Overflow computing rectangle height"); 1546e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 1556e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return static_cast<uint32>(height); 1566e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 1576e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim else 1586e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 1596e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return 0; 1606e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 1616e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 1626e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1636e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim dng_point TL () const 1646e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 1656e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return dng_point (t, l); 1666e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 1676e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1686e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim dng_point TR () const 1696e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 1706e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return dng_point (t, r); 1716e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 1726e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1736e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim dng_point BL () const 1746e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 1756e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return dng_point (b, l); 1766e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 1776e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1786e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim dng_point BR () const 1796e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 1806e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return dng_point (b, r); 1816e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 1826e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1836e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim dng_point Size () const 1846e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 1856e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return dng_point ((int32) H (), (int32) W ()); 1866e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 1876e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1886e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim real64 Diagonal () const 1896e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 1906e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return hypot ((real64) W (), 1916e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim (real64) H ()); 1926e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 1936e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1946e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim }; 1956e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1966e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 1976e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1986e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimclass dng_rect_real64 1996e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 2006e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2016e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim public: 2026e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2036e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim real64 t; 2046e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim real64 l; 2056e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim real64 b; 2066e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim real64 r; 2076e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2086e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim public: 2096e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2106e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim dng_rect_real64 () 2116e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim : t (0.0) 2126e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim , l (0.0) 2136e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim , b (0.0) 2146e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim , r (0.0) 2156e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 2166e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 2176e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2186e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim dng_rect_real64 (real64 tt, real64 ll, real64 bb, real64 rr) 2196e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim : t (tt) 2206e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim , l (ll) 2216e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim , b (bb) 2226e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim , r (rr) 2236e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 2246e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 2256e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2266e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim dng_rect_real64 (real64 h, real64 w) 2276e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim : t (0) 2286e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim , l (0) 2296e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim , b (h) 2306e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim , r (w) 2316e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 2326e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 2336e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2346e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim dng_rect_real64 (const dng_point_real64 &size) 2356e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim : t (0) 2366e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim , l (0) 2376e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim , b (size.v) 2386e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim , r (size.h) 2396e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 2406e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 2416e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2426e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim dng_rect_real64 (const dng_point_real64 &pt1, 2436e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim const dng_point_real64 &pt2) 2446e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim : t (Min_real64 (pt1.v, pt2.v)) 2456e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim , l (Min_real64 (pt1.h, pt2.h)) 2466e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim , b (Max_real64 (pt1.v, pt2.v)) 2476e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim , r (Max_real64 (pt1.h, pt2.h)) 2486e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 2496e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 2506e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2516e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim dng_rect_real64 (const dng_rect &rect) 2526e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim : t ((real64) rect.t) 2536e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim , l ((real64) rect.l) 2546e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim , b ((real64) rect.b) 2556e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim , r ((real64) rect.r) 2566e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 2576e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 2586e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2596e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim void Clear () 2606e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 2616e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim *this = dng_point_real64 (); 2626e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 2636e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2646e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim bool operator== (const dng_rect_real64 &rect) const; 2656e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2666e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim bool operator!= (const dng_rect_real64 &rect) const 2676e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 2686e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return !(*this == rect); 2696e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 2706e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2716e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim bool IsZero () const; 2726e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2736e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim bool NotZero () const 2746e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 2756e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return !IsZero (); 2766e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 2776e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2786e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim bool IsEmpty () const 2796e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 2806e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return (t >= b) || (l >= r); 2816e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 2826e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2836e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim bool NotEmpty () const 2846e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 2856e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return !IsEmpty (); 2866e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 2876e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2886e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim real64 W () const 2896e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 2906e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return Max_real64 (r - l, 0.0); 2916e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 2926e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2936e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim real64 H () const 2946e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 2956e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return Max_real64 (b - t, 0.0); 2966e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 2976e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2986e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim dng_point_real64 TL () const 2996e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 3006e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return dng_point_real64 (t, l); 3016e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 3026e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3036e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim dng_point_real64 TR () const 3046e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 3056e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return dng_point_real64 (t, r); 3066e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 3076e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3086e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim dng_point_real64 BL () const 3096e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 3106e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return dng_point_real64 (b, l); 3116e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 3126e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3136e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim dng_point_real64 BR () const 3146e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 3156e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return dng_point_real64 (b, r); 3166e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 3176e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3186e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim dng_point_real64 Size () const 3196e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 3206e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return dng_point_real64 (H (), W ()); 3216e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 3226e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3236e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim dng_rect Round () const 3246e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 3256e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return dng_rect (Round_int32 (t), 3266e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim Round_int32 (l), 3276e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim Round_int32 (b), 3286e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim Round_int32 (r)); 3296e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 3306e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3316e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim real64 Diagonal () const 3326e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 3336e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return hypot (W (), H ()); 3346e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 3356e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3366e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim }; 3376e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3386e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 3396e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3406e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimdng_rect operator& (const dng_rect &a, 3416e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim const dng_rect &b); 3426e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3436e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimdng_rect operator| (const dng_rect &a, 3446e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim const dng_rect &b); 3456e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3466e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 3476e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3486e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimdng_rect_real64 operator& (const dng_rect_real64 &a, 3496e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim const dng_rect_real64 &b); 3506e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3516e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimdng_rect_real64 operator| (const dng_rect_real64 &a, 3526e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim const dng_rect_real64 &b); 3536e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3546e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 3556e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3566e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakiminline dng_rect operator+ (const dng_rect &a, 3576e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim const dng_point &b) 3586e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 3596e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3606e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return dng_rect (a.t + b.v, 3616e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim a.l + b.h, 3626e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim a.b + b.v, 3636e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim a.r + b.h); 3646e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3656e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 3666e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3676e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 3686e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3696e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakiminline dng_rect_real64 operator+ (const dng_rect_real64 &a, 3706e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim const dng_point_real64 &b) 3716e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 3726e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3736e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return dng_rect_real64 (a.t + b.v, 3746e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim a.l + b.h, 3756e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim a.b + b.v, 3766e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim a.r + b.h); 3776e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3786e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 3796e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3806e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 3816e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3826e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakiminline dng_rect operator- (const dng_rect &a, 3836e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim const dng_point &b) 3846e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 3856e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3866e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return dng_rect (a.t - b.v, 3876e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim a.l - b.h, 3886e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim a.b - b.v, 3896e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim a.r - b.h); 3906e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3916e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 3926e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3936e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 3946e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3956e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakiminline dng_rect_real64 operator- (const dng_rect_real64 &a, 3966e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim const dng_point_real64 &b) 3976e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 3986e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3996e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return dng_rect_real64 (a.t - b.v, 4006e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim a.l - b.h, 4016e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim a.b - b.v, 4026e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim a.r - b.h); 4036e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4046e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 4056e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4066e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 4076e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4086e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakiminline dng_rect Transpose (const dng_rect &a) 4096e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 4106e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4116e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return dng_rect (a.l, a.t, a.r, a.b); 4126e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4136e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 4146e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4156e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 4166e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4176e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakiminline dng_rect_real64 Transpose (const dng_rect_real64 &a) 4186e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 4196e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4206e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return dng_rect_real64 (a.l, a.t, a.r, a.b); 4216e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4226e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 4236e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4246e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 4256e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4266e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakiminline void HalfRect (dng_rect &rect) 4276e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 4286e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4296e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim rect.r = rect.l + (int32) (rect.W () >> 1); 4306e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim rect.b = rect.t + (int32) (rect.H () >> 1); 4316e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4326e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 4336e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4346e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 4356e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4366e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakiminline void DoubleRect (dng_rect &rect) 4376e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 4386e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4396e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim rect.r = rect.l + (int32) (rect.W () << 1); 4406e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim rect.b = rect.t + (int32) (rect.H () << 1); 4416e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4426e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 4436e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4446e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 4456e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4466e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakiminline void InnerPadRect (dng_rect &rect, 4476e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 pad) 4486e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 4496e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4506e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim rect.l += pad; 4516e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim rect.r -= pad; 4526e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim rect.t += pad; 4536e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim rect.b -= pad; 4546e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4556e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 4566e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4576e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 4586e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4596e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakiminline void OuterPadRect (dng_rect &rect, 4606e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 pad) 4616e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 4626e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4636e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim InnerPadRect (rect, -pad); 4646e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4656e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 4666e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4676e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 4686e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4696e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakiminline void InnerPadRectH (dng_rect &rect, 4706e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 pad) 4716e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 4726e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4736e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim rect.l += pad; 4746e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim rect.r -= pad; 4756e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4766e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 4776e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4786e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 4796e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4806e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakiminline void InnerPadRectV (dng_rect &rect, 4816e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 pad) 4826e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 4836e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4846e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim rect.t += pad; 4856e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim rect.b -= pad; 4866e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4876e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 4886e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4896e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 4906e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4916e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakiminline dng_rect MakeHalfRect (const dng_rect &rect) 4926e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 4936e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4946e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim dng_rect out = rect; 4956e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4966e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim HalfRect (out); 4976e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4986e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return out; 4996e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5006e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 5016e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5026e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 5036e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5046e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakiminline dng_rect MakeDoubleRect (const dng_rect &rect) 5056e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 5066e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5076e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim dng_rect out = rect; 5086e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5096e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim DoubleRect (out); 5106e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5116e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return out; 5126e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5136e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 5146e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5156e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 5166e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5176e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakiminline dng_rect MakeInnerPadRect (const dng_rect &rect, 5186e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 pad) 5196e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 5206e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5216e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim dng_rect out = rect; 5226e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5236e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim InnerPadRect (out, pad); 5246e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5256e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return out; 5266e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5276e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 5286e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5296e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 5306e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5316e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakiminline dng_rect MakeOuterPadRect (const dng_rect &rect, 5326e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 pad) 5336e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 5346e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5356e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim dng_rect out = rect; 5366e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5376e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim OuterPadRect (out, pad); 5386e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5396e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return out; 5406e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5416e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 5426e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5436e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 5446e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5456e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#endif 5466e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5476e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 548