X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fripples.c;h=74c2c09817403b21de23f64adb24afafc0cc11ed;hb=aa75c7476aeaa84cf3abc192b376a8b03c325213;hp=fac61995060e103740a8c5212a1ce64237189925;hpb=c1b9b55ad8d59dc05ef55e316aebf5863e7dfa56;p=xscreensaver diff --git a/hacks/ripples.c b/hacks/ripples.c index fac61995..74c2c098 100644 --- a/hacks/ripples.c +++ b/hacks/ripples.c @@ -62,6 +62,7 @@ struct state { XImage *orig_map, *buffer_map; int ctab[256]; Colormap colormap; + Screen *screen; int ncolors; int light; @@ -495,6 +496,7 @@ setup_X(struct state *st) XGetWindowAttributes(st->dpy, st->window, &xgwa); depth = xgwa.depth; st->colormap = xgwa.colormap; + st->screen = xgwa.screen; st->bigwidth = xgwa.width; st->bigheight = xgwa.height; st->visual = xgwa.visual; @@ -531,7 +533,7 @@ setup_X(struct state *st) st->img_loader = load_image_async_simple (0, xgwa.screen, st->window, st->window, 0, 0); - st->start_time = time ((time_t) 0); + st->start_time = time ((time_t *) 0); } else { XGCValues gcv; @@ -656,7 +658,8 @@ init_oily_colors(struct state *st) if (!mono_p) { colors = (XColor *)malloc(sizeof(*colors) * (st->ncolors+1)); - make_smooth_colormap(st->dpy, st->visual, st->colormap, colors, &st->ncolors, + make_smooth_colormap(st->screen, st->visual, st->colormap, + colors, &st->ncolors, True, /* allocate */ False, /* not writable */ True); /* verbose (complain about failure) */ @@ -703,6 +706,7 @@ sinc(struct state *st, double x) int i; i = (int)(x * TABLE + 0.5); if (i >= TABLE) i = (TABLE-1) - (i-(TABLE-1)); + if (i < 0) return 0.; return st->cos_tab[i]; #elif 0 return cos(x * M_PI/2); @@ -732,7 +736,7 @@ add_circle_drop(struct state *st, int x, int y, int radius, int dheight) r = cx*cx + cy*cy; if (r > r2) break; buf[xx + yy*st->width] = - (short)(dheight * sinc(st, sqrt(r)/radius)); + (short)(dheight * sinc(st, (radius > 0) ? sqrt(r)/radius : 0)); } } @@ -1029,7 +1033,7 @@ ripples_draw (Display *dpy, Window window, void *closure) if (! st->img_loader) { /* just finished */ XWindowAttributes xgwa; XGetWindowAttributes(st->dpy, st->window, &xgwa); - st->start_time = time ((time_t) 0); + st->start_time = time ((time_t *) 0); st->orig_map = XGetImage (st->dpy, st->window, 0, 0, xgwa.width, xgwa.height, ~0L, ZPixmap); @@ -1039,12 +1043,12 @@ ripples_draw (Display *dpy, Window window, void *closure) } if (!st->img_loader && - st->start_time + st->duration < time ((time_t) 0)) { + st->start_time + st->duration < time ((time_t *) 0)) { XWindowAttributes xgwa; XGetWindowAttributes(st->dpy, st->window, &xgwa); st->img_loader = load_image_async_simple (0, xgwa.screen, st->window, st->window, 0, 0); - st->start_time = time ((time_t) 0); + st->start_time = time ((time_t *) 0); return st->delay; } @@ -1073,6 +1077,12 @@ ripples_reshape (Display *dpy, Window window, void *closure, static Bool ripples_event (Display *dpy, Window window, void *closure, XEvent *event) { + struct state *st = (struct state *) closure; + if (screenhack_event_helper (dpy, window, event)) + { + st->start_time = 0; + return True; + } return False; } @@ -1103,6 +1113,10 @@ static const char *ripples_defaults[] = "*useSHM: True", #else "*useSHM: False", +#endif +#ifdef HAVE_MOBILE + "*ignoreRotation: True", + "*rotateImages: True", #endif 0 };