Unpdates, fixes and promoted ScreenSaverPrefs.cpp and ScreenSaverThread.cpp

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@7039 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Michael Phipps
2004-03-20 18:53:33 +00:00
parent e948782184
commit 112c0c2389
4 changed files with 211 additions and 66 deletions
+3 -1
View File
@@ -4,8 +4,10 @@ UsePrivateHeaders screensaver ;
SharedLibrary screensaver : SharedLibrary screensaver :
ScreenSaver.cpp ScreenSaver.cpp
ScreenSaverPrefs.cpp
ScreenSaverThread.cpp
; ;
LinkSharedOSLibs libscreensaver.so : LinkSharedOSLibs libscreensaver.so :
be be game
; ;
+35 -65
View File
@@ -1,157 +1,127 @@
#include "ScreenSaver.h" #include "ScreenSaver.h"
#include <stdio.h>
BScreenSaver::BScreenSaver(BMessage *archive, BScreenSaver::BScreenSaver(BMessage *archive,
image_id) image_id) : ticksize(50000),looponcount(0),loopoffcount(0) {
{
ticksize = 50000;
looponcount = 0;
loopoffcount = 0;
} }
BScreenSaver::~BScreenSaver() BScreenSaver::~BScreenSaver() {
{
} }
status_t status_t
BScreenSaver::InitCheck() BScreenSaver::InitCheck() {
{
return B_OK; // This method is meant to be overridden return B_OK; // This method is meant to be overridden
} }
status_t status_t
BScreenSaver::StartSaver(BView *view, BScreenSaver::StartSaver(BView *view, bool preview) {
bool preview)
{
return B_OK; // This method is meant to be overridden return B_OK; // This method is meant to be overridden
} }
void void
BScreenSaver::StopSaver() BScreenSaver::StopSaver() {
return; // This method is meant to be overridden
}
void
BScreenSaver::Draw(BView *view, int32 frame)
{ {
return; // This method is meant to be overridden return; // This method is meant to be overridden
} }
void void
BScreenSaver::Draw(BView *view, BScreenSaver::DirectConnected(direct_buffer_info *info) {
int32 frame)
{
return; // This method is meant to be overridden return; // This method is meant to be overridden
} }
void void
BScreenSaver::DirectConnected(direct_buffer_info *info) BScreenSaver::DirectDraw(int32 frame) {
{
return; // This method is meant to be overridden return; // This method is meant to be overridden
} }
void void
BScreenSaver::DirectDraw(int32 frame) BScreenSaver::StartConfig(BView *configView) {
{
return; // This method is meant to be overridden return; // This method is meant to be overridden
} }
void void
BScreenSaver::StartConfig(BView *configView) BScreenSaver::StopConfig() {
{
return; // This method is meant to be overridden return; // This method is meant to be overridden
} }
void void
BScreenSaver::StopConfig() BScreenSaver::SupplyInfo(BMessage *info) const {
{
return; // This method is meant to be overridden return; // This method is meant to be overridden
} }
void void
BScreenSaver::SupplyInfo(BMessage *info) const BScreenSaver::ModulesChanged(const BMessage *info) {
{
return; // This method is meant to be overridden
}
void
BScreenSaver::ModulesChanged(const BMessage *info)
{
return; // This method is meant to be overridden return; // This method is meant to be overridden
} }
status_t status_t
BScreenSaver::SaveState(BMessage *into) const BScreenSaver::SaveState(BMessage *into) const {
{ return B_ERROR; // This method is meant to be overridden
return -1;
} }
void void
BScreenSaver::SetTickSize(bigtime_t ts) BScreenSaver::SetTickSize(bigtime_t ts) {
{ ticksize = ts;
ticksize = ts;
} }
bigtime_t bigtime_t
BScreenSaver::TickSize() const BScreenSaver::TickSize() const {
{
return ticksize; return ticksize;
} }
void void
BScreenSaver::SetLoop(int32 on_count, BScreenSaver::SetLoop(int32 on_count, int32 off_count) {
int32 off_count) looponcount = on_count;
{ loopoffcount = off_count;
looponcount = on_count;
loopoffcount = off_count;
} }
int32 int32
BScreenSaver::LoopOnCount() const BScreenSaver::LoopOnCount() const {
{
return looponcount; return looponcount;
} }
int32 int32
BScreenSaver::LoopOffCount() const BScreenSaver::LoopOffCount() const {
{
return loopoffcount; return loopoffcount;
} }
void void
BScreenSaver::_ReservedScreenSaver1() BScreenSaver::_ReservedScreenSaver1() {
{
} }
void void
BScreenSaver::_ReservedScreenSaver2() BScreenSaver::_ReservedScreenSaver2() {
{
} }
void void
BScreenSaver::_ReservedScreenSaver3() BScreenSaver::_ReservedScreenSaver3() {
{
} }
void void
BScreenSaver::_ReservedScreenSaver4() BScreenSaver::_ReservedScreenSaver4() {
{
} }
void void
BScreenSaver::_ReservedScreenSaver5() BScreenSaver::_ReservedScreenSaver5() {
{
} }
void void
BScreenSaver::_ReservedScreenSaver6() BScreenSaver::_ReservedScreenSaver6() {
{
} }
void void
BScreenSaver::_ReservedScreenSaver7() BScreenSaver::_ReservedScreenSaver7() {
{
} }
void void
BScreenSaver::_ReservedScreenSaver8() BScreenSaver::_ReservedScreenSaver8() {
{
} }
+116
View File
@@ -0,0 +1,116 @@
#include "ScreenSaverPrefs.h"
#include "StorageDefs.h"
#include "FindDirectory.h"
#include "File.h"
#include "Path.h"
#include "string.h" // Posix string functions
#include "String.h" // BString def
#include <stdio.h>
ScreenSaverPrefs::ScreenSaverPrefs(void) {
}
// Load the flattened settings BMessage from disk and parse it.
bool ScreenSaverPrefs::LoadSettings(void) {
bool ok;
char pathAndFile[B_PATH_NAME_LENGTH];
BPath path;
status_t found=find_directory(B_USER_SETTINGS_DIRECTORY,&path);
if (ok=(found==B_OK)) {
strncpy(pathAndFile,path.Path(),B_PATH_NAME_LENGTH-1);
strncat(pathAndFile,"/ScreenSaver_settings",B_PATH_NAME_LENGTH-1);
BFile ssSettings(pathAndFile,B_READ_ONLY);
if (B_OK==ssSettings.InitCheck())
{ // File exists. Unflatten the message and call the settings parser.
BMessage settings;
settings.Unflatten(&ssSettings);
ok=parseSettings (&settings);
}
}
return ok;
}
void setOnValue(BMessage *msg, char *name, int &result) {
int32 value;
if (B_OK == msg->FindInt32(name,&value)) // If screen saving is even enabled
result=value;
}
bool ScreenSaverPrefs::parseSettings (BMessage *msg) {
int temp;
const char *strPtr;
char pathAndFile[B_PATH_NAME_LENGTH];
BPath path;
// Set some defaults
blankTime=passwordTime=-1;
// Set the easy (integer) ones:
setOnValue(msg,"windowtab",windowTab);
setOnValue(msg,"timeflags",timeFlags);
setOnValue(msg,"timefade",blankTime);
setOnValue(msg,"timestandby",standbyTime);
setOnValue(msg,"timesuspend",suspendTime);
setOnValue(msg,"timeoff",offTime);
setOnValue(msg,"cornernow",temp);
blank=(arrowDirection)temp;
setOnValue(msg,"cornernever",temp);
neverBlank=(arrowDirection)temp;
setOnValue(msg,"lockdelay",passwordTime);
msg->FindBool("lockenable",&lockenable);
msg->FindString("lockmethod",&strPtr);
isNetworkPWD=(strcmp("custom",strPtr));
// Get the password. Either from the settings file or the networking file.
if (isNetworkPWD) {
status_t found=find_directory(B_USER_SETTINGS_DIRECTORY,&path);
if (found==B_OK) {
FILE *networkFile=NULL;
char buffer[512],*start;
strncpy(pathAndFile,path.Path(),B_PATH_NAME_LENGTH-1);
strncat(pathAndFile,"/network",B_PATH_NAME_LENGTH-1);
// This ugly piece opens the networking file and reads the password, if it exists.
if ((networkFile=fopen(pathAndFile,"r")))
while (buffer==fgets(buffer,512,networkFile))
if ((start=strstr(buffer,"PASSWORD =")))
strncpy(password, start+10,strlen(start-11));
}
}
else {
msg->FindString("lockpassword",&strPtr);
strcpy(password,strPtr);
}
if (B_OK != msg->FindString("modulename",&strPtr))
blankTime=-1; // If the module doesn't exist, never blank.
strcpy(moduleName,strPtr);
BString stateMsgName("modulesettings_");
stateMsgName+=moduleName;
msg->FindMessage(stateMsgName.String(),&stateMsg); // Doesn't matter if it fails - stateMsg would just continue to be empty
return true;
}
void ScreenSaverPrefs::SaveSettings (void) {
BMessage msg;
msg.AddRect("windowframe",windowFrame);
msg.AddInt32("windowtab",windowTab);
msg.AddInt32("timeflags",timeFlags);
msg.AddInt32("timefade", blankTime);
msg.AddInt32("timestandby", standbyTime);
msg.AddInt32("timesuspend", suspendTime);
msg.AddInt32("timeoff", offTime);
msg.AddInt32("cornernow", blank);
msg.AddInt32("cornernever", neverBlank);
msg.AddBool("lockenable", lockenable);
msg.AddInt32("lockdelay", passwordTime);
msg.AddString("modulename", moduleName);
BString stateMsgName("modulesettings_");
stateMsgName+=moduleName;
msg.AddMessage(stateMsgName.String(),&stateMsg);
BPath path;
find_directory(B_USER_SETTINGS_DIRECTORY,&path);
path.Append("OBOS_Screen_Saver",true);
BFile file(path.Path(),B_READ_WRITE | B_CREATE_FILE | B_ERASE_FILE);
msg.Flatten(&file);
}
+57
View File
@@ -0,0 +1,57 @@
#ifndef SCREEN_SAVER_THREAD_H
#include "ScreenSaverThread.h"
#endif
#include "Screen.h"
#include "ScreenSaver.h"
#include "ScreenSaverPrefs.h"
int32 threadFunc(void *data) {
ScreenSaverThread *ss=(ScreenSaverThread *)data;
ss->thread();
}
ScreenSaverThread::ScreenSaverThread(BScreenSaver *svr, BDirectWindow *wnd, BView *vw, ScreenSaverPrefs *p) :
saver(svr),win(wnd),view(vw), pref(p), frame(0),snoozeCount(0) {
if (win) { // Running in full screen mode
saver->StartSaver(view,false);
win->SetFullScreen(true);
win->Show();
win->Lock();
view->SetViewColor(0,0,0);
view->SetLowColor(0,0,0);
win->Unlock();
win->Sync();
}
}
void ScreenSaverThread::quit(void) {
saver->StopSaver();
if (win)
win->Hide();
}
void ScreenSaverThread::thread() {
while (1) {
snooze(saver->TickSize());
if (snoozeCount) { // If we are sleeping, do nothing
snoozeCount--;
return;
} else if (saver->LoopOnCount() && (frame>=saver->LoopOnCount())) { // Time to nap
frame=0;
snoozeCount=saver->LoopOffCount();
}
else {
if (win) {
saver->DirectDraw(frame);
win->Lock();
}
saver->Draw(view,frame);
if (win) {
win->Unlock();
win->Sync();
}
frame++;
}
}
}