X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Ftessellimage.c;h=ec05fb98dbe27fe614ba8a592b785913f2d3afe8;hb=4361b69d3178d7fc98d0388f9a223af6c2651aba;hp=b930622093a04acad585260bd4e2602ae7c80696;hpb=6afd6db0ae9396cd7ff897ade597cd5483f49b0e;p=xscreensaver diff --git a/hacks/tessellimage.c b/hacks/tessellimage.c index b9306220..ec05fb98 100644 --- a/hacks/tessellimage.c +++ b/hacks/tessellimage.c @@ -15,7 +15,7 @@ #undef DO_VORONOI -#ifndef HAVE_COCOA +#ifndef HAVE_JWXYZ # define XK_MISCELLANY # include #endif @@ -67,13 +67,11 @@ static void * tessellimage_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); - Colormap cmap; st->dpy = dpy; st->window = window; XGetWindowAttributes (st->dpy, st->window, &st->xgwa); - cmap = st->xgwa.colormap; st->delay = get_integer_resource (st->dpy, "delay", "Integer"); if (st->delay < 1) st->delay = 1; @@ -118,10 +116,10 @@ decode_mask (unsigned int mask, unsigned int *pos_ret, unsigned int *size_ret) static unsigned long -pixel_distance (Visual *v, unsigned long p1, unsigned long p2) +pixel_distance (Screen *s, Visual *v, unsigned long p1, unsigned long p2) { static int initted_p = 0; - static unsigned int rmsk=0, gmsk=0, bmsk=0; + static unsigned long rmsk=0, gmsk=0, bmsk=0; static unsigned int rpos=0, gpos=0, bpos=0; static unsigned int rsiz=0, gsiz=0, bsiz=0; @@ -132,9 +130,7 @@ pixel_distance (Visual *v, unsigned long p1, unsigned long p2) if (!p1 && !p2) return 0; if (! initted_p) { - rmsk = v->red_mask; - gmsk = v->green_mask; - bmsk = v->blue_mask; + visual_rgb_masks (s, v, &rmsk, &gmsk, &bmsk); decode_mask (rmsk, &rpos, &rsiz); decode_mask (gmsk, &gpos, &gsiz); decode_mask (bmsk, &bpos, &bsiz); @@ -323,7 +319,8 @@ analyze (struct state *st) pixels[i++] = (x > 0 && y < h-1 ? XGetPixel (st->img, x-1, y+1) : 0); for (i = 1; i < countof(pixels); i++) - distance += pixel_distance (st->xgwa.visual, pixels[0], pixels[i]); + distance += pixel_distance (st->xgwa.screen, st->xgwa.visual, + pixels[0], pixels[i]); distance /= countof(pixels)-1; XPutPixel (st->delta, x, y, distance); } @@ -543,6 +540,9 @@ tessellate (struct state *st) st->pgc = XCreateGC(st->dpy, st->image, GCFunction, &gcv); } + if (! st->nthreshes) return; + + /* If duration2 has expired, switch to the next threshold. */ if (! st->button_down_p) @@ -779,15 +779,13 @@ get_deltap (struct state *st) XImage *dimg; Visual *v = st->xgwa.visual; - unsigned int rmsk=0, gmsk=0, bmsk=0; + unsigned long rmsk=0, gmsk=0, bmsk=0; unsigned int rpos=0, gpos=0, bpos=0; unsigned int rsiz=0, gsiz=0, bsiz=0; if (st->deltap) return st->deltap; - rmsk = v->red_mask; - gmsk = v->green_mask; - bmsk = v->blue_mask; + visual_rgb_masks (st->xgwa.screen, v, &rmsk, &gmsk, &bmsk); decode_mask (rmsk, &rpos, &rsiz); decode_mask (gmsk, &gpos, &gsiz); decode_mask (bmsk, &bpos, &bsiz); @@ -856,6 +854,14 @@ tessellimage_draw (Display *dpy, Window window, void *closure) 0, 0, st->delta->width, st->delta->height, (st->xgwa.width - st->delta->width) / 2, (st->xgwa.height - st->delta->height) / 2); + else if (!st->nthreshes) + XCopyArea (st->dpy, + st->image, + st->window, st->wgc, + 0, 0, st->xgwa.width, st->xgwa.height, + 0, + 0); + DONE: return st->delay; @@ -921,7 +927,7 @@ static const char *tessellimage_defaults [] = { "*outline: True", "*fillScreen: True", "*cache: True", -#ifdef USE_IPHONE +#ifdef HAVE_MOBILE "*ignoreRotation: True", "*rotateImages: True", #endif