]> git.sesse.net Git - ccbs/blobdiff - bigscreen/rotatescreen.cpp
Fix "slowly to red" fading (aka same_fade) when we have a forced transition.
[ccbs] / bigscreen / rotatescreen.cpp
index 96a3ebc7bad1137f957e1971642f611ddd34247e..a7d3a5c01b34a89b9f6aef7d615d5591526afeaa 100644 (file)
@@ -32,6 +32,12 @@ bool RotateScreen::check_invalidated()
 void RotateScreen::draw(unsigned char *buf)
 {
        bool force = false;
+
+       if (subscreens.size() == 0) {
+               valid = true;
+               gettimeofday(&last_update, NULL);
+               return;
+       }
        
        // if we're in a fade, complete it before doing anything else
        if (in_fade) {
@@ -110,11 +116,11 @@ void RotateScreen::draw(unsigned char *buf)
                        gettimeofday(&last_update, NULL);
                }
 
-               if (current_screen != old_current_screen || subscreens[current_screen].screen->check_invalidated()) {
+               if (!valid || current_screen != old_current_screen || subscreens[current_screen].screen->check_invalidated()) {
                        // initialize a fade
                        in_fade = true;
                        fade_found_start_time = false;
-                       same_fade = (current_screen == old_current_screen);
+                       same_fade = (current_screen == old_current_screen) || force;
                        
                        memcpy(fadefrom_buf, subscreens[old_current_screen].buf, 800 * 600 * 4);
 
@@ -147,6 +153,8 @@ void RotateScreen::add_screen(GenericScreen *screen)
        ss.buf = new unsigned char[800 * 600 * 4];
        ss.screen = screen;
 
+       screen->draw(ss.buf);
+       
        subscreens.push_back(ss);
 }