diff --git a/src/servers/app/drawing/AlphaMask.cpp b/src/servers/app/drawing/AlphaMask.cpp index 391c929466..49636c6296 100644 --- a/src/servers/app/drawing/AlphaMask.cpp +++ b/src/servers/app/drawing/AlphaMask.cpp @@ -89,6 +89,25 @@ AlphaMask::Update(BRect bounds, BPoint offset) } +BPoint +AlphaMask::Update(BPoint offset) +{ + BPoint oldOffset = fViewOffset; + fViewOffset = offset; + + if (oldOffset == fCachedOffset && fCachedBitmap != NULL) { + // No need to redraw the picture when only the offset is shifted + fCachedOffset = offset; + _AttachMaskToBuffer(); + } + + if (fPreviousMask != NULL) + fPreviousMask->Update(offset); + + return oldOffset; +} + + void AlphaMask::SetPrevious(AlphaMask* mask) { diff --git a/src/servers/app/drawing/AlphaMask.h b/src/servers/app/drawing/AlphaMask.h index 83ceb7fd2f..cb1969af7a 100644 --- a/src/servers/app/drawing/AlphaMask.h +++ b/src/servers/app/drawing/AlphaMask.h @@ -27,6 +27,7 @@ public: ~AlphaMask(); void Update(BRect bounds, BPoint offset); + BPoint Update(BPoint offset); void SetPrevious(AlphaMask* mask);