1/*
2 * Copyright 2003-2009, Haiku.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Michael Phipps
7 *		Jérôme Duval, jerome.duval@free.fr
8 *		Axel Dörfler, axeld@pinc-software.de
9 */
10#ifndef SCREEN_SAVER_FILTER_H
11#define SCREEN_SAVER_FILTER_H
12
13
14#include "ScreenSaverSettings.h"
15
16#include <InputServerFilter.h>
17#include <Locker.h>
18#include <Looper.h>
19#include <Node.h>
20
21
22class BMessageRunner;
23class ScreenSaverFilter;
24
25
26class ScreenSaverController : public BLooper {
27public:
28								ScreenSaverController(
29									ScreenSaverFilter* filter);
30	virtual	void				MessageReceived(BMessage* msg);
31
32private:
33			ScreenSaverFilter*	fFilter;
34};
35
36
37class ScreenSaverFilter : public BInputServerFilter, BLocker {
38public:
39								ScreenSaverFilter();
40	virtual						~ScreenSaverFilter();
41
42	virtual	filter_result		Filter(BMessage* message, BList* outList);
43
44			void				Suspend(BMessage* message);
45
46			void				CheckTime();
47			void				CheckCornerInvoke();
48
49			void				ReloadSettings();
50			void				SetIsRunning(bool isRunning);
51
52private:
53			uint32				_SnoozeTime() {return fSnoozeTime;}
54			void				_WatchSettings();
55			void				_UpdateRectangles();
56			BRect				_ScreenCorner(screen_corner pos,
57									uint32 cornerSize);
58
59			void				_Invoke();
60
61			ScreenSaverSettings	fSettings;
62			bigtime_t			fLastEventTime;
63			bigtime_t			fBlankTime;
64			bigtime_t			fSnoozeTime;
65			screen_corner		fBlankCorner;
66			screen_corner		fNeverBlankCorner;
67			screen_corner		fCurrentCorner;
68			BRect				fBlankRect;
69			BRect				fNeverBlankRect;
70			uint32				fFrameNum;
71
72			ScreenSaverController* fController;
73			node_ref			fNodeRef;
74			BMessageRunner*		fRunner;
75			BMessageRunner*		fCornerRunner;
76			bool				fWatchingDirectory;
77			bool				fWatchingFile;
78
79			bool				fIsRunning;
80};
81
82#endif	/* SCREEN_SAVER_FILTER_H */
83