- tweak screensaver

svn path=/trunk/boinc/; revision=17205
This commit is contained in:
David Anderson 2009-02-11 16:33:08 +00:00
parent e3a35a4340
commit b09db4ce9a
1 changed files with 73 additions and 34 deletions

View File

@ -61,7 +61,9 @@ float color[4] = {.7, .2, .5, 1};
RPC_CLIENT rpc; RPC_CLIENT rpc;
CC_STATE cc_state; CC_STATE cc_state;
CC_STATUS cc_status;
#if 0
struct APP_SLIDES { struct APP_SLIDES {
string name; string name;
int index; int index;
@ -77,25 +79,6 @@ struct PROJECT_IMAGES {
}; };
vector<PROJECT_IMAGES> project_images; vector<PROJECT_IMAGES> project_images;
// set up lighting model
//
static void init_lights() {
GLfloat ambient[] = {1., 1., 1., 1.0};
GLfloat position[] = {-13.0, 6.0, 20.0, 1.0};
GLfloat dir[] = {-1, -.5, -3, 1.0};
glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
glLightfv(GL_LIGHT0, GL_POSITION, position);
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, dir);
}
static void draw_logo(float* pos, float alpha) {
if (logo.present) {
float size[3] = {.6, .4, 0};
logo.draw(pos, size, ALIGN_CENTER, ALIGN_CENTER, alpha);
}
}
void icon_path(PROJECT* p, char* buf) { void icon_path(PROJECT* p, char* buf) {
char dir[256]; char dir[256];
url_to_project_dir((char*)p->master_url.c_str(), dir); url_to_project_dir((char*)p->master_url.c_str(), dir);
@ -144,6 +127,26 @@ PROJECT_IMAGES* get_project_images(PROJECT* p) {
return &(project_images.back()); return &(project_images.back());
} }
#endif
// set up lighting model
//
static void init_lights() {
GLfloat ambient[] = {1., 1., 1., 1.0};
GLfloat position[] = {-13.0, 6.0, 20.0, 1.0};
GLfloat dir[] = {-1, -.5, -3, 1.0};
glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
glLightfv(GL_LIGHT0, GL_POSITION, position);
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, dir);
}
static void draw_logo(float* pos, float alpha) {
if (logo.present) {
float size[3] = {.6, .4, 0};
logo.draw(pos, size, ALIGN_CENTER, ALIGN_CENTER, alpha);
}
}
void show_result(RESULT* r, float x, float& y, float alpha) { void show_result(RESULT* r, float x, float& y, float alpha) {
PROGRESS_2D progress; PROGRESS_2D progress;
char buf[256]; char buf[256];
@ -183,7 +186,7 @@ void show_coords() {
} }
} }
void show_project(int index, float alpha) { void show_project(unsigned int index, float alpha) {
float x=.2, y=.6; float x=.2, y=.6;
char buf[1024]; char buf[1024];
if (!cc_state.projects.size()) { if (!cc_state.projects.size()) {
@ -213,10 +216,12 @@ void show_project(int index, float alpha) {
} }
} }
void show_jobs(double alpha) { void show_jobs(unsigned int& index, double alpha) {
float x=.1, y=.7; float x=.1, y=.7;
bool found = false; bool found = false;
for (unsigned int i=0; i<cc_state.results.size(); i++) { unsigned int i;
for (i=index; i<index+4; i++) {
if (i == cc_state.results.size()) break;
RESULT* r = cc_state.results[i]; RESULT* r = cc_state.results[i];
if (!r->active_task) continue; if (!r->active_task) continue;
if (r->active_task_state != PROCESS_EXECUTING) continue; if (r->active_task_state != PROCESS_EXECUTING) continue;
@ -229,19 +234,51 @@ void show_jobs(double alpha) {
show_result(r, x, y, alpha); show_result(r, x, y, alpha);
y -= .05; y -= .05;
} }
if (i == cc_state.results.size()) {
index = 0;
} else {
index += 4;
}
if (!found) { if (!found) {
y = .5;
txf_render_string(.1, x, y, 0, 500., white, 0, "No running tasks"); txf_render_string(.1, x, y, 0, 500., white, 0, "No running tasks");
char *p = 0;
switch (cc_status.task_suspend_reason) {
case SUSPEND_REASON_BATTERIES:
p = "Computer is running on batteries"; break;
case SUSPEND_REASON_USER_ACTIVE:
p = "Computer is in use"; break;
case SUSPEND_REASON_USER_REQ:
p = "Computing suspended by user"; break;
case SUSPEND_REASON_TIME_OF_DAY:
p = "Computing suspended during this time of day"; break;
case SUSPEND_REASON_BENCHMARKS:
p = "Computing suspended while running benchmarks"; break;
case SUSPEND_REASON_DISK_SIZE:
p = "Computing suspended because no disk space"; break;
case SUSPEND_REASON_NO_RECENT_INPUT:
p = "Computing suspended while computer not in use"; break;
case SUSPEND_REASON_INITIAL_DELAY:
p = "Computing suspended while BOINC is starting up"; break;
case SUSPEND_REASON_EXCLUSIVE_APP_RUNNING:
p = "Computing suspended while exclusive application running"; break;
}
if (p) {
y -= .1;
txf_render_string(.1, x, y, 0, 800., white, 0, p);
}
} }
} }
int update_data(double t) { void update_data() {
static double state_time = 0; int retval = rpc.get_state(cc_state);
if (state_time < t) { if (retval) {
int retval = rpc.get_state(cc_state); boinc_close_window_and_quit("RPC failed");
if (retval) return retval; }
state_time = t; retval = rpc.get_cc_status(cc_status);
if (retval) {
boinc_close_window_and_quit("RPC failed");
} }
return 0;
} }
void set_viewpoint(double dist) { void set_viewpoint(double dist) {
@ -315,12 +352,13 @@ FADER info_fader(4,4,4,1);
void app_graphics_render(int xs, int ys, double t) { void app_graphics_render(int xs, int ys, double t) {
double alpha; double alpha;
static bool showing_project = false; static bool showing_project = false;
static unsigned int project_index = 0; static unsigned int project_index = 0, job_index=0;
static float logo_pos[3] = {.2, .2, 0}; static float logo_pos[3] = {.2, .2, 0};
static bool first = true;
int retval = update_data(t); if (first) {
if (retval) { update_data();
boinc_close_window_and_quit("RPC failed"); first = false;
} }
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
@ -348,6 +386,7 @@ void app_graphics_render(int xs, int ys, double t) {
//mode_ortho(); //mode_ortho();
if (info_fader.value(t, alpha)) { if (info_fader.value(t, alpha)) {
update_data();
if (showing_project) { if (showing_project) {
showing_project = false; showing_project = false;
project_index++; project_index++;
@ -362,7 +401,7 @@ void app_graphics_render(int xs, int ys, double t) {
} }
show_project(project_index, alpha); show_project(project_index, alpha);
} else { } else {
show_jobs(alpha); show_jobs(job_index, alpha);
} }
//show_coords(); //show_coords();
ortho_done(); ortho_done();