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