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