2 #include "rotatescreen.h"
4 RotateScreen::RotateScreen()
5 : valid(false), current_screen(0)
9 RotateScreen::~RotateScreen()
13 bool RotateScreen::check_invalidated()
21 for (unsigned i = 0; i < subscreens.size(); ++i) {
22 if (subscreens[i].screen->check_invalidated())
29 void RotateScreen::draw(unsigned char *buf)
33 // push any invalidated screen first (for now)
34 for (unsigned i = 0; i < subscreens.size(); ++i) {
35 if (subscreens[i].screen->check_invalidated()) {
41 // check if we want to go to the next screen
42 if (valid && !force && needs_update()) {
43 current_screen = (current_screen + 1) % subscreens.size();
44 gettimeofday(&last_update, NULL);
47 if (subscreens[current_screen].screen->check_invalidated())
48 subscreens[current_screen].screen->draw(subscreens[current_screen].buf);
50 memcpy(buf, subscreens[current_screen].buf, 800 * 600 * 4);
54 gettimeofday(&last_update, NULL);
58 // note: makes no sense if valid=false!
59 bool RotateScreen::needs_update()
62 gettimeofday(&now, NULL);
64 double since = double(now.tv_sec - last_update.tv_sec) +
65 double(now.tv_usec - last_update.tv_usec) * 1.0e-6;
67 return (since >= 10.0);
70 void RotateScreen::add_screen(GenericScreen *screen)
73 ss.buf = new unsigned char[800 * 600 * 4];
76 subscreens.push_back(ss);