diff --git a/src/servers/app/ServerWindow.cpp b/src/servers/app/ServerWindow.cpp index da2732222a..5cbe655972 100644 --- a/src/servers/app/ServerWindow.cpp +++ b/src/servers/app/ServerWindow.cpp @@ -2789,13 +2789,18 @@ ServerWindow::_DispatchViewDrawingMessage(int32 code, if (link.Read(&where) == B_OK) { ServerPicture* picture = App()->GetPicture(token); if (picture != NULL) { - fCurrentView->PushState(); - + // Setting the drawing origin outside of the + // state makes sure that everything the picture + // does is relative to the global picture offset. + BPoint origin = fCurrentView->DrawingOrigin(); fCurrentView->SetDrawingOrigin(where); - picture->Play(fCurrentView); + fCurrentView->PushState(); + picture->Play(fCurrentView); fCurrentView->PopState(); + fCurrentView->SetDrawingOrigin(origin); + picture->ReleaseReference(); } }