Screensaver: Convert Screensaver to a BDirectWindow

This allows OpenGL screensavers to be able to show a preview.
This commit is contained in:
John Scipione
2014-02-23 02:07:23 -05:00
parent ada2a0a1ef
commit 0fb019bbf2
3 changed files with 24 additions and 12 deletions
+1 -2
View File
@@ -18,8 +18,7 @@ Preference ScreenSaver :
ScreenSaver.cpp ScreenSaver.cpp
# needed for some old/broken screen saver add-ons that do not # needed for some old/broken screen saver add-ons that do not
# link against libscreensaver.so # link against libscreensaver.so
: be game libscreensaver.so localestub tracker $(TARGET_LIBSTDC++)
: tracker libscreensaver.so be $(TARGET_LIBSTDC++) localestub
: ScreenSaver.rdef : ScreenSaver.rdef
; ;
@@ -143,11 +143,12 @@ public:
void SaveState(); void SaveState();
BScreenSaver* ScreenSaver();
private: private:
static int _CompareScreenSaverItems(const void* left, static int _CompareScreenSaverItems(const void* left,
const void* right); const void* right);
BScreenSaver* _ScreenSaver();
void _CloseSaver(); void _CloseSaver();
void _OpenSaver(); void _OpenSaver();
@@ -662,7 +663,7 @@ ModulesView::MessageReceived(BMessage* message)
void void
ModulesView::SaveState() ModulesView::SaveState()
{ {
BScreenSaver* saver = _ScreenSaver(); BScreenSaver* saver = ScreenSaver();
if (saver == NULL) if (saver == NULL)
return; return;
@@ -746,7 +747,7 @@ ModulesView::_CompareScreenSaverItems(const void* left, const void* right)
BScreenSaver* BScreenSaver*
ModulesView::_ScreenSaver() ModulesView::ScreenSaver()
{ {
if (fSaverRunner != NULL) if (fSaverRunner != NULL)
return fSaverRunner->ScreenSaver(); return fSaverRunner->ScreenSaver();
@@ -760,7 +761,7 @@ ModulesView::_CloseSaver()
{ {
// remove old screen saver preview & config // remove old screen saver preview & config
BScreenSaver* saver = _ScreenSaver(); BScreenSaver* saver = ScreenSaver();
BView* view = fPreviewView->RemovePreview(); BView* view = fPreviewView->RemovePreview();
if (fSettingsView != NULL) if (fSettingsView != NULL)
fSettingsBox->RemoveChild(fSettingsView); fSettingsBox->RemoveChild(fSettingsView);
@@ -802,7 +803,7 @@ ModulesView::_OpenSaver()
fSettingsView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); fSettingsView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
fSettingsBox->AddChild(fSettingsView); fSettingsBox->AddChild(fSettingsView);
BScreenSaver* saver = _ScreenSaver(); BScreenSaver* saver = ScreenSaver();
if (saver != NULL && fSettingsView != NULL) { if (saver != NULL && fSettingsView != NULL) {
saver->StartConfig(fSettingsView); saver->StartConfig(fSettingsView);
if (saver->StartSaver(view, false) == B_OK) if (saver->StartSaver(view, false) == B_OK)
@@ -827,8 +828,9 @@ ModulesView::_OpenSaver()
ScreenSaverWindow::ScreenSaverWindow() ScreenSaverWindow::ScreenSaverWindow()
: :
BWindow(BRect(50, 50, 496, 375), B_TRANSLATE_SYSTEM_NAME("ScreenSaver"), BDirectWindow(BRect(50, 50, 496, 375),
B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS | B_AUTO_UPDATE_SIZE_LIMITS) B_TRANSLATE_SYSTEM_NAME("ScreenSaver"), B_TITLED_WINDOW,
B_ASYNCHRONOUS_CONTROLS | B_AUTO_UPDATE_SIZE_LIMITS)
{ {
fSettings.Load(); fSettings.Load();
@@ -897,6 +899,15 @@ ScreenSaverWindow::~ScreenSaverWindow()
} }
void
ScreenSaverWindow::DirectConnected(direct_buffer_info* info)
{
BScreenSaver* saver = fModulesView->ScreenSaver();
if (saver != NULL)
saver->DirectConnected(info);
}
void void
ScreenSaverWindow::MessageReceived(BMessage* message) ScreenSaverWindow::MessageReceived(BMessage* message)
{ {
@@ -912,7 +923,7 @@ ScreenSaverWindow::MessageReceived(BMessage* message)
break; break;
default: default:
BWindow::MessageReceived(message); BDirectWindow::MessageReceived(message);
} }
} }
@@ -12,7 +12,7 @@
#define SCREEN_SAVER_WINDOW_H #define SCREEN_SAVER_WINDOW_H
#include <Window.h> #include <DirectWindow.h>
#include "PasswordWindow.h" #include "PasswordWindow.h"
#include "ScreenSaverSettings.h" #include "ScreenSaverSettings.h"
@@ -26,11 +26,13 @@ class FadeView;
class ModulesView; class ModulesView;
class ScreenSaverWindow : public BWindow { class ScreenSaverWindow : public BDirectWindow {
public: public:
ScreenSaverWindow(); ScreenSaverWindow();
virtual ~ScreenSaverWindow(); virtual ~ScreenSaverWindow();
virtual void DirectConnected(direct_buffer_info* info);
virtual void MessageReceived(BMessage* message); virtual void MessageReceived(BMessage* message);
virtual void ScreenChanged(BRect frame, color_space space); virtual void ScreenChanged(BRect frame, color_space space);
virtual bool QuitRequested(); virtual bool QuitRequested();