xref: /haiku/src/servers/app/ServerPicture.h (revision 68ea01249e1e2088933cb12f9c28d4e5c5d1c9ef)
1 /*
2  * Copyright 2001-2019, Haiku.
3  * Distributed under the terms of the MIT License.
4  *
5  * Authors:
6  *		DarkWyrm <bpmagic@columbus.rr.com>
7  *		Stefano Ceccherini <stefano.ceccherini@gmail.com>
8  *		Julian Harnath <julian.harnath@rwth-aachen.de>
9  *		Stephan Aßmus <superstippi@gmx.de>
10  */
11 #ifndef SERVER_PICTURE_H
12 #define SERVER_PICTURE_H
13 
14 
15 #include <DataIO.h>
16 
17 #include <ObjectList.h>
18 #include <PictureDataWriter.h>
19 #include <Referenceable.h>
20 
21 
22 class BFile;
23 class Canvas;
24 class ServerApp;
25 class ServerFont;
26 class View;
27 
28 namespace BPrivate {
29 	class LinkReceiver;
30 	class PortLink;
31 }
32 class BList;
33 
34 
35 class ServerPicture : public BReferenceable, public PictureDataWriter {
36 public:
37 								ServerPicture();
38 								ServerPicture(const ServerPicture& other);
39 								ServerPicture(const char* fileName,
40 									int32 offset);
41 	virtual						~ServerPicture();
42 
43 			int32				Token() { return fToken; }
44 			bool				SetOwner(ServerApp* owner);
45 			ServerApp*			Owner() const { return fOwner; }
46 
47 			bool				ReleaseClientReference();
48 
49 			void				EnterStateChange();
50 			void				ExitStateChange();
51 
52 			void				SyncState(Canvas* canvas);
53 			void				WriteFontState(const ServerFont& font,
54 									uint16 mask);
55 
56 			void				Play(Canvas* target);
57 
58 			void 				PushPicture(ServerPicture* picture);
59 			ServerPicture*		PopPicture();
60 
61 			void				AppendPicture(ServerPicture* picture);
62 			bool				NestPicture(ServerPicture* picture);
63 
64 			off_t				DataLength() const;
65 
66 			status_t			ImportData(BPrivate::LinkReceiver& link);
67 			status_t			ExportData(BPrivate::PortLink& link);
68 
69 private:
70 	friend class PictureBoundingBoxPlayer;
71 
72 			typedef BObjectList<ServerPicture> PictureList;
73 
74 			int32				fToken;
75 			BFile*				fFile;
76 			BPositionIO*		fData;
77 			PictureList*		fPictures;
78 			ServerPicture*		fPushed;
79 			ServerApp*			fOwner;
80 };
81 
82 
83 #endif	// SERVER_PICTURE_H
84