diff --git a/headers/private/interface/PictureDataWriter.h b/headers/private/interface/PictureDataWriter.h index 00e57ecabe..dcddcb0809 100644 --- a/headers/private/interface/PictureDataWriter.h +++ b/headers/private/interface/PictureDataWriter.h @@ -31,6 +31,7 @@ public: status_t WriteSetPenSize(const float &penSize); status_t WriteSetLineMode(const cap_mode &cap, const join_mode &join, const float &miterLimit); status_t WriteSetScale(const float &scale); + status_t WriteSetPattern(const pattern &pat); status_t WritePushState(); status_t WritePopState(); diff --git a/src/kits/interface/PictureDataWriter.cpp b/src/kits/interface/PictureDataWriter.cpp index 27b4840a67..93a7972d96 100644 --- a/src/kits/interface/PictureDataWriter.cpp +++ b/src/kits/interface/PictureDataWriter.cpp @@ -146,6 +146,20 @@ PictureDataWriter::WriteSetScale(const float &scale) } +status_t +PictureDataWriter::WriteSetPattern(const pattern &pat) +{ + try { + BeginOp(B_PIC_SET_STIPLE_PATTERN); + Write(pat); + EndOp(); + } catch (status_t &status) { + return status; + } + return B_OK; +} + + status_t PictureDataWriter::WriteSetHighColor(const rgb_color &color) { diff --git a/src/servers/app/ServerPicture.cpp b/src/servers/app/ServerPicture.cpp index 2b4d6beef5..c986e25297 100644 --- a/src/servers/app/ServerPicture.cpp +++ b/src/servers/app/ServerPicture.cpp @@ -777,8 +777,8 @@ ServerPicture::~ServerPicture() delete fData; gTokenSpace.RemoveToken(fToken); - // We don't delete the subpictures themselves, the ServerApp keeps - // them in a list and will delete them on quit. + // We only delete the subpictures list, not the subpictures themselves, + // since the ServerApp keeps them in a list and will delete them on quit. delete fPictures; } @@ -795,19 +795,9 @@ ServerPicture::SyncState(ViewLayer *view) WriteSetScale(view->CurrentState()->Scale()); WriteSetLineMode(view->CurrentState()->LineCapMode(), view->CurrentState()->LineJoinMode(), view->CurrentState()->MiterLimit()); - -/* - BeginOp(B_PIC_SET_STIPLE_PATTERN); - AddData(view->CurrentState()->GetPattern().GetInt8(), sizeof(pattern)); - EndOp(); -*/ + //WriteSetPattern(*view->CurrentState()->GetPattern().GetInt8()); WriteSetDrawingMode(view->CurrentState()->GetDrawingMode()); - /*BeginOp(B_PIC_SET_BLENDING_MODE); - AddInt16((int16)view->CurrentState()->AlphaSrcMode()); - AddInt16((int16)view->CurrentState()->AlphaFncMode()); - EndOp(); -*/ WriteSetHighColor(view->CurrentState()->HighColor().GetColor32()); WriteSetLowColor(view->CurrentState()->LowColor().GetColor32()); diff --git a/src/servers/app/ServerWindow.cpp b/src/servers/app/ServerWindow.cpp index 4b4b645011..195391b3d3 100644 --- a/src/servers/app/ServerWindow.cpp +++ b/src/servers/app/ServerWindow.cpp @@ -2437,6 +2437,14 @@ ServerWindow::_DispatchPictureMessage(int32 code, BPrivate::LinkReceiver &link) break; } + case AS_LAYER_SET_PATTERN: + { + pattern pat; + link.Read(&pat, sizeof(pattern)); + picture->WriteSetPattern(pat); + break; + } + case AS_FILL_RECT: case AS_STROKE_RECT: {