diff --git a/src/servers/app/DefaultDecorator.cpp b/src/servers/app/DefaultDecorator.cpp index 863ed0daae..fc40b06505 100644 --- a/src/servers/app/DefaultDecorator.cpp +++ b/src/servers/app/DefaultDecorator.cpp @@ -996,10 +996,7 @@ DefaultDecorator::_DrawClose(BRect rect) fCloseBitmaps[index] = bitmap; } - if (bitmap == NULL) - return; - - fDrawingEngine->DrawBitmap(bitmap, rect.OffsetToCopy(0, 0), rect); + _DrawButtonBitmap(bitmap, rect); } @@ -1050,10 +1047,7 @@ DefaultDecorator::_DrawZoom(BRect rect) fZoomBitmaps[index] = bitmap; } - if (bitmap == NULL) - return; - - fDrawingEngine->DrawBitmap(bitmap, rect.OffsetToCopy(0, 0), rect); + _DrawButtonBitmap(bitmap, rect); } // _SetFocus @@ -1093,6 +1087,22 @@ DefaultDecorator::_SetColors() } +void +DefaultDecorator::_DrawButtonBitmap(ServerBitmap *bitmap, BRect rect) +{ + if (bitmap == NULL) + return; + + if (fDrawingEngine->LockParallelAccess()) { + bool copyToFrontEnabled = fDrawingEngine->CopyToFrontEnabled(); + fDrawingEngine->SetCopyToFrontEnabled(true); + fDrawingEngine->DrawBitmap(bitmap, rect.OffsetToCopy(0, 0), rect); + fDrawingEngine->SetCopyToFrontEnabled(copyToFrontEnabled); + fDrawingEngine->UnlockParallelAccess(); + } +} + + /*! \brief Draws a framed rectangle with a gradient. \param down The rectangle should be drawn recessed or not diff --git a/src/servers/app/DefaultDecorator.h b/src/servers/app/DefaultDecorator.h index 07e0140862..d54488b911 100644 --- a/src/servers/app/DefaultDecorator.h +++ b/src/servers/app/DefaultDecorator.h @@ -68,6 +68,8 @@ class DefaultDecorator: public Decorator { virtual void _SetColors(); private: + void _DrawButtonBitmap(ServerBitmap *bitmap, + BRect rect); void _DrawBlendedRect(DrawingEngine *engine, BRect rect, bool down, bool focus); void _GetButtonSizeAndOffset(const BRect& tabRect,