xref: /haiku/src/servers/app/ScreenManager.h (revision 68667bf48a9e29a2d142cb3308b606d80bee3c2d)
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 
1758468dfeSStephan 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:
2734bd8bf5SJérôme Duval 		virtual ~ScreenOwner() {};
28fd5bec1eSAxel Dörfler 		virtual void	ScreenRemoved(Screen* screen) = 0;
29fd5bec1eSAxel Dörfler 		virtual void	ScreenAdded(Screen* screen) = 0;
30fd5bec1eSAxel Dörfler 
31fd5bec1eSAxel Dörfler 		virtual bool	ReleaseScreen(Screen* screen) = 0;
32fd5bec1eSAxel Dörfler };
33fd5bec1eSAxel Dörfler 
34fd5bec1eSAxel Dörfler 
35fd5bec1eSAxel Dörfler class ScreenManager : public BLooper {
36fd5bec1eSAxel Dörfler 	public:
37fd5bec1eSAxel Dörfler 		ScreenManager();
38fd5bec1eSAxel Dörfler 		virtual ~ScreenManager();
39fd5bec1eSAxel Dörfler 
40fd5bec1eSAxel Dörfler 		Screen*			ScreenAt(int32 index) const;
41fd5bec1eSAxel Dörfler 		int32			CountScreens() const;
42fd5bec1eSAxel Dörfler 
43fd5bec1eSAxel Dörfler 		status_t		AcquireScreens(ScreenOwner* owner, int32* wishList,
44*68667bf4SMichael Lotz 							int32 wishCount, const char* target, bool force,
45*68667bf4SMichael Lotz 							ScreenList& list);
46fd5bec1eSAxel Dörfler 		void			ReleaseScreens(ScreenList& list);
47fd5bec1eSAxel Dörfler 
48fd5bec1eSAxel Dörfler 		virtual void	MessageReceived(BMessage* message);
49fd5bec1eSAxel Dörfler 
50fd5bec1eSAxel Dörfler 	private:
51fd5bec1eSAxel Dörfler 		struct screen_item {
52fd5bec1eSAxel Dörfler 			Screen*			screen;
53fd5bec1eSAxel Dörfler 			ScreenOwner*	owner;
54fd5bec1eSAxel Dörfler 		};
55fd5bec1eSAxel Dörfler 
56*68667bf4SMichael Lotz 		void			_ScanDrivers();
57*68667bf4SMichael Lotz 		screen_item*	_AddHWInterface(HWInterface* interface);
58*68667bf4SMichael Lotz 
59fd5bec1eSAxel Dörfler 		BObjectList<screen_item>	fScreenList;
60fd5bec1eSAxel Dörfler };
61fd5bec1eSAxel Dörfler 
62fd5bec1eSAxel Dörfler extern ScreenManager *gScreenManager;
63fd5bec1eSAxel Dörfler 
64fd5bec1eSAxel Dörfler #endif	/* SCREEN_MANAGER_H */
65