600fbd78e4
it and rebuilding it on the server side (that causes a huge speed up for regions containing many rects) * There is a method in ServerLink that could have been used, but I actually needed to add the direct BRegion support to LinkReceiver * added LinkReceiver as a friend to BRegion class * ServerApp and ServerWindow keep the CursorManager locked after they have retrieved a cursor until they have called Acquire() on the cursor. (Axel: what good is using atomic* stuff in Acquire() and Release() if we have to protect this by a lock anyways?) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16957 a95241bf-73f2-0310-859d-f6bbb57e9c96
87 lines
2.0 KiB
C++
87 lines
2.0 KiB
C++
/*******************************************************************************
|
|
/
|
|
/ File: Region.h
|
|
/
|
|
/ Description: BRegion represents an area that's composed of individual
|
|
/ rectangles.
|
|
/
|
|
/ Copyright 1992-98, Be Incorporated, All Rights Reserved
|
|
/
|
|
*******************************************************************************/
|
|
|
|
#ifndef _REGION_H
|
|
#define _REGION_H
|
|
|
|
#include <BeBuild.h>
|
|
#include <Rect.h>
|
|
|
|
namespace BPrivate {
|
|
class ServerLink;
|
|
class LinkReceiver;
|
|
};
|
|
|
|
/* Integer rect used to define a clipping rectangle. All bounds are inclusive. */
|
|
/* Moved from DirectWindow.h */
|
|
typedef struct {
|
|
int32 left;
|
|
int32 top;
|
|
int32 right;
|
|
int32 bottom;
|
|
} clipping_rect;
|
|
|
|
|
|
/*----- BRegion class --------------------------------------------*/
|
|
|
|
class BRegion {
|
|
public:
|
|
BRegion();
|
|
BRegion(const BRegion ®ion);
|
|
BRegion(const BRect rect);
|
|
virtual ~BRegion();
|
|
|
|
BRegion &operator=(const BRegion &from);
|
|
|
|
BRect Frame() const;
|
|
clipping_rect FrameInt() const;
|
|
BRect RectAt(int32 index);
|
|
clipping_rect RectAtInt(int32 index);
|
|
int32 CountRects();
|
|
void Set(BRect newBounds);
|
|
void Set(clipping_rect newBounds);
|
|
bool Intersects(BRect r) const;
|
|
bool Intersects(clipping_rect r) const;
|
|
bool Contains(BPoint pt) const;
|
|
bool Contains(int32 x, int32 y);
|
|
void PrintToStream() const;
|
|
void OffsetBy(int32 dh, int32 dv);
|
|
void MakeEmpty();
|
|
void Include(BRect r);
|
|
void Include(clipping_rect r);
|
|
void Include(const BRegion*);
|
|
void Exclude(BRect r);
|
|
void Exclude(clipping_rect r);
|
|
void Exclude(const BRegion*);
|
|
void IntersectWith(const BRegion*);
|
|
|
|
/*----- Private or reserved -----------------------------------------*/
|
|
class Support;
|
|
|
|
private:
|
|
friend class BView;
|
|
friend class BDirectWindow;
|
|
friend class Support;
|
|
friend class BPrivate::ServerLink;
|
|
friend class BPrivate::LinkReceiver;
|
|
|
|
void _AddRect(clipping_rect r);
|
|
void set_size(long new_size);
|
|
|
|
private:
|
|
long count;
|
|
long data_size;
|
|
clipping_rect bound;
|
|
clipping_rect *data;
|
|
};
|
|
|
|
#endif /* _REGION_H */
|