diff --git a/headers/private/app/PortLink.h b/headers/private/app/PortLink.h index 29da78f5cc..ce990a2538 100644 --- a/headers/private/app/PortLink.h +++ b/headers/private/app/PortLink.h @@ -67,6 +67,7 @@ public: status_t Attach(const void *data, ssize_t size); status_t AttachString(const char *string); + status_t AttachRegion(const BRegion ®ion); template status_t Attach(const Type& data) { return Attach(&data, sizeof(Type)); @@ -75,6 +76,7 @@ public: status_t GetNextReply(int32 *code, bigtime_t timeout = B_INFINITE_TIMEOUT); status_t Read(void *data, ssize_t size); status_t ReadString(char **string); + status_t ReadRegion(BRegion *region); template status_t Read(T *data) { return fReader->Read(data,sizeof(T)); diff --git a/src/kits/app/PortLink.cpp b/src/kits/app/PortLink.cpp index fc72b24cfc..1978ea293d 100644 --- a/src/kits/app/PortLink.cpp +++ b/src/kits/app/PortLink.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include #include @@ -106,3 +107,18 @@ status_t BPortLink::AttachString(const char *string) { return fSender->AttachString(string); } + +status_t BPortLink::ReadRegion(BRegion *region) +{ + fReader->Read(®ion->count, sizeof(long)); + fReader->Read(®ion->bound, sizeof(clipping_rect)); + region->set_size(region->count + 1); + return fReader->Read(region->data, region->count * sizeof(clipping_rect)); +} + +status_t BPortLink::AttachRegion(const BRegion ®ion) +{ + fSender->Attach(®ion.count, sizeof(long)); + fSender->Attach(®ion.bound, sizeof(clipping_rect)); + return fSender->Attach(region.data, region.count * sizeof(clipping_rect)); +}