From acfad7920cd256d36fc7848c8b1da5d83cc3363c Mon Sep 17 00:00:00 2001 From: Michael Lotz Date: Sun, 5 Mar 2006 12:59:39 +0000 Subject: [PATCH] Added an ImportBits() function to ServerBitmap and used it in ReadBitmap(). Should work for all colorspaces now. Magnify does now work correctly, fixed bug 197. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16581 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/private/servers/app/ServerBitmap.h | 3 +++ src/servers/app/ServerBitmap.cpp | 13 +++++++++++++ src/servers/app/drawing/DrawingEngine.cpp | 21 +++++++-------------- 3 files changed, 23 insertions(+), 14 deletions(-) diff --git a/headers/private/servers/app/ServerBitmap.h b/headers/private/servers/app/ServerBitmap.h index 84cdf6f1ae..ead88f6420 100644 --- a/headers/private/servers/app/ServerBitmap.h +++ b/headers/private/servers/app/ServerBitmap.h @@ -62,6 +62,9 @@ class ServerBitmap { //! Does a shallow copy of the bitmap passed to it inline void ShallowCopy(const ServerBitmap *from); + status_t ImportBits(const void *bits, int32 bitsLength, + int32 bytesPerRow, color_space colorSpace); + void PrintToStream(); protected: diff --git a/src/servers/app/ServerBitmap.cpp b/src/servers/app/ServerBitmap.cpp index 1af141677a..c73fe34334 100644 --- a/src/servers/app/ServerBitmap.cpp +++ b/src/servers/app/ServerBitmap.cpp @@ -8,6 +8,7 @@ #include "ServerBitmap.h" +#include "ColorConversion.h" #include #include @@ -245,6 +246,18 @@ ServerBitmap::_HandleSpace(color_space space, int32 bytesPerRow) } +status_t +ServerBitmap::ImportBits(const void *bits, int32 bitsLength, int32 bytesPerRow, + color_space colorSpace) +{ + if (!bits || bitsLength < 0 || bytesPerRow <= 0) + return B_BAD_VALUE; + + return BPrivate::ConvertBits(bits, fBuffer, bytesPerRow, fBytesPerRow, + colorSpace, fSpace, fWidth, fHeight); +} + + void ServerBitmap::PrintToStream() { diff --git a/src/servers/app/drawing/DrawingEngine.cpp b/src/servers/app/drawing/DrawingEngine.cpp index 79eaa471ea..2e42cd41dc 100644 --- a/src/servers/app/drawing/DrawingEngine.cpp +++ b/src/servers/app/drawing/DrawingEngine.cpp @@ -1147,23 +1147,16 @@ DrawingEngine::ReadBitmap(ServerBitmap *bitmap, bool drawCursor, BRect bounds) BRect clip(0, 0, buffer->Width() - 1, buffer->Height() - 1); bounds = bounds & clip; - uint32 width = (bounds.IntegerWidth() + 1) * 4; - uint32 height = bounds.IntegerHeight(); - uint32 srcBytesPerRow = buffer->BytesPerRow(); - uint32 dstBytesPerRow = bitmap->BytesPerRow(); - uint8 *dst = (uint8 *)bitmap->Bits(); - uint8 *src = (uint8 *)buffer->Bits(); - src += (uint32)bounds.top * srcBytesPerRow + (uint32)bounds.left * 4; + int32 bytesPerRow = buffer->BytesPerRow(); + int32 bitsLength = bytesPerRow * (bounds.IntegerHeight() + 1); + uint8 *bits = (uint8 *)buffer->Bits(); + bits += (uint32)bounds.top * bytesPerRow + (uint32)bounds.left * 4; - /* ToDo: handle color conversion */ - for (uint32 i = 0; i < height; i++) { - memcpy(dst, src, width); - dst += dstBytesPerRow; - src += srcBytesPerRow; - } + status_t result = bitmap->ImportBits(bits, bitsLength, bytesPerRow, + buffer->ColorSpace()); Unlock(); - return B_OK; + return result; } return B_ERROR;