X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fscreen.cpp;h=d20543fadbb034a4aa6f4da8b2fcde4e88604094;hb=14e53e9803643f1a3f7105d8e026422f3d23b70c;hp=d323c3f1cdf043cfbc434f8b3c3f35cf5ea80ff1;hpb=50f4ccac4b8338214381e3947d549a470b73d0a0;p=supertux.git diff --git a/src/screen.cpp b/src/screen.cpp index d323c3f1c..d20543fad 100644 --- a/src/screen.cpp +++ b/src/screen.cpp @@ -72,21 +72,22 @@ void drawgradient(Color top_clr, Color bot_clr) glBegin(GL_QUADS); glColor3ub(top_clr.red, top_clr.green, top_clr.blue); glVertex2f(0, 0); - glVertex2f(640, 0); + glVertex2f(screen->w, 0); glColor3ub(bot_clr.red, bot_clr.green, bot_clr.blue); - glVertex2f(640, 480); - glVertex2f(0, 480); + glVertex2f(screen->w, screen->h); + glVertex2f(0, screen->h); glEnd(); } else { #endif - for(float y = 0; y < 480; y += 2) - fillrect(0, (int)y, 640, 2, - (int)(((float)(top_clr.red-bot_clr.red)/(0-480)) * y + top_clr.red), - (int)(((float)(top_clr.green-bot_clr.green)/(0-480)) * y + top_clr.green), - (int)(((float)(top_clr.blue-bot_clr.blue)/(0-480)) * y + top_clr.blue), 255); + for(float y = 0; y < screen->h; y += 2) + fillrect(0, (int)y, screen->w, 2, + (int)(((float)(top_clr.red-bot_clr.red)/(0-screen->h)) * y + top_clr.red), + (int)(((float)(top_clr.green-bot_clr.green)/(0-screen->h)) * y + top_clr.green), + (int)(((float)(top_clr.blue-bot_clr.blue)/(0-screen->h)) * y + top_clr.blue), + 255); /* calculates the color for each line, based in the generic equation for functions: y = mx + b */ #ifndef NOOPENGL @@ -95,6 +96,48 @@ void drawgradient(Color top_clr, Color bot_clr) #endif } +/* --- FADE IN --- */ + +/** Fades the given surface into a black one. If fade_out is true, it will fade out, else +it will fade in */ + +void fade(Surface *surface, int seconds, bool fade_out); + +void fade(const std::string& surface, int seconds, bool fade_out) +{ +Surface* sur = new Surface(datadir + surface, IGNORE_ALPHA); +fade(sur, seconds, fade_out); +delete sur; +} + +void fade(Surface *surface, int seconds, bool fade_out) +{ +float alpha; +if (fade_out) + alpha = 0; +else + alpha = 255; + + int cur_time, old_time; + cur_time = SDL_GetTicks(); + + while(alpha >= 0 && alpha < 256) + { + surface->draw(0,0,(int)alpha); + flipscreen(); + + old_time = cur_time; + cur_time = SDL_GetTicks(); + + /* Calculate the next alpha value */ + float calc = (float) ((cur_time - old_time) / seconds); + if(fade_out) + alpha += 255 * calc; + else + alpha -= 255 * calc; + } +} + /* 'Stolen' from the SDL documentation. * Set the pixel at (x, y) to the given value * NOTE: The surface must be locked before calling this!