X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fxteevee.c;h=df4ce24ad772f7f544040967f3492d9fdfe9a7d6;hb=585e1a6717d1dd9b90fbb53acaaae82106354d33;hp=4d838bfd4e61de09c7dc10603a44706f7e4c66fc;hpb=0316d74da7982288abddd34e7a62698eb7f79965;p=xscreensaver diff --git a/hacks/xteevee.c b/hacks/xteevee.c index 4d838bfd..df4ce24a 100644 --- a/hacks/xteevee.c +++ b/hacks/xteevee.c @@ -24,6 +24,7 @@ /* Includes ******************************************************************/ #include "screenhack.h" +#include "colorbars.h" #include @@ -41,8 +42,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 +118,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 +301,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 +313,21 @@ 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_Disp, x_Win, 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) { @@ -455,6 +361,7 @@ 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); + 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,