HaikuDepot: Added ability to load archived BBitmaps resourced.

* SharedBitmap should probably be moved into its own file.
 * Untested as of yet.
This commit is contained in:
Stephan Aßmus
2013-08-04 18:29:19 +02:00
parent 2ff988cad4
commit 168c3c8b34
+28 -4
View File
@@ -9,6 +9,7 @@
#include <Application.h> #include <Application.h>
#include <Bitmap.h> #include <Bitmap.h>
#include <DataIO.h>
#include <IconUtils.h> #include <IconUtils.h>
#include <MimeType.h> #include <MimeType.h>
#include <Resources.h> #include <Resources.h>
@@ -106,10 +107,9 @@ SharedBitmap::_CreateBitmapFromResource(int32 size) const
size_t dataSize; size_t dataSize;
const void* data = resources.LoadResource(B_VECTOR_ICON_TYPE, fResourceID, const void* data = resources.LoadResource(B_VECTOR_ICON_TYPE, fResourceID,
&dataSize); &dataSize);
if (data == NULL) if (data != NULL) {
return NULL; BBitmap* bitmap = new BBitmap(BRect(0, 0, size - 1, size - 1), 0,
B_RGBA32);
BBitmap* bitmap = new BBitmap(BRect(0, 0, size - 1, size - 1), 0, B_RGBA32);
status = bitmap->InitCheck(); status = bitmap->InitCheck();
if (status == B_OK) { if (status == B_OK) {
status = BIconUtils::GetVectorIcon( status = BIconUtils::GetVectorIcon(
@@ -124,6 +124,30 @@ SharedBitmap::_CreateBitmapFromResource(int32 size) const
return bitmap; return bitmap;
} }
data = resources.LoadResource(B_MESSAGE_TYPE, fResourceID, &dataSize);
if (data != NULL) {
BMemoryIO stream(data, dataSize);
// Try to read as an archived bitmap.
BMessage archive;
status = archive.Unflatten(&stream);
if (status != B_OK)
return NULL;
BBitmap* bitmap = new BBitmap(&archive);
status = bitmap->InitCheck();
if (status != B_OK) {
delete bitmap;
bitmap = NULL;
}
return bitmap;
}
return NULL;
}
BBitmap* BBitmap*
SharedBitmap::_CreateBitmapFromMimeType(int32 size) const SharedBitmap::_CreateBitmapFromMimeType(int32 size) const