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 :
ScreenSaver.cpp
ScreenSaverPrefs.cpp
ScreenSaverThread.cpp
;
LinkSharedOSLibs libscreensaver.so :
be
be game
;
+35 -65
View File
@@ -1,157 +1,127 @@
#include "ScreenSaver.h"
#include <stdio.h>
BScreenSaver::BScreenSaver(BMessage *archive,
image_id)
{
ticksize = 50000;
looponcount = 0;
loopoffcount = 0;
image_id) : ticksize(50000),looponcount(0),loopoffcount(0) {
}
BScreenSaver::~BScreenSaver()
{
BScreenSaver::~BScreenSaver() {
}
status_t
BScreenSaver::InitCheck()
{
BScreenSaver::InitCheck() {
return B_OK; // This method is meant to be overridden
}
status_t
BScreenSaver::StartSaver(BView *view,
bool preview)
{
BScreenSaver::StartSaver(BView *view, bool preview) {
return B_OK; // This method is meant to be overridden
}
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
}
void
BScreenSaver::Draw(BView *view,
int32 frame)
{
BScreenSaver::DirectConnected(direct_buffer_info *info) {
return; // This method is meant to be overridden
}
void
BScreenSaver::DirectConnected(direct_buffer_info *info)
{
BScreenSaver::DirectDraw(int32 frame) {
return; // This method is meant to be overridden
}
void
BScreenSaver::DirectDraw(int32 frame)
{
BScreenSaver::StartConfig(BView *configView) {
return; // This method is meant to be overridden
}
void
BScreenSaver::StartConfig(BView *configView)
{
BScreenSaver::StopConfig() {
return; // This method is meant to be overridden
}
void
BScreenSaver::StopConfig()
{
BScreenSaver::SupplyInfo(BMessage *info) const {
return; // This method is meant to be overridden
}
void
BScreenSaver::SupplyInfo(BMessage *info) const
{
return; // This method is meant to be overridden
}
void
BScreenSaver::ModulesChanged(const BMessage *info)
{
BScreenSaver::ModulesChanged(const BMessage *info) {
return; // This method is meant to be overridden
}
status_t
BScreenSaver::SaveState(BMessage *into) const
{
return -1;
BScreenSaver::SaveState(BMessage *into) const {
return B_ERROR; // This method is meant to be overridden
}
void
BScreenSaver::SetTickSize(bigtime_t ts)
{
ticksize = ts;
BScreenSaver::SetTickSize(bigtime_t ts) {
ticksize = ts;
}
bigtime_t
BScreenSaver::TickSize() const
{
BScreenSaver::TickSize() const {
return ticksize;
}
void
BScreenSaver::SetLoop(int32 on_count,
int32 off_count)
{
looponcount = on_count;
loopoffcount = off_count;
BScreenSaver::SetLoop(int32 on_count, int32 off_count) {
looponcount = on_count;
loopoffcount = off_count;
}
int32
BScreenSaver::LoopOnCount() const
{
BScreenSaver::LoopOnCount() const {
return looponcount;
}
int32
BScreenSaver::LoopOffCount() const
{
BScreenSaver::LoopOffCount() const {
return loopoffcount;
}
void
BScreenSaver::_ReservedScreenSaver1()
{
BScreenSaver::_ReservedScreenSaver1() {
}
void
BScreenSaver::_ReservedScreenSaver2()
{
BScreenSaver::_ReservedScreenSaver2() {
}
void
BScreenSaver::_ReservedScreenSaver3()
{
BScreenSaver::_ReservedScreenSaver3() {
}
void
BScreenSaver::_ReservedScreenSaver4()
{
BScreenSaver::_ReservedScreenSaver4() {
}
void
BScreenSaver::_ReservedScreenSaver5()
{
BScreenSaver::_ReservedScreenSaver5() {
}
void
BScreenSaver::_ReservedScreenSaver6()
{
BScreenSaver::_ReservedScreenSaver6() {
}
void
BScreenSaver::_ReservedScreenSaver7()
{
BScreenSaver::_ReservedScreenSaver7() {
}
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++;
}
}
}