1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**************************************************************************\ 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* Module Name: 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* 7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* GdiplusTypes.h 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* Abstract: 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* Basic types used by GDI+ 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov\**************************************************************************/ 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _GDIPLUSTYPES_H 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define _GDIPLUSTYPES_H 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef DCR_USE_NEW_175866 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//-------------------------------------------------------------------------- 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// LIB version initialization functions 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//-------------------------------------------------------------------------- 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef VOID (__cdecl *DEBUGEVENTFUNCTION)(INT level, CHAR *message); 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovextern "C" BOOL __stdcall InitializeGdiplus(DEBUGEVENTFUNCTION); 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovextern "C" VOID __stdcall UninitializeGdiplus(); 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//-------------------------------------------------------------------------- 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Callback functions 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//-------------------------------------------------------------------------- 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovextern "C" { 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef BOOL (CALLBACK * ImageAbort)(VOID *); 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef ImageAbort DrawImageAbort; 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef ImageAbort GetThumbnailImageAbort; 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Callback for EnumerateMetafile methods. The parameters are: 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// recordType WMF, EMF, or EMF+ record type 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// flags (always 0 for WMF/EMF records) 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// dataSize size of the record data (in bytes), or 0 if no data 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// data pointer to the record data, or NULL if no data 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// callbackData pointer to callbackData, if any 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// This method can then call Metafile::PlayRecord to play the 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// record that was just enumerated. If this method returns 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// FALSE, the enumeration process is aborted. Otherwise, it continues. 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovextern "C" { 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef BOOL (CALLBACK * EnumerateMetafileProc)(EmfPlusRecordType,UINT,UINT,const BYTE*,VOID*); 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//-------------------------------------------------------------------------- 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Primitive data types 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// NOTE: 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Types already defined in standard header files: 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// INT8 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// UINT8 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// INT16 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// UINT16 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// INT32 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// UINT32 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// INT64 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// UINT64 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Avoid using the following types: 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// LONG - use INT 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// ULONG - use UINT 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// DWORD - use UINT32 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//-------------------------------------------------------------------------- 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef float REAL; 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define REAL_MAX FLT_MAX 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define REAL_MIN FLT_MIN 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define REAL_TOLERANCE (FLT_MIN * 100) 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define REAL_EPSILON 1.192092896e-07F /* FLT_EPSILON */ 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//-------------------------------------------------------------------------- 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Forward declarations of various internal classes 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//-------------------------------------------------------------------------- 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass Size; 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass SizeF; 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass Point; 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass PointF; 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass Rect; 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass RectF; 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CharacterRange; 95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//-------------------------------------------------------------------------- 97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Return values from any GDI+ API 98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//-------------------------------------------------------------------------- 99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovenum Status 101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Ok = 0, 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov GenericError = 1, 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov InvalidParameter = 2, 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OutOfMemory = 3, 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ObjectBusy = 4, 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov InsufficientBuffer = 5, 108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov NotImplemented = 6, 109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Win32Error = 7, 110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov WrongState = 8, 111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Aborted = 9, 112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef DCR_USE_NEW_135429 113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FileNotFound = 10, 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ValueOverflow = 11, 115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov AccessDenied = 12, 116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov UnknownImageFormat = 13, 117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FontFamilyNotFound = 14, 118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FontStyleNotFound = 15, 119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov NotTrueTypeFont = 16, 120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else 121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov NotFound = 10, 122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ValueOverflow = 11, 123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov UnsupportedGdiplusVersion = 17, 125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov GdiplusNotInitialized 126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//-------------------------------------------------------------------------- 130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Represents a dimension in a 2D coordinate system 131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// (floating-point coordinates) 132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//-------------------------------------------------------------------------- 133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass SizeF 135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Default constructor 139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SizeF() 140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Width = Height = 0.0f; 142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SizeF(IN const SizeF& size) 145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Width = size.Width; 147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Height = size.Height; 148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SizeF(IN REAL width, 151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN REAL height) 152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Width = width; 154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Height = height; 155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SizeF operator+(IN const SizeF& sz) const 158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return SizeF(Width + sz.Width, 160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Height + sz.Height); 161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SizeF operator-(IN const SizeF& sz) const 164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return SizeF(Width - sz.Width, 166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Height - sz.Height); 167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov BOOL Equals(IN const SizeF& sz) const 170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return (Width == sz.Width) && (Height == sz.Height); 172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov BOOL Empty() const 175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return (Width == 0.0f && Height == 0.0f); 177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov REAL Width; 182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov REAL Height; 183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//-------------------------------------------------------------------------- 186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Represents a dimension in a 2D coordinate system 187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// (integer coordinates) 188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//-------------------------------------------------------------------------- 189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass Size 191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Default constructor 195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Size() 196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Width = Height = 0; 198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Size(IN const Size& size) 201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Width = size.Width; 203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Height = size.Height; 204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Size(IN INT width, 207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN INT height) 208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Width = width; 210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Height = height; 211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Size operator+(IN const Size& sz) const 214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return Size(Width + sz.Width, 216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Height + sz.Height); 217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Size operator-(IN const Size& sz) const 220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return Size(Width - sz.Width, 222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Height - sz.Height); 223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov BOOL Equals(IN const Size& sz) const 226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return (Width == sz.Width) && (Height == sz.Height); 228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov BOOL Empty() const 231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return (Width == 0 && Height == 0); 233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov INT Width; 238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov INT Height; 239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//-------------------------------------------------------------------------- 242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Represents a location in a 2D coordinate system 243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// (floating-point coordinates) 244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//-------------------------------------------------------------------------- 245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass PointF 247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PointF() 250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov X = Y = 0.0f; 252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PointF(IN const PointF &point) 255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov X = point.X; 257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Y = point.Y; 258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PointF(IN const SizeF &size) 261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov X = size.Width; 263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Y = size.Height; 264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PointF(IN REAL x, 267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN REAL y) 268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov X = x; 270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Y = y; 271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PointF operator+(IN const PointF& point) const 274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return PointF(X + point.X, 276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Y + point.Y); 277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PointF operator-(IN const PointF& point) const 280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return PointF(X - point.X, 282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Y - point.Y); 283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov BOOL Equals(IN const PointF& point) 286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return (X == point.X) && (Y == point.Y); 288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov REAL X; 293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov REAL Y; 294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//-------------------------------------------------------------------------- 297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Represents a location in a 2D coordinate system 298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// (integer coordinates) 299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//-------------------------------------------------------------------------- 300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass Point 302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Point() 305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov X = Y = 0; 307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Point(IN const Point &point) 310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov X = point.X; 312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Y = point.Y; 313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Point(IN const Size &size) 316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov X = size.Width; 318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Y = size.Height; 319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Point(IN INT x, 322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN INT y) 323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov X = x; 325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Y = y; 326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Point operator+(IN const Point& point) const 329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return Point(X + point.X, 331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Y + point.Y); 332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Point operator-(IN const Point& point) const 335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return Point(X - point.X, 337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Y - point.Y); 338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov BOOL Equals(IN const Point& point) 341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return (X == point.X) && (Y == point.Y); 343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov INT X; 348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov INT Y; 349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//-------------------------------------------------------------------------- 352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Represents a rectangle in a 2D coordinate system 353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// (floating-point coordinates) 354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//-------------------------------------------------------------------------- 355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass RectF 357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Default constructor 361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov RectF() 363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov X = Y = Width = Height = 0.0f; 365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov RectF(IN REAL x, 368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN REAL y, 369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN REAL width, 370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN REAL height) 371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov X = x; 373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Y = y; 374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Width = width; 375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Height = height; 376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov RectF(IN const PointF& location, 379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const SizeF& size) 380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov X = location.X; 382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Y = location.Y; 383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Width = size.Width; 384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Height = size.Height; 385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov RectF* Clone() const 388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return new RectF(X, Y, Width, Height); 390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov VOID GetLocation(OUT PointF* point) const 393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov point->X = X; 395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov point->Y = Y; 396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov VOID GetSize(OUT SizeF* size) const 399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov size->Width = Width; 401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov size->Height = Height; 402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 404ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov VOID GetBounds(OUT RectF* rect) const 405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov rect->X = X; 407ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov rect->Y = Y; 408ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov rect->Width = Width; 409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov rect->Height = Height; 410ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 411ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Return the left, top, right, and bottom 413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // coordinates of the rectangle 414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov REAL GetLeft() const 416ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 417ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return X; 418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 419ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov REAL GetTop() const 421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 422ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return Y; 423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 424ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 425ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov REAL GetRight() const 426ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return X+Width; 428ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 429ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 430ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov REAL GetBottom() const 431ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 432ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return Y+Height; 433ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 434ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Determine if the rectangle is empty 436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov BOOL IsEmptyArea() const 437ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 438ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return (Width <= REAL_EPSILON) || (Height <= REAL_EPSILON); 439ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 440ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 441ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov BOOL Equals(IN const RectF & rect) const 442ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 443ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return X == rect.X && 444ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Y == rect.Y && 445ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Width == rect.Width && 446ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Height == rect.Height; 447ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 448ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 449ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov BOOL Contains(IN REAL x, 450ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN REAL y) const 451ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 452ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return x >= X && x < X+Width && 453ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov y >= Y && y < Y+Height; 454ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 455ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 456ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov BOOL Contains(IN const PointF& pt) const 457ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 458ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return Contains(pt.X, pt.Y); 459ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 460ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 461ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov BOOL Contains(IN const RectF& rect) const 462ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 463ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return (X <= rect.X) && (rect.GetRight() <= GetRight()) && 464ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (Y <= rect.Y) && (rect.GetBottom() <= GetBottom()); 465ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 466ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 467ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov VOID Inflate(IN REAL dx, 468ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN REAL dy) 469ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 470ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov X -= dx; 471ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Y -= dy; 472ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Width += 2*dx; 473ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Height += 2*dy; 474ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 475ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 476ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov VOID Inflate(IN const PointF& point) 477ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 478ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Inflate(point.X, point.Y); 479ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 480ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 481ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Intersect the current rect with the specified object 482ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 483ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov BOOL Intersect(IN const RectF& rect) 484ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 485ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return Intersect(*this, *this, rect); 486ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 487ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 488ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Intersect rect a and b and save the result into c 489ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Notice that c may be the same object as a or b. 490ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 491ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov static BOOL Intersect(OUT RectF& c, 492ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const RectF& a, 493ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const RectF& b) 494ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 495ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov REAL right = min(a.GetRight(), b.GetRight()); 496ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov REAL bottom = min(a.GetBottom(), b.GetBottom()); 497ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov REAL left = max(a.GetLeft(), b.GetLeft()); 498ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov REAL top = max(a.GetTop(), b.GetTop()); 499ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 500ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov c.X = left; 501ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov c.Y = top; 502ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov c.Width = right - left; 503ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov c.Height = bottom - top; 504ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return !c.IsEmptyArea(); 505ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 506ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 507ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Determine if the specified rect intersects with the 508ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // current rect object. 509ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 510ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov BOOL IntersectsWith(IN const RectF& rect) const 511ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 512ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return (GetLeft() < rect.GetRight() && 513ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov GetTop() < rect.GetTop() && 514ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov GetRight() > rect.GetLeft() && 515ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov GetBottom() > rect.GetTop()); 516ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 517ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 518ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov static BOOL Union(OUT RectF& c, 519ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const RectF& a, 520ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const RectF& b) 521ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 522ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov REAL right = max(a.GetRight(), b.GetRight()); 523ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov REAL bottom = max(a.GetBottom(), b.GetBottom()); 524ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov REAL left = min(a.GetLeft(), b.GetLeft()); 525ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov REAL top = min(a.GetTop(), b.GetTop()); 526ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 527ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov c.X = left; 528ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov c.Y = top; 529ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov c.Width = right - left; 530ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov c.Height = bottom - top; 531ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return !c.IsEmptyArea(); 532ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 533ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 534ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov VOID Offset(IN const PointF& point) 535ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 536ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Offset(point.X, point.Y); 537ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 538ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 539ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov VOID Offset(IN REAL dx, 540ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN REAL dy) 541ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 542ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov X += dx; 543ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Y += dy; 544ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 545ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 546ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 547ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 548ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov REAL X; 549ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov REAL Y; 550ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov REAL Width; 551ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov REAL Height; 552ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 553ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 554ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//-------------------------------------------------------------------------- 555ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Represents a rectangle in a 2D coordinate system 556ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// (integer coordinates) 557ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//-------------------------------------------------------------------------- 558ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 559ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass Rect 560ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 561ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 562ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 563ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Default constructor 564ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 565ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Rect() 566ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 567ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov X = Y = Width = Height = 0; 568ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 569ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 570ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Rect(IN INT x, 571ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN INT y, 572ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN INT width, 573ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN INT height) 574ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 575ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov X = x; 576ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Y = y; 577ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Width = width; 578ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Height = height; 579ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 580ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 581ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Rect(IN const Point& location, 582ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const Size& size) 583ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 584ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov X = location.X; 585ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Y = location.Y; 586ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Width = size.Width; 587ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Height = size.Height; 588ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 589ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 590ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Rect* Clone() const 591ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 592ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return new Rect(X, Y, Width, Height); 593ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 594ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 595ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov VOID GetLocation(OUT Point* point) const 596ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 597ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov point->X = X; 598ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov point->Y = Y; 599ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 600ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 601ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov VOID GetSize(OUT Size* size) const 602ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 603ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov size->Width = Width; 604ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov size->Height = Height; 605ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 606ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 607ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov VOID GetBounds(OUT Rect* rect) const 608ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 609ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov rect->X = X; 610ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov rect->Y = Y; 611ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov rect->Width = Width; 612ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov rect->Height = Height; 613ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 614ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 615ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Return the left, top, right, and bottom 616ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // coordinates of the rectangle 617ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 618ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov INT GetLeft() const 619ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 620ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return X; 621ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 622ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 623ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov INT GetTop() const 624ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 625ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return Y; 626ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 627ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 628ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov INT GetRight() const 629ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 630ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return X+Width; 631ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 632ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 633ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov INT GetBottom() const 634ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 635ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return Y+Height; 636ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 637ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 638ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Determine if the rectangle is empty 639ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov BOOL IsEmptyArea() const 640ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 641ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return (Width <= 0) || (Height <= 0); 642ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 643ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 644ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov BOOL Equals(IN const Rect & rect) const 645ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 646ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return X == rect.X && 647ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Y == rect.Y && 648ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Width == rect.Width && 649ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Height == rect.Height; 650ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 651ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 652ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov BOOL Contains(IN INT x, 653ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN INT y) const 654ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 655ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return x >= X && x < X+Width && 656ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov y >= Y && y < Y+Height; 657ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 658ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 659ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov BOOL Contains(IN const Point& pt) const 660ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 661ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return Contains(pt.X, pt.Y); 662ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 663ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 664ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov BOOL Contains(IN Rect& rect) const 665ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 666ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return (X <= rect.X) && (rect.GetRight() <= GetRight()) && 667ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (Y <= rect.Y) && (rect.GetBottom() <= GetBottom()); 668ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 669ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 670ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov VOID Inflate(IN INT dx, 671ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN INT dy) 672ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 673ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov X -= dx; 674ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Y -= dy; 675ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Width += 2*dx; 676ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Height += 2*dy; 677ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 678ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 679ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov VOID Inflate(IN const Point& point) 680ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 681ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Inflate(point.X, point.Y); 682ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 683ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 684ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Intersect the current rect with the specified object 685ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 686ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov BOOL Intersect(IN const Rect& rect) 687ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 688ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return Intersect(*this, *this, rect); 689ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 690ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 691ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Intersect rect a and b and save the result into c 692ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Notice that c may be the same object as a or b. 693ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 694ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov static BOOL Intersect(OUT Rect& c, 695ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const Rect& a, 696ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const Rect& b) 697ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 698ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov INT right = min(a.GetRight(), b.GetRight()); 699ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov INT bottom = min(a.GetBottom(), b.GetBottom()); 700ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov INT left = max(a.GetLeft(), b.GetLeft()); 701ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov INT top = max(a.GetTop(), b.GetTop()); 702ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 703ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov c.X = left; 704ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov c.Y = top; 705ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov c.Width = right - left; 706ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov c.Height = bottom - top; 707ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return !c.IsEmptyArea(); 708ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 709ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 710ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Determine if the specified rect intersects with the 711ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // current rect object. 712ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 713ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov BOOL IntersectsWith(IN const Rect& rect) const 714ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 715ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return (GetLeft() < rect.GetRight() && 716ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov GetTop() < rect.GetTop() && 717ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov GetRight() > rect.GetLeft() && 718ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov GetBottom() > rect.GetTop()); 719ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 720ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 721ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov static BOOL Union(OUT Rect& c, 722ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const Rect& a, 723ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const Rect& b) 724ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 725ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov INT right = max(a.GetRight(), b.GetRight()); 726ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov INT bottom = max(a.GetBottom(), b.GetBottom()); 727ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov INT left = min(a.GetLeft(), b.GetLeft()); 728ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov INT top = min(a.GetTop(), b.GetTop()); 729ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 730ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov c.X = left; 731ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov c.Y = top; 732ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov c.Width = right - left; 733ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov c.Height = bottom - top; 734ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return !c.IsEmptyArea(); 735ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 736ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 737ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov VOID Offset(IN const Point& point) 738ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 739ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Offset(point.X, point.Y); 740ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 741ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 742ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov VOID Offset(IN INT dx, 743ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN INT dy) 744ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 745ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov X += dx; 746ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Y += dy; 747ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 748ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 749ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 750ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 751ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov INT X; 752ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov INT Y; 753ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov INT Width; 754ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov INT Height; 755ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 756ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 757ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// A user must mange memory for PathData. 758ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 759ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass PathData 760ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 761ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 762ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PathData() 763ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 764ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Count = 0; 765ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Points = NULL; 766ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Types = NULL; 767ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 768ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 769ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ~PathData() 770ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 771ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (Points != NULL) 772ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 773ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov delete Points; 774ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 775ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 776ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (Types != NULL) 777ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 778ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov delete Types; 779ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 780ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 781ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 782ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef DCR_USE_NEW_250932 783ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 784ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate: 785ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PathData(const PathData &); 786ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PathData& operator=(const PathData &); 787ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 788ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 789ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 790ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 791ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov INT Count; 792ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PointF* Points; 793ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov BYTE* Types; 794ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 795ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 796ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 797ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//----------------------------- 798ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// text character range 799ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//----------------------------- 800ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 801ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CharacterRange 802ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 803ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 804ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CharacterRange( 805ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov INT first, 806ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov INT length 807ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ) : 808ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov First (first), 809ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Length (length) 810ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov {} 811ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 812ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CharacterRange() : First(0), Length(0) 813ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov {} 814ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 815ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CharacterRange & operator = (const CharacterRange &rhs) 816ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 817ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov First = rhs.First; 818ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Length = rhs.Length; 819ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return *this; 820ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 821ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 822ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov INT First; 823ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov INT Length; 824ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 825ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 826ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif // !_GDIPLUSTYPES_HPP 827