X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?p=xscreensaver;a=blobdiff_plain;f=hacks%2Fxteevee.c;h=11d1c03649ae2e1fef7c0a3d6475bbf765abd357;hp=4d838bfd4e61de09c7dc10603a44706f7e4c66fc;hb=96a411663168b0ba5432b407a83be55f3df0c802;hpb=0316d74da7982288abddd34e7a62698eb7f79965 diff --git a/hacks/xteevee.c b/hacks/xteevee.c index 4d838bfd..11d1c036 100644 --- a/hacks/xteevee.c +++ b/hacks/xteevee.c @@ -24,7 +24,10 @@ /* Includes ******************************************************************/ #include "screenhack.h" +#include "colorbars.h" #include +#include +#include /* Defines *******************************************************************/ @@ -41,8 +44,6 @@ #define XTEEVEE_ARG_DELAY_BETWEEN "delayBetween" #define XTEEVEE_STATIC_COLOR_COUNT 6 #define XTEEVEE_STATIC_TILE_COUNT 16 -#define XTEEVEE_BARS_COLOR_TOP_COUNT 7 -#define XTEEVEE_BARS_COLOR_BOTTOM_COUNT 5 /* Globals *******************************************************************/ @@ -119,7 +120,8 @@ void xteevee_Static(Display* x_Disp,Window x_Win,XWindowAttributes* x_WinAttr, { color_Color.red = color_Color.green = color_Color.blue = (((double)color_Index+1)/XTEEVEE_STATIC_COLOR_COUNT)*65535; - if (XAllocColor(x_Disp,x_WinAttr->colormap,&color_Color) == 0) + if (!x_WinAttr->colormap || + !XAllocColor(x_Disp,x_WinAttr->colormap,&color_Color)) { /* NOTE: I have no idea what to do here. Why would this fail? */ @@ -301,7 +303,7 @@ void xteevee_Roll(Display* x_Disp,Window x_Win,XWindowAttributes* x_WinAttr, } XSync(x_Disp,0); - sleep(0); + usleep(50000); screenhack_handle_events(x_Disp); } @@ -313,115 +315,23 @@ void xteevee_Roll(Display* x_Disp,Window x_Win,XWindowAttributes* x_WinAttr, void xteevee_Bars(Display* x_Disp,Window x_Win,XWindowAttributes* x_WinAttr, time_t hack_Time,Pixmap hack_Pm) { - GC x_GcTop[XTEEVEE_BARS_COLOR_TOP_COUNT]; - GC x_GcBottom[XTEEVEE_BARS_COLOR_BOTTOM_COUNT]; - XGCValues x_GcVal; - int color_Index; - XColor color_Color; - char* color_ColorTop[] = - { - "grey", - "yellow", - "light blue", - "green", - "orange", - "red", - "purple" - }; - char* color_ColorBottom[] = - { - "black", - "white", - "black", - "black", - "black" - }; - - /* Build the GCs */ - for (color_Index = 0;color_Index < XTEEVEE_BARS_COLOR_TOP_COUNT; - color_Index++) - { - if (XParseColor(x_Disp,x_WinAttr->colormap, - color_ColorTop[color_Index],&color_Color) == 0) - { - /* NOTE: Um, badness? */ - } - if (XAllocColor(x_Disp,x_WinAttr->colormap,&color_Color) == 0) - { - /* NOTE: More badness? */ - } - x_GcVal.foreground = color_Color.pixel; - x_GcTop[color_Index] = - XCreateGC(x_Disp,x_Win,GCForeground,&x_GcVal); - } - for (color_Index = 0;color_Index < XTEEVEE_BARS_COLOR_BOTTOM_COUNT; - color_Index++) - { - if (XParseColor(x_Disp,x_WinAttr->colormap, - color_ColorBottom[color_Index],&color_Color) == 0) - { - /* NOTE: Um, badness? */ - } - if (XAllocColor(x_Disp,x_WinAttr->colormap,&color_Color) == 0) - { - /* NOTE: More badness? */ - } - x_GcVal.foreground = color_Color.pixel; - x_GcBottom[color_Index] = - XCreateGC(x_Disp,x_Win,GCForeground,&x_GcVal); - } - - /* Draw color-bar test pattern */ - XClearWindow(x_Disp,x_Win); - for (color_Index = 0;color_Index < XTEEVEE_BARS_COLOR_TOP_COUNT; - color_Index++) - { - XFillRectangle(x_Disp,x_Win,x_GcTop[color_Index], - ((x_WinAttr->width/XTEEVEE_BARS_COLOR_TOP_COUNT)+1)* - color_Index, - 0, - (x_WinAttr->width/XTEEVEE_BARS_COLOR_TOP_COUNT)+1, - (x_WinAttr->height/5)*4); - } - for (color_Index = 0;color_Index < XTEEVEE_BARS_COLOR_BOTTOM_COUNT; - color_Index++) - { - XFillRectangle(x_Disp,x_Win,x_GcBottom[color_Index], - ((x_WinAttr->width/XTEEVEE_BARS_COLOR_BOTTOM_COUNT)+1)* - color_Index, - (x_WinAttr->height/5)*4, - (x_WinAttr->width/XTEEVEE_BARS_COLOR_BOTTOM_COUNT)+1, - x_WinAttr->height-(x_WinAttr->height/5)*4); - } - - /* Go! */ - if (hack_Time > 0) - { - hack_Time += time(NULL); - } - while ((time(NULL) < hack_Time) || (hack_Time == 0)) - { - screenhack_handle_events(x_Disp); - usleep(100000); - } - - /* Free everything */ - for (color_Index = 0;color_Index < XTEEVEE_BARS_COLOR_TOP_COUNT; - color_Index++) - { - xteevee_FreeColorForeground(x_Disp,x_WinAttr, - x_GcTop[color_Index]); - XFreeGC(x_Disp,x_GcTop[color_Index]); - } - for (color_Index = 0;color_Index < XTEEVEE_BARS_COLOR_BOTTOM_COUNT; - color_Index++) - { - xteevee_FreeColorForeground(x_Disp,x_WinAttr, - x_GcBottom[color_Index]); - XFreeGC(x_Disp,x_GcBottom[color_Index]); - } + draw_colorbars (x_WinAttr->screen, x_WinAttr->visual, x_Win, + x_WinAttr->colormap, + 0, 0, x_WinAttr->width, x_WinAttr->height); + + /* Go! */ + if (hack_Time > 0) + { + hack_Time += time(NULL); + } + while ((time(NULL) < hack_Time) || (hack_Time == 0)) + { + screenhack_handle_events(x_Disp); + usleep(100000); + } } + /* Standard XScreenSaver entry point ======================================= */ void screenhack(Display* x_Disp,Window x_Win) { @@ -454,7 +364,8 @@ void screenhack(Display* x_Disp,Window x_Win) /* Grab the screen to give us time to do whatever we want */ XGetWindowAttributes(x_Disp,x_Win,&x_WinAttr); - grab_screen_image(x_WinAttr.screen,x_Win); + load_random_image (x_WinAttr.screen, x_Win, x_Win, NULL); + x_GcVal.subwindow_mode = IncludeInferiors; x_Gc = XCreateGC(x_Disp,x_Win,GCSubwindowMode,&x_GcVal); screen_Pm = XCreatePixmap(x_Disp,x_Win,x_WinAttr.width,