* BView::FillRegion() sends the BRegion data instead of decomposing

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
This commit is contained in:
Stephan Aßmus
2006-04-01 16:56:10 +00:00
parent b22badf221
commit 600fbd78e4
6 changed files with 54 additions and 38 deletions
+3 -2
View File
@@ -17,10 +17,10 @@
namespace BPrivate {
class ServerLink;
class LinkReceiver;
};
/* Integer rect used to define a cliping rectangle. All bounds are included */
/* Integer rect used to define a clipping rectangle. All bounds are inclusive. */
/* Moved from DirectWindow.h */
typedef struct {
int32 left;
@@ -71,6 +71,7 @@ private:
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);
+6 -4
View File
@@ -14,6 +14,7 @@
#include <OS.h>
class BString;
class BRegion;
namespace BPrivate {
@@ -26,15 +27,16 @@ class LinkReceiver {
void SetPort(port_id port);
port_id Port(void) { return fReceivePort; }
status_t GetNextMessage(int32 &code, bigtime_t timeout = B_INFINITE_TIMEOUT);
status_t GetNextMessage(int32& code, bigtime_t timeout = B_INFINITE_TIMEOUT);
bool HasMessages() const;
bool NeedsReply() const;
int32 Code() const;
virtual status_t Read(void *data, ssize_t size);
virtual status_t Read(void* data, ssize_t size);
status_t ReadString(char** _string, size_t* _length = NULL);
status_t ReadString(BString& string, size_t* _length = NULL);
status_t ReadString(char *buffer, size_t bufferSize);
status_t ReadString(char* buffer, size_t bufferSize);
status_t ReadRegion(BRegion* region);
template <class Type> status_t Read(Type *data)
{ return Read(data, sizeof(Type)); }
@@ -46,7 +48,7 @@ class LinkReceiver {
port_id fReceivePort;
char *fRecvBuffer;
char* fRecvBuffer;
int32 fRecvPosition; //current read position
int32 fRecvStart; //start of current message
int32 fRecvBufferSize;