diff options
Diffstat (limited to 'macosx/TRect.h')
-rw-r--r-- | macosx/TRect.h | 496 |
1 files changed, 496 insertions, 0 deletions
diff --git a/macosx/TRect.h b/macosx/TRect.h new file mode 100644 index 000000000..5a4199300 --- /dev/null +++ b/macosx/TRect.h @@ -0,0 +1,496 @@ +/* + File: TRect.h + + Version: 1.0 + + Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. + ("Apple") in consideration of your agreement to the following terms, and your + use, installation, modification or redistribution of this Apple software + constitutes acceptance of these terms. If you do not agree with these terms, + please do not use, install, modify or redistribute this Apple software. + + In consideration of your agreement to abide by the following terms, and subject + to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs + copyrights in this original Apple software (the "Apple Software"), to use, + reproduce, modify and redistribute the Apple Software, with or without + modifications, in source and/or binary forms; provided that if you redistribute + the Apple Software in its entirety and without modifications, you must retain + this notice and the following text and disclaimers in all such redistributions of + the Apple Software. Neither the name, trademarks, service marks or logos of + Apple Computer, Inc. may be used to endorse or promote products derived from the + Apple Software without specific prior written permission from Apple. Except as + expressly stated in this notice, no other rights or licenses, express or implied, + are granted by Apple herein, including but not limited to any patent rights that + may be infringed by your derivative works or by other works in which the Apple + Software may be incorporated. + + The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO + WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED + WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN + COMBINATION WITH YOUR PRODUCTS. + + IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION + OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT + (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + Copyright © 2002 Apple Computer, Inc., All Rights Reserved +*/ + +#ifndef TRect_H_ +#define TRect_H_ + +#include <Carbon/Carbon.h> + +class TRect + : public HIRect +{ +public: + // Construction/Destruction + TRect(); + TRect( + const HIRect* inRect ); + TRect( + const HIRect& inRect ); + TRect( + const HIPoint& inOrigin, + const HISize& inSize ); + TRect( + float inX, + float inY, + float inWidth, + float inHeight ); + TRect( + const Rect& inRect ); + ~TRect(); + + // Operators + operator HIRect*() + { return this; } + operator Rect() const; + + // Accessors + float MinX() const + { return CGRectGetMinX( *this ); } + float MaxX() const + { return CGRectGetMaxX( *this ); } + float MinY() const + { return CGRectGetMinY( *this ); } + float MaxY() const + { return CGRectGetMaxY( *this ); } + + float Width() const + { return CGRectGetWidth( *this ); } + float Height() const + { return CGRectGetHeight( *this ); } + + const HIPoint& Origin() const + { return origin; } + const HISize& Size() const + { return size; } + + float CenterX() const + { return CGRectGetMidX( *this ); } + float CenterY() const + { return CGRectGetMidY( *this ); } + HIPoint Center() const; + + // Modifiers + const HIRect& Inset( + float inX, + float inY ); + const HIRect& Outset( + float inX, + float inY ); + const HIRect& MoveBy( + float inDx, + float inDy ); + const HIRect& MoveTo( + float inX, + float inY ); + + const HIRect& Set( + const HIRect* inRect ); + const HIRect& Set( + const HIRect& inRect ); + const HIRect& Set( + float inX, + float inY, + float inWidth, + float inHeight ); + const HIRect& Set( + const Rect* inRect ); + + const HIRect& SetAroundCenter( + float inCenterX, + float inCenterY, + float inWidth, + float inHeight ); + + const HIRect& SetWidth( + float inWidth ); + const HIRect& SetHeight( + float inHeight ); + + const HIRect& SetOrigin( + const HIPoint& inOrigin ); + const HIRect& SetOrigin( + float inX, + float inY ); + const HIRect& SetSize( + const HISize& inSize ); + const HIRect& SetSize( + float inWidth, + float inHeight ); + + // Tests + bool Contains( + const HIPoint& inPoint ); + bool Contains( + const HIRect& inRect ); + bool Contains( + const Point& inPoint ); + bool Contains( + const Rect& inRect ); +}; + +//----------------------------------------------------------------------------------- +// TRect constructor +//----------------------------------------------------------------------------------- +// +inline TRect::TRect() +{ +} + +//----------------------------------------------------------------------------------- +// TRect constructor +//----------------------------------------------------------------------------------- +// +inline TRect::TRect( + const HIRect* inRect ) +{ + *this = *inRect; +} + +//----------------------------------------------------------------------------------- +// TRect constructor +//----------------------------------------------------------------------------------- +// +inline TRect::TRect( + const HIRect& inRect ) +{ + origin = inRect.origin; + size = inRect.size; +} + +//----------------------------------------------------------------------------------- +// TRect constructor +//----------------------------------------------------------------------------------- +// +inline TRect::TRect( + const HIPoint& inOrigin, + const HISize& inSize ) +{ + origin = inOrigin; + size = inSize; +} + +//----------------------------------------------------------------------------------- +// TRect constructor +//----------------------------------------------------------------------------------- +// +inline TRect::TRect( + float inX, + float inY, + float inWidth, + float inHeight ) +{ + *this = CGRectMake( inX, inY, inWidth, inHeight ); +} + +//----------------------------------------------------------------------------------- +// TRect destructor +//----------------------------------------------------------------------------------- +// +inline TRect::~TRect() +{ +} + +//----------------------------------------------------------------------------------- +// TRect constructor +//----------------------------------------------------------------------------------- +// +inline TRect::TRect( + const Rect& inRect ) +{ + Set( &inRect ); +} + +//----------------------------------------------------------------------------------- +// Rect operator +//----------------------------------------------------------------------------------- +// Converts the HIRect to a QD rect and returns it +// +inline TRect::operator Rect() const +{ + Rect qdRect; + + qdRect.top = (SInt16) MinY(); + qdRect.left = (SInt16) MinX(); + qdRect.bottom = (SInt16) MaxY(); + qdRect.right = (SInt16) MaxX(); + + return qdRect; +} + +//----------------------------------------------------------------------------------- +// Center +//----------------------------------------------------------------------------------- +// +inline HIPoint TRect::Center() const +{ + return CGPointMake( CGRectGetMidX( *this ), CGRectGetMidY( *this ) ); +} + +//----------------------------------------------------------------------------------- +// Inset +//----------------------------------------------------------------------------------- +// +inline const HIRect& TRect::Inset( + float inX, + float inY ) +{ + *this = CGRectInset( *this, inX, inY ); + + return *this; +} + +//----------------------------------------------------------------------------------- +// Outset +//----------------------------------------------------------------------------------- +// +inline const HIRect& TRect::Outset( + float inX, + float inY ) +{ + *this = CGRectInset( *this, -inX, -inY ); + + return *this; +} + +//----------------------------------------------------------------------------------- +// MoveBy +//----------------------------------------------------------------------------------- +// +inline const HIRect& TRect::MoveBy( + float inDx, + float inDy ) +{ + origin = CGPointMake( MinX() + inDx, MinY() + inDy ); + + return *this; +} + +//----------------------------------------------------------------------------------- +// MoveTo +//----------------------------------------------------------------------------------- +// +inline const HIRect& TRect::MoveTo( + float inX, + float inY ) +{ + origin = CGPointMake( inX, inY ); + + return *this; +} + +//----------------------------------------------------------------------------------- +// Set +//----------------------------------------------------------------------------------- +// +inline const HIRect& TRect::Set( + const HIRect* inRect ) +{ + *this = *inRect; + + return *this; +} + +//----------------------------------------------------------------------------------- +// Set +//----------------------------------------------------------------------------------- +// +inline const HIRect& TRect::Set( + const HIRect& inRect ) +{ + *this = inRect; + + return *this; +} + +//----------------------------------------------------------------------------------- +// Set +//----------------------------------------------------------------------------------- +// +inline const HIRect& TRect::Set( + float inX, + float inY, + float inWidth, + float inHeight ) +{ + *this = CGRectMake( inX, inY, inWidth, inHeight ); + + return *this; +} + +//----------------------------------------------------------------------------------- +// Set +//----------------------------------------------------------------------------------- +// +inline const HIRect& TRect::Set( + const Rect* inRect ) +{ + origin.x = inRect->left; + origin.y = inRect->top; + size.width = inRect->right - inRect->left; + size.height = inRect->bottom - inRect->top; + + return *this; +} + +//----------------------------------------------------------------------------------- +// SetAroundCenter +//----------------------------------------------------------------------------------- +// Sets the rectangle by specifying dimensions around a center point +// +inline const HIRect& TRect::SetAroundCenter( + float inCenterX, + float inCenterY, + float inWidth, + float inHeight ) +{ + *this = CGRectMake( inCenterX - inWidth/2, inCenterY - inHeight/2, inWidth, inHeight ); + + return *this; +} + +//----------------------------------------------------------------------------------- +// SetWidth +//----------------------------------------------------------------------------------- +// +inline const HIRect& TRect::SetWidth( + float inWidth ) +{ + size.width = inWidth; + + return *this; +} + +//----------------------------------------------------------------------------------- +// SetHeight +//----------------------------------------------------------------------------------- +// +inline const HIRect& TRect::SetHeight( + float inHeight ) +{ + size.height = inHeight; + + return *this; +} + +//----------------------------------------------------------------------------------- +// SetOrigin +//----------------------------------------------------------------------------------- +// +inline const HIRect& TRect::SetOrigin( + const HIPoint& inOrigin ) +{ + origin = inOrigin; + + return *this; +} + +//----------------------------------------------------------------------------------- +// SetOrigin +//----------------------------------------------------------------------------------- +// +inline const HIRect& TRect::SetOrigin( + float inX, + float inY ) +{ + origin = CGPointMake( inX, inY ); + + return *this; +} + +//----------------------------------------------------------------------------------- +// SetSize +//----------------------------------------------------------------------------------- +// +inline const HIRect& TRect::SetSize( + const HISize& inSize ) +{ + size = inSize; + + return *this; +} + +//----------------------------------------------------------------------------------- +// SetSize +//----------------------------------------------------------------------------------- +// +inline const HIRect& TRect::SetSize( + float inWidth, + float inHeight ) +{ + size = CGSizeMake( inWidth, inHeight ); + + return *this; +} + +//----------------------------------------------------------------------------------- +// Contains +//----------------------------------------------------------------------------------- +// +inline bool TRect::Contains( + const HIPoint& inPoint ) +{ + return CGRectContainsPoint( *this, inPoint ); +} + +//----------------------------------------------------------------------------------- +// Contains +//----------------------------------------------------------------------------------- +// +inline bool TRect::Contains( + const HIRect& inRect ) +{ + return CGRectContainsRect( *this, inRect ); +} + +//----------------------------------------------------------------------------------- +// Contains +//----------------------------------------------------------------------------------- +// +inline bool TRect::Contains( + const Point& inPoint ) +{ + return Contains( CGPointMake( inPoint.h, inPoint.v ) ); +} + +//----------------------------------------------------------------------------------- +// Contains +//----------------------------------------------------------------------------------- +// +inline bool TRect::Contains( + const Rect& inRect ) +{ + return Contains( CGRectMake( inRect.left, inRect.top, + inRect.right - inRect.left, inRect.bottom - inRect.top ) ); +} + +#endif // TRect_H_ |