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:
@@ -4,8 +4,10 @@ UsePrivateHeaders screensaver ;
|
||||
|
||||
SharedLibrary screensaver :
|
||||
ScreenSaver.cpp
|
||||
ScreenSaverPrefs.cpp
|
||||
ScreenSaverThread.cpp
|
||||
;
|
||||
|
||||
LinkSharedOSLibs libscreensaver.so :
|
||||
be
|
||||
be game
|
||||
;
|
||||
|
||||
@@ -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() {
|
||||
}
|
||||
|
||||
|
||||
Executable
+116
@@ -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);
|
||||
}
|
||||
Executable
+57
@@ -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++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user