1/*
2 * Copyright 2013-2014, Stephan A��mus <superstippi@gmx.de>.
3 * Copyright 2020, Andrew Lindesay <apl@lindesay.co.nz>
4 * All rights reserved. Distributed under the terms of the MIT License.
5 */
6#ifndef SHARED_BITMAP_H
7#define SHARED_BITMAP_H
8
9
10#include <Referenceable.h>
11#include <String.h>
12
13#include "HaikuDepotConstants.h"
14
15
16class BBitmap;
17class BDataIO;
18class BPositionIO;
19
20
21class SharedBitmap : public BReferenceable {
22public:
23								SharedBitmap(BBitmap* bitmap);
24								SharedBitmap(int32 resourceID);
25								SharedBitmap(const char* mimeType);
26								SharedBitmap(BPositionIO& data);
27								SharedBitmap(BDataIO& data, size_t size);
28								~SharedBitmap();
29
30			const BBitmap*		Bitmap(BitmapSize which);
31
32private:
33			void				_InitWithData(BDataIO& data, size_t size);
34			BBitmap*			_CreateBitmapFromResource(int32 size) const;
35			BBitmap*			_CreateBitmapFromBuffer(int32 size) const;
36			BBitmap*			_CreateBitmapFromMimeType(int32 size) const;
37
38			BBitmap*			_LoadBitmapFromBuffer(const void* buffer,
39									size_t dataSize) const;
40			BBitmap*			_LoadArchivedBitmapFromStream(
41									BPositionIO& stream) const;
42			BBitmap*			_LoadTranslatorBitmapFromStream(
43									BPositionIO& stream) const;
44			BBitmap*			_LoadIconFromBuffer(const void* buffer,
45									size_t dataSize, int32 size) const;
46
47private:
48			int32				fResourceID;
49			uint8*				fBuffer;
50			off_t				fSize;
51			BString				fMimeType;
52			BBitmap*			fBitmap[4];
53};
54
55
56typedef BReference<SharedBitmap> BitmapRef;
57
58
59#endif // SHARED_BITMAP_H
60