From cbb7d5038ab757828d279d2df0a475744baff485 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Thu, 13 Apr 2006 15:46:06 +0000 Subject: [PATCH] * The screen saver window is now a kWindowScreenFeel, and thus should always be in front of all other windows. * Added TODO items where the code is strange or messy. * Big cleanup (renamed files and variables like "fPww" to something more meaningful). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17126 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/bin/screen_blanker/Jamfile | 4 +- src/bin/screen_blanker/SSAwindow.cpp | 44 ----- src/bin/screen_blanker/SSAwindow.h | 21 --- src/bin/screen_blanker/ScreenSaverApp.cpp | 162 +++++++++++-------- src/bin/screen_blanker/ScreenSaverApp.h | 57 ++++--- src/bin/screen_blanker/ScreenSaverWindow.cpp | 59 +++++++ src/bin/screen_blanker/ScreenSaverWindow.h | 29 ++++ 7 files changed, 213 insertions(+), 163 deletions(-) delete mode 100644 src/bin/screen_blanker/SSAwindow.cpp delete mode 100644 src/bin/screen_blanker/SSAwindow.h mode change 100755 => 100644 src/bin/screen_blanker/ScreenSaverApp.cpp mode change 100755 => 100644 src/bin/screen_blanker/ScreenSaverApp.h create mode 100644 src/bin/screen_blanker/ScreenSaverWindow.cpp create mode 100644 src/bin/screen_blanker/ScreenSaverWindow.h diff --git a/src/bin/screen_blanker/Jamfile b/src/bin/screen_blanker/Jamfile index e0a02bb365..91c5335af9 100644 --- a/src/bin/screen_blanker/Jamfile +++ b/src/bin/screen_blanker/Jamfile @@ -2,11 +2,11 @@ SubDir HAIKU_TOP src bin screen_blanker ; SetSubDirSupportedPlatformsBeOSCompatible ; -UsePrivateHeaders screen_saver ; +UsePrivateHeaders interface screen_saver ; BinCommand screen_blanker : ScreenSaverApp.cpp - SSAwindow.cpp + ScreenSaverWindow.cpp PasswordWindow.cpp ScreenSaver.cpp : be game libscreensaver.so diff --git a/src/bin/screen_blanker/SSAwindow.cpp b/src/bin/screen_blanker/SSAwindow.cpp deleted file mode 100644 index 9b7ca8656c..0000000000 --- a/src/bin/screen_blanker/SSAwindow.cpp +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2003-2005, Haiku. - * Distributed under the terms of the MIT License. - * - * Authors: - * Michael Phipps - * Jérôme Duval, jerome.duval@free.fr - */ -#include "SSAwindow.h" -#include - -// This is the BDirectWindow subclass that rendering occurs in. -// A view is added to it so that BView based screensavers will work. -SSAwindow::SSAwindow(BRect frame) - : BDirectWindow(frame, "ScreenSaver Window", - B_BORDERED_WINDOW, B_NOT_RESIZABLE|B_NOT_ZOOMABLE) , fSaver(NULL) -{ - frame.OffsetTo(0,0); - fView = new BView(frame,"ScreenSaver View",B_FOLLOW_ALL,B_WILL_DRAW); - fView->SetViewColor(0,0,0); - AddChild(fView); -} - - -SSAwindow::~SSAwindow() -{ - Hide(); -} - - -bool -SSAwindow::QuitRequested() -{ - return true; -} - - -void -SSAwindow::DirectConnected(direct_buffer_info *info) -{ - if (fSaver) - fSaver->DirectConnected(info); -} - diff --git a/src/bin/screen_blanker/SSAwindow.h b/src/bin/screen_blanker/SSAwindow.h deleted file mode 100644 index 440b714537..0000000000 --- a/src/bin/screen_blanker/SSAwindow.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2003, Michael Phipps. All rights reserved. - * Distributed under the terms of the MIT License. - */ - -#include -#include "ScreenSaver.h" - -class SSAwindow : public BDirectWindow { -public: - SSAwindow(BRect frame); - ~SSAwindow(); - virtual bool QuitRequested(); - virtual void DirectConnected(direct_buffer_info *info); - void SetSaver(BScreenSaver *s) {fSaver = s;} - - BView *fView; -private: - BScreenSaver *fSaver; -}; - diff --git a/src/bin/screen_blanker/ScreenSaverApp.cpp b/src/bin/screen_blanker/ScreenSaverApp.cpp old mode 100755 new mode 100644 index 7ceb5b32d1..93b52db175 --- a/src/bin/screen_blanker/ScreenSaverApp.cpp +++ b/src/bin/screen_blanker/ScreenSaverApp.cpp @@ -1,11 +1,15 @@ /* - * Copyright 2003-2005, Haiku. + * Copyright 2003-2006, Haiku. * Distributed under the terms of the MIT License. * * Authors: * Michael Phipps * Jérôme Duval, jerome.duval@free.fr */ + + +#include "ScreenSaverApp.h" + #include #include #include @@ -18,27 +22,15 @@ #include #include -#include "ScreenSaverApp.h" - const static int32 RESUME_SAVER = 'RSSV'; -// Start the server application. Set pulse to fire once per second. -// Run until the application quits. -int main(int, char**) -{ - ScreenSaverApp myApplication; - myApplication.Run(); - return(0); -} - -// Construct the server app. Doesn't do much, at this point. ScreenSaverApp::ScreenSaverApp() : BApplication(SCREEN_BLANKER_SIG), - fWin(NULL), + fWindow(NULL), fSaver(NULL), - fThrd(NULL), - fPww(NULL), + fThread(NULL), + fPasswordWindow(NULL), fThreadID(-1), fRunner(NULL) { @@ -46,85 +38,98 @@ ScreenSaverApp::ScreenSaverApp() } -void +void ScreenSaverApp::ReadyToRun() { - if (!fPref.LoadSettings()) { + if (!fPrefs.LoadSettings()) { fprintf(stderr, "could not load settings\n"); exit(1); - } else { // If everything works OK, create a BDirectWindow and start the render thread. - BScreen theScreen(B_MAIN_SCREEN_ID); - fWin = new SSAwindow(theScreen.Frame()); - fPww = new PasswordWindow(); - fThrd = new ScreenSaverThread(fWin ,fWin->fView, &fPref); - - fSaver = fThrd->LoadAddOn(); - if (fSaver) { - fWin->SetSaver(fSaver); - fThreadID = spawn_thread(ScreenSaverThread::ThreadFunc,"ScreenSaverRenderer", B_LOW_PRIORITY,fThrd); - resume_thread(fThreadID); - } else { - fprintf(stderr, "could not load the screensaver addon\n"); - } - fWin->SetFullScreen(true); - fWin->Show(); - HideCursor(); } + + // create a BDirectWindow and start the render thread. + BScreen screen(B_MAIN_SCREEN_ID); + fWindow = new ScreenSaverWindow(screen.Frame()); + fPasswordWindow = new PasswordWindow(); + fThread = new ScreenSaverThread(fWindow, fWindow->ChildAt(0), &fPrefs); + + fSaver = fThread->LoadAddOn(); + if (fSaver) { + fWindow->SetSaver(fSaver); + fThreadID = spawn_thread(ScreenSaverThread::ThreadFunc, + "ScreenSaverRenderer", B_LOW_PRIORITY, fThread); + resume_thread(fThreadID); + } else { + fprintf(stderr, "could not load the screensaver addon\n"); + } + + fWindow->SetFullScreen(true); + fWindow->Show(); + HideCursor(); } -void -ScreenSaverApp::ShowPW() +void +ScreenSaverApp::_ShowPasswordWindow() { - if (fWin->Lock()) { + if (fWindow->Lock()) { if (fThreadID > -1) suspend_thread(fThreadID); - if (B_OK==fWin->SetFullScreen(false)) { - fWin->Sync(); + + if (fWindow->SetFullScreen(false) == B_OK) { + fWindow->Sync(); + // TODO: is that needed? ShowCursor(); - fPww->Show(); - fPww->Sync(); + fPasswordWindow->Show(); } - fWin->Unlock(); + fWindow->Unlock(); } + + _ResumeScreenSaver(); +} + + +void +ScreenSaverApp::_ResumeScreenSaver() +{ delete fRunner; - fRunner = new BMessageRunner(BMessenger(this), new BMessage(RESUME_SAVER), fPref.BlankTime(), 1); + fRunner = new BMessageRunner(BMessenger(this), new BMessage(RESUME_SAVER), + fPrefs.BlankTime(), 1); if (fRunner->InitCheck() != B_OK) { fprintf(stderr, "fRunner init failed\n"); } } -void +void ScreenSaverApp::MessageReceived(BMessage *message) { - switch(message->what) { + switch (message->what) { case UNLOCK_MESSAGE: { - if (strcmp(fPref.Password(), crypt(fPww->GetPassword(), fPref.Password())) != 0) { + if (strcmp(fPrefs.Password(), crypt(fPasswordWindow->GetPassword(), + fPrefs.Password())) != 0) { beep(); - fPww->SetPassword(""); - delete fRunner; - fRunner = new BMessageRunner(BMessenger(this), new BMessage(RESUME_SAVER), fPref.BlankTime(), 1); - if (fRunner->InitCheck()!=B_OK) { - fprintf(stderr, "fRunner init failed\n"); - } + fPasswordWindow->SetPassword(""); + _ResumeScreenSaver(); } else { PRINT(("Quitting!\n")); - Shutdown(); + _Shutdown(); } break; } + case RESUME_SAVER: - if (fWin->Lock()) { - if (B_OK==fWin->SetFullScreen(true)) { + if (fWindow->Lock()) { + if (fWindow->SetFullScreen(true) == B_OK) { HideCursor(); - fPww->Hide(); + fPasswordWindow->Hide(); } if (fThreadID > -1) resume_thread(fThreadID); - fWin->Unlock(); + fWindow->Unlock(); } + break; + default: BApplication::MessageReceived(message); break; @@ -132,26 +137,43 @@ ScreenSaverApp::MessageReceived(BMessage *message) } -bool +bool ScreenSaverApp::QuitRequested() { - if (fPref.LockEnable() && (system_time()-fBlankTime > (fPref.PasswordTime()-fPref.BlankTime()))) { - ShowPW(); + if (fPrefs.LockEnable() + && (system_time() - fBlankTime > (fPrefs.PasswordTime() - fPrefs.BlankTime()))) { + _ShowPasswordWindow(); return false; } else - Shutdown(); - return BApplication::QuitRequested(); + _Shutdown(); + + return true; } -void -ScreenSaverApp::Shutdown(void) +void +ScreenSaverApp::_Shutdown(void) { - if (fWin) - fWin->Hide(); - if (fThreadID > -1) + if (fWindow) + fWindow->Hide(); + if (fThreadID > -1) { + // TODO: kill_thread()? How about doing this right?? kill_thread(fThreadID); - if (fThrd) - delete fThrd; + } + if (fThread) + delete fThread; + Quit(); } + + +// #pragma mark - + + +int +main(int, char**) +{ + ScreenSaverApp app; + app.Run(); + return 0; +} diff --git a/src/bin/screen_blanker/ScreenSaverApp.h b/src/bin/screen_blanker/ScreenSaverApp.h old mode 100755 new mode 100644 index 552754440a..2e8b59a6a8 --- a/src/bin/screen_blanker/ScreenSaverApp.h +++ b/src/bin/screen_blanker/ScreenSaverApp.h @@ -1,43 +1,48 @@ /* - * Copyright 2003-2005, Haiku. + * Copyright 2003-2006, Haiku. * Distributed under the terms of the MIT License. * * Authors: * Michael Phipps * Jérôme Duval, jerome.duval@free.fr */ - #ifndef SCREEN_SAVER_APP_H #define SCREEN_SAVER_APP_H -#include -#include -#include "SSAwindow.h" + +#include "PasswordWindow.h" #include "ScreenSaverPrefs.h" #include "ScreenSaverThread.h" -#include "PasswordWindow.h" +#include "ScreenSaverWindow.h" -class ScreenSaverApp : public BApplication -{ -public: - ScreenSaverApp(); - bool LoadAddOn(); - void ReadyToRun(); - virtual bool QuitRequested(); - virtual void MessageReceived(BMessage *message); - void ShowPW(); -private: - ScreenSaverPrefs fPref; - SSAwindow *fWin; - BScreenSaver *fSaver; - ScreenSaverThread *fThrd; - PasswordWindow *fPww; +#include +#include - thread_id fThreadID; - bigtime_t fBlankTime; - BMessageRunner *fRunner; - void Shutdown(); +class ScreenSaverApp : public BApplication { + public: + ScreenSaverApp(); + + virtual void ReadyToRun(); + + virtual bool QuitRequested(); + virtual void MessageReceived(BMessage *message); + + private: + bool _LoadAddOn(); + void _ShowPasswordWindow(); + void _ResumeScreenSaver(); + void _Shutdown(); + + ScreenSaverPrefs fPrefs; + ScreenSaverWindow *fWindow; + BScreenSaver *fSaver; + ScreenSaverThread *fThread; + PasswordWindow *fPasswordWindow; + + thread_id fThreadID; + bigtime_t fBlankTime; + BMessageRunner *fRunner; }; -#endif //SCREEN_SAVER_APP_H +#endif // SCREEN_SAVER_APP_H diff --git a/src/bin/screen_blanker/ScreenSaverWindow.cpp b/src/bin/screen_blanker/ScreenSaverWindow.cpp new file mode 100644 index 0000000000..fdab30e2d6 --- /dev/null +++ b/src/bin/screen_blanker/ScreenSaverWindow.cpp @@ -0,0 +1,59 @@ +/* + * Copyright 2003-2006, Haiku. + * Distributed under the terms of the MIT License. + * + * Authors: + * Michael Phipps + * Jérôme Duval, jerome.duval@free.fr + */ + + +#include "ScreenSaverWindow.h" + +#include +#include + + +/*! + This is the BDirectWindow subclass that rendering occurs in. + A view is added to it so that BView based screensavers will work. +*/ +ScreenSaverWindow::ScreenSaverWindow(BRect frame) + : BDirectWindow(frame, "ScreenSaver Window", + B_NO_BORDER_WINDOW_LOOK, kWindowScreenFeel, B_NOT_RESIZABLE | B_NOT_ZOOMABLE), + fSaver(NULL) +{ + frame.OffsetTo(0, 0); + fTopView = new BView(frame, "ScreenSaver View", B_FOLLOW_ALL, B_WILL_DRAW); + fTopView->SetViewColor(0, 0, 0); + AddChild(fTopView); +} + + +ScreenSaverWindow::~ScreenSaverWindow() +{ + Hide(); +} + + +void +ScreenSaverWindow::SetSaver(BScreenSaver *saver) +{ + fSaver = saver; +} + + +bool +ScreenSaverWindow::QuitRequested() +{ + return true; +} + + +void +ScreenSaverWindow::DirectConnected(direct_buffer_info *info) +{ + if (fSaver) + fSaver->DirectConnected(info); +} + diff --git a/src/bin/screen_blanker/ScreenSaverWindow.h b/src/bin/screen_blanker/ScreenSaverWindow.h new file mode 100644 index 0000000000..bbedf54892 --- /dev/null +++ b/src/bin/screen_blanker/ScreenSaverWindow.h @@ -0,0 +1,29 @@ +/* + * Copyright 2003, Michael Phipps. All rights reserved. + * Distributed under the terms of the MIT License. + */ +#ifndef SCREEN_SAVER_WINDOW_H +#define SCREEN_SAVER_WINDOW_H + + +#include "ScreenSaver.h" + +#include + + +class ScreenSaverWindow : public BDirectWindow { + public: + ScreenSaverWindow(BRect frame); + ~ScreenSaverWindow(); + + void SetSaver(BScreenSaver *saver); + + virtual bool QuitRequested(); + virtual void DirectConnected(direct_buffer_info *info); + + private: + BView *fTopView; + BScreenSaver *fSaver; +}; + +#endif // SCREEN_SAVER_WINDOW_H