From cd621b9585b4dd2dd629283976130c13afeb087e Mon Sep 17 00:00:00 2001 From: Julian Harnath Date: Wed, 22 Jul 2015 21:31:42 +0200 Subject: [PATCH] app_server: add method to shift alpha masks * Allow shifting the offset of alpha masks without changing the size. Ideally, we only need to reattach the buffer in the shifted position, saving the work of reallocating and redrawing the mask picture. Needed for layers support. --- src/servers/app/drawing/AlphaMask.cpp | 19 +++++++++++++++++++ src/servers/app/drawing/AlphaMask.h | 1 + 2 files changed, 20 insertions(+) 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);