1/*
2 * Copyright 2001-2009, Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef	_PICTURE_H
6#define	_PICTURE_H
7
8
9#include <InterfaceDefs.h>
10#include <Rect.h>
11#include <Archivable.h>
12
13
14class BDataIO;
15class BView;
16struct _BPictureExtent_;
17
18
19class BPicture : public BArchivable {
20public:
21								BPicture();
22								BPicture(const BPicture& other);
23								BPicture(BMessage* archive);
24	virtual						~BPicture();
25
26	static	BArchivable*		Instantiate(BMessage* archive);
27	virtual	status_t			Archive(BMessage* archive,
28									bool deep = true) const;
29	virtual	status_t			Perform(perform_code d, void* arg);
30
31			status_t			Play(void** callBackTable,
32									int32 tableEntries,
33									void* userData);
34
35			status_t			Flatten(BDataIO* stream);
36			status_t			Unflatten(BDataIO* stream);
37
38	class Private;
39private:
40	// FBC padding and forbidden methods
41	virtual	void				_ReservedPicture1();
42	virtual	void				_ReservedPicture2();
43	virtual	void				_ReservedPicture3();
44
45			BPicture&			operator=(const BPicture&);
46
47private:
48	friend class BWindow;
49	friend class BView;
50	friend class BPrintJob;
51	friend class Private;
52
53			void				_InitData();
54			void				_DisposeData();
55
56			void				_ImportOldData(const void* data, int32 size);
57
58			void				SetToken(int32 token);
59			int32				Token() const;
60
61			bool				_AssertLocalCopy();
62			bool				_AssertOldLocalCopy();
63			bool				_AssertServerCopy();
64
65			status_t			_Upload();
66			status_t			_Download();
67
68	// Deprecated API
69								BPicture(const void* data, int32 size);
70			const void*			Data() const;
71			int32				DataSize() const;
72
73			void				Usurp(BPicture* lameDuck);
74			BPicture*			StepDown();
75
76private:
77			int32				fToken;
78			_BPictureExtent_*	fExtent;
79			BPicture*			fUsurped;
80
81			uint32				_reserved[3];
82};
83
84#endif // _PICTURE_H
85
86