1 /* 2 * Copyright 2003-2014 Haiku, Inc. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5 #ifndef _REGION_H 6 #define _REGION_H 7 8 9 #include <Rect.h> 10 11 12 namespace BPrivate { 13 class ServerLink; 14 class LinkReceiver; 15 }; 16 17 /* Integer rect used to define a clipping rectangle. All bounds are inclusive. */ 18 /* Moved from DirectWindow.h */ 19 typedef struct { 20 int32 left; 21 int32 top; 22 int32 right; 23 int32 bottom; 24 } clipping_rect; 25 26 27 class BRegion { 28 public: 29 BRegion(); 30 BRegion(const BRegion& other); 31 BRegion(const BRect rect); 32 virtual ~BRegion(); 33 34 BRegion& operator=(const BRegion& other); 35 bool operator==(const BRegion& other) const; 36 37 void Set(BRect rect); 38 void Set(clipping_rect clipping); 39 40 BRect Frame() const; 41 clipping_rect FrameInt() const; 42 43 BRect RectAt(int32 index); 44 BRect RectAt(int32 index) const; 45 clipping_rect RectAtInt(int32 index); 46 clipping_rect RectAtInt(int32 index) const; 47 48 int32 CountRects(); 49 int32 CountRects() const; 50 51 bool Intersects(BRect rect) const; 52 bool Intersects(clipping_rect clipping) const; 53 54 bool Contains(BPoint point) const; 55 bool Contains(int32 x, int32 y); 56 bool Contains(int32 x, int32 y) const; 57 58 void PrintToStream() const; 59 60 void OffsetBy(const BPoint& point); 61 void OffsetBy(int32 x, int32 y); 62 void ScaleBy(BSize scale); 63 void ScaleBy(float x, float y); 64 65 void MakeEmpty(); 66 67 void Include(BRect rect); 68 void Include(clipping_rect clipping); 69 void Include(const BRegion* region); 70 71 void Exclude(BRect rect); 72 void Exclude(clipping_rect clipping); 73 void Exclude(const BRegion* region); 74 75 void IntersectWith(const BRegion* region); 76 77 void ExclusiveInclude(const BRegion* region); 78 79 private: 80 friend class BDirectWindow; 81 friend class BPrivate::ServerLink; 82 friend class BPrivate::LinkReceiver; 83 84 class Support; 85 friend class Support; 86 87 private: 88 BRegion(const clipping_rect& clipping); 89 90 void _AdoptRegionData(BRegion& region); 91 bool _SetSize(int32 newSize); 92 93 clipping_rect _Convert(const BRect& rect) const; 94 clipping_rect _ConvertToInternal(const BRect& rect) const; 95 clipping_rect _ConvertToInternal( 96 const clipping_rect& rect) const; 97 98 private: 99 int32 fCount; 100 int32 fDataSize; 101 clipping_rect fBounds; 102 clipping_rect* fData; 103 }; 104 105 106 #endif // _REGION_H 107