diff --git a/headers/private/app/LinkReceiver.h b/headers/private/app/LinkReceiver.h index 89115cf9dc..fe258bc9bd 100644 --- a/headers/private/app/LinkReceiver.h +++ b/headers/private/app/LinkReceiver.h @@ -11,6 +11,7 @@ #define _LINK_RECEIVER_H +#include #include @@ -42,6 +43,8 @@ class LinkReceiver { status_t ReadRegion(BRegion* region); status_t ReadShape(BShape* shape); status_t ReadGradient(BGradient** gradient); + status_t ReadAffineTransform(BAffineTransform *transform) + { return Read(&transform->sx, sizeof(double) * 6); } template status_t Read(Type *data) { return Read(data, sizeof(Type)); } diff --git a/headers/private/app/LinkSender.h b/headers/private/app/LinkSender.h index bd7c5d1d9f..8ec09499c7 100644 --- a/headers/private/app/LinkSender.h +++ b/headers/private/app/LinkSender.h @@ -11,6 +11,7 @@ #define _LINK_SENDER_H +#include #include @@ -43,6 +44,11 @@ class LinkSender { status_t AttachRegion(const BRegion& region); status_t AttachShape(BShape& shape); status_t AttachGradient(const BGradient& gradient); + status_t AttachAffineTransform(const BAffineTransform& transform) + { + return Attach(&transform.sx, sizeof(double) * 6); + } + template status_t Attach(const Type& data) { return Attach(&data, sizeof(Type)); diff --git a/headers/private/app/ServerLink.h b/headers/private/app/ServerLink.h index 7f0cfa0142..0a8cceeac9 100644 --- a/headers/private/app/ServerLink.h +++ b/headers/private/app/ServerLink.h @@ -58,6 +58,7 @@ public: status_t AttachRegion(const BRegion& region); status_t AttachShape(BShape& shape); status_t AttachGradient(const BGradient& gradient); + status_t AttachAffineTransform(const BAffineTransform& transform); template status_t Attach(const Type& data); @@ -79,6 +80,7 @@ public: status_t ReadRegion(BRegion* region); status_t ReadShape(BShape* shape); status_t ReadGradient(BGradient** _gradient); + status_t ReadAffineTransform(BAffineTransform* transform); template status_t Read(Type* data); @@ -189,6 +191,13 @@ ServerLink::AttachGradient(const BGradient& gradient) } +inline status_t +ServerLink::AttachAffineTransform(const BAffineTransform& transform) +{ + return fSender->AttachAffineTransform(transform); +} + + template status_t ServerLink::Attach(const Type& data) { @@ -276,6 +285,13 @@ ServerLink::ReadGradient(BGradient** _gradient) } +inline status_t +ServerLink::ReadAffineTransform(BAffineTransform* transform) +{ + return fReceiver->ReadAffineTransform(transform); +} + + template status_t ServerLink::Read(Type* data) { diff --git a/src/kits/interface/View.cpp b/src/kits/interface/View.cpp index 24ea4827c2..39f7af685d 100644 --- a/src/kits/interface/View.cpp +++ b/src/kits/interface/View.cpp @@ -1951,7 +1951,7 @@ BView::SetTransform(BAffineTransform transform) _CheckLockAndSwitchCurrent(); fOwner->fLink->StartMessage(AS_VIEW_SET_TRANSFORM); - fOwner->fLink->Attach(transform); + fOwner->fLink->AttachAffineTransform(transform); fState->valid_flags |= B_VIEW_TRANSFORM_BIT; } @@ -1971,7 +1971,7 @@ BView::Transform() const int32 code; if (fOwner->fLink->FlushWithReply(code) == B_OK && code == B_OK) - fOwner->fLink->Read(&fState->transform); + fOwner->fLink->ReadAffineTransform(&fState->transform); fState->valid_flags |= B_VIEW_TRANSFORM_BIT; } @@ -1993,7 +1993,7 @@ BView::TransformTo(coordinate_space basis) const int32 code; if (fOwner->fLink->FlushWithReply(code) == B_OK && code == B_OK) { - fOwner->fLink->Read(&fState->parent_composite_transform); + fOwner->fLink->ReadAffineTransform(&fState->parent_composite_transform); fOwner->fLink->Read(&fState->parent_composite_scale); fOwner->fLink->Read(&fState->parent_composite_origin); } diff --git a/src/servers/app/ServerWindow.cpp b/src/servers/app/ServerWindow.cpp index 12a628259c..6f39600f6e 100644 --- a/src/servers/app/ServerWindow.cpp +++ b/src/servers/app/ServerWindow.cpp @@ -1614,7 +1614,7 @@ fDesktop->LockSingleWindow(); case AS_VIEW_SET_TRANSFORM: { BAffineTransform transform; - if (link.Read(&transform) != B_OK) + if (link.ReadAffineTransform(&transform) != B_OK) break; DTRACE(("ServerWindow %s: Message AS_VIEW_SET_TRANSFORM: " @@ -1637,7 +1637,7 @@ fDesktop->LockSingleWindow(); transform.shx, transform.sy, transform.tx, transform.ty)); fLink.StartMessage(B_OK); - fLink.Attach(transform); + fLink.AttachAffineTransform(transform); fLink.Flush(); break; } @@ -1647,11 +1647,11 @@ fDesktop->LockSingleWindow(); fLink.StartMessage(B_OK); if (state != NULL) { - fLink.Attach(state->CombinedTransform()); + fLink.AttachAffineTransform(state->CombinedTransform()); fLink.Attach(state->CombinedScale()); fLink.Attach(state->CombinedOrigin()); } else { - fLink.Attach(BAffineTransform()); + fLink.AttachAffineTransform(BAffineTransform()); fLink.Attach(1.0f); fLink.Attach(B_ORIGIN); } @@ -3329,7 +3329,7 @@ ServerWindow::_DispatchPictureMessage(int32 code, BPrivate::LinkReceiver& link) case AS_VIEW_SET_TRANSFORM: { BAffineTransform transform; - if (link.Read(&transform) != B_OK) + if (link.ReadAffineTransform(&transform) != B_OK) break; picture->WriteSetTransform(transform);