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