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 :
|
SharedLibrary screensaver :
|
||||||
ScreenSaver.cpp
|
ScreenSaver.cpp
|
||||||
|
ScreenSaverPrefs.cpp
|
||||||
|
ScreenSaverThread.cpp
|
||||||
;
|
;
|
||||||
|
|
||||||
LinkSharedOSLibs libscreensaver.so :
|
LinkSharedOSLibs libscreensaver.so :
|
||||||
be
|
be game
|
||||||
;
|
;
|
||||||
|
|||||||
@@ -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() {
|
||||||
{
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
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