xref: /haiku/src/servers/app/ScreenManager.h (revision 58468dfed0b7013c600aecb0a714194bc98eeecc)
1fd5bec1eSAxel Dörfler /*
2fd5bec1eSAxel Dörfler  * Copyright 2005, Haiku.
3fd5bec1eSAxel Dörfler  * Distributed under the terms of the MIT License.
4fd5bec1eSAxel Dörfler  *
5fd5bec1eSAxel Dörfler  * Authors:
6fd5bec1eSAxel Dörfler  *		Axel Dörfler, axeld@pinc-software.de
7fd5bec1eSAxel Dörfler  */
8fd5bec1eSAxel Dörfler #ifndef SCREEN_MANAGER_H
9fd5bec1eSAxel Dörfler #define SCREEN_MANAGER_H
10fd5bec1eSAxel Dörfler 
11fd5bec1eSAxel Dörfler 
12fd5bec1eSAxel Dörfler #include <Looper.h>
13fd5bec1eSAxel Dörfler #include <ObjectList.h>
14fd5bec1eSAxel Dörfler 
15fd5bec1eSAxel Dörfler class BMessage;
16fd5bec1eSAxel Dörfler 
17*58468dfeSStephan Aßmus class DrawingEngine;
18fd5bec1eSAxel Dörfler class HWInterface;
19fd5bec1eSAxel Dörfler class Screen;
20fd5bec1eSAxel Dörfler 
21fd5bec1eSAxel Dörfler 
22fd5bec1eSAxel Dörfler typedef BObjectList<Screen> ScreenList;
23fd5bec1eSAxel Dörfler 
24fd5bec1eSAxel Dörfler 
25fd5bec1eSAxel Dörfler class ScreenOwner {
26fd5bec1eSAxel Dörfler 	public:
27fd5bec1eSAxel Dörfler 		virtual void	ScreenRemoved(Screen* screen) = 0;
28fd5bec1eSAxel Dörfler 		virtual void	ScreenAdded(Screen* screen) = 0;
29fd5bec1eSAxel Dörfler 
30fd5bec1eSAxel Dörfler 		virtual bool	ReleaseScreen(Screen* screen) = 0;
31fd5bec1eSAxel Dörfler };
32fd5bec1eSAxel Dörfler 
33fd5bec1eSAxel Dörfler 
34fd5bec1eSAxel Dörfler class ScreenManager : public BLooper {
35fd5bec1eSAxel Dörfler 	public:
36fd5bec1eSAxel Dörfler 		ScreenManager();
37fd5bec1eSAxel Dörfler 		virtual ~ScreenManager();
38fd5bec1eSAxel Dörfler 
39fd5bec1eSAxel Dörfler 		Screen*			ScreenAt(int32 index) const;
40fd5bec1eSAxel Dörfler 		int32			CountScreens() const;
41fd5bec1eSAxel Dörfler 
42fd5bec1eSAxel Dörfler 		status_t		AcquireScreens(ScreenOwner* owner, int32* wishList,
43fd5bec1eSAxel Dörfler 							int32 wishCount, bool force, ScreenList& list);
44fd5bec1eSAxel Dörfler 		void			ReleaseScreens(ScreenList& list);
45fd5bec1eSAxel Dörfler 
46fd5bec1eSAxel Dörfler 		virtual void	MessageReceived(BMessage* message);
47fd5bec1eSAxel Dörfler 
48fd5bec1eSAxel Dörfler 	private:
49fd5bec1eSAxel Dörfler 		void			_ScanDrivers();
50fd5bec1eSAxel Dörfler 		void			_AddHWInterface(HWInterface* interface);
51fd5bec1eSAxel Dörfler 
52fd5bec1eSAxel Dörfler 		struct screen_item {
53fd5bec1eSAxel Dörfler 			Screen*			screen;
54fd5bec1eSAxel Dörfler 			ScreenOwner*	owner;
55fd5bec1eSAxel Dörfler 		};
56fd5bec1eSAxel Dörfler 
57fd5bec1eSAxel Dörfler 		BObjectList<screen_item>	fScreenList;
58fd5bec1eSAxel Dörfler };
59fd5bec1eSAxel Dörfler 
60fd5bec1eSAxel Dörfler extern ScreenManager *gScreenManager;
61fd5bec1eSAxel Dörfler 
62fd5bec1eSAxel Dörfler #endif	/* SCREEN_MANAGER_H */
63