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