#include "Gravity.h"
#include "ConfigView.h"
#include "GravityView.h"
#include <ScreenSaver.h>
#include <View.h>
#include <stdlib.h>
Gravity::Gravity(BMessage* prefs, image_id imageID)
:
BScreenSaver(prefs, imageID),
fGravityView(NULL),
fConfigView(NULL)
{
srand(time(NULL));
if (prefs->IsEmpty()) {
Config.ParticleCount = 1;
Config.ShadeID = 2;
} else {
if (prefs->FindInt32("ParticleCount", &Config.ParticleCount) != B_OK)
Config.ParticleCount = 1;
if (prefs->FindInt32("ShadeID", &Config.ShadeID) != B_OK)
Config.ShadeID = 2;
}
}
status_t
Gravity::SaveState(BMessage* prefs) const
{
prefs->AddInt32("ParticleCount", Config.ParticleCount);
prefs->AddInt32("ShadeID", Config.ShadeID);
return B_OK;
}
void
Gravity::StartConfig(BView* view)
{
fConfigView = new ConfigView(view->Bounds(), this);
view->AddChild(fConfigView);
}
status_t
Gravity::StartSaver(BView* view, bool preview)
{
SetTickSize((1000 / 20) * 1000);
fGravityView = new GravityView(view->Bounds(), this);
view->AddChild(fGravityView);
return B_OK;
}
void
Gravity::StopSaver()
{
if (fGravityView != NULL)
fGravityView->EnableDirectMode(false);
}
void
Gravity::DirectConnected(direct_buffer_info* info)
{
if (fGravityView != NULL) {
fGravityView->DirectConnected(info);
fGravityView->EnableDirectMode(true);
}
}
void
Gravity::Draw(BView*, int32 frame)
{
fGravityView->DirectDraw();
}