X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fslidescreen.c;h=c5656f32c867bc9b20df146b1dc16698fb6deded;hb=78add6e627ee5f10e1fa6f3852602ea5066eee5a;hp=23c990c296d13c66bc461a9847919b53e496623c;hpb=4ade52359b6eba3621566dac79793a33aa4c915f;p=xscreensaver diff --git a/hacks/slidescreen.c b/hacks/slidescreen.c index 23c990c2..c5656f32 100644 --- a/hacks/slidescreen.c +++ b/hacks/slidescreen.c @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 1992-2008 Jamie Zawinski +/* xscreensaver, Copyright (c) 1992-2018 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -55,7 +55,7 @@ slidescreen_init (Display *dpy, Window window) 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); st->max_width = xgwa.width; st->max_height = xgwa.height; @@ -66,6 +66,9 @@ slidescreen_init (Display *dpy, Window window) st->grid_size = get_integer_resource (st->dpy, "gridSize", "Integer"); st->pix_inc = get_integer_resource (st->dpy, "pixelIncrement", "Integer"); + if (xgwa.width > 2560) st->grid_size *= 2; /* Retina displays */ + + /* Don't let the grid be smaller than 5x5 */ while (st->grid_size > xgwa.width / 5) st->grid_size /= 2; @@ -108,7 +111,7 @@ slidescreen_init (Display *dpy, Window window) else st->bg = 1; -#ifndef HAVE_COCOA +#ifndef HAVE_JWXYZ if (!fg_ok || bg_ok) { int i; @@ -167,7 +170,7 @@ slidescreen_init (Display *dpy, Window window) } XFree(all); } -#endif /* !HAVE_COCOA */ +#endif /* !HAVE_JWXYZ */ } gcv.foreground = st->fg; @@ -198,6 +201,18 @@ draw_grid (struct state *st) st->bitmap_w = xgwa.width; st->bitmap_h = xgwa.height; + if (xgwa.width < 50 || xgwa.height < 50) /* tiny window */ + { + int s = (xgwa.width < xgwa.height ? xgwa.width : xgwa.height); + border = 1; + st->grid_size = s / 2; + if (st->grid_size < 16) st->grid_size = 16; + if (st->bitmap_w < st->grid_size*2) st->bitmap_w = st->grid_size*2; + if (st->bitmap_h < st->grid_size*2) st->bitmap_h = st->grid_size*2; + } + + if (xgwa.width > 2560) border *= 2; /* Retina displays */ + st->grid_w = st->bitmap_w / st->grid_size; st->grid_h = st->bitmap_h / st->grid_size; st->hole_x = random () % st->grid_w; @@ -307,19 +322,19 @@ slidescreen_draw (Display *dpy, Window window, void *closure) { st->img_loader = load_image_async_simple (st->img_loader, 0, 0, 0, 0, 0); if (! st->img_loader) { /* just finished */ - st->start_time = time ((time_t) 0); + st->start_time = time ((time_t *) 0); draw_grid (st); } return st->delay; } 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); st->draw_initted = 0; return st->delay; } @@ -433,13 +448,19 @@ slidescreen_reshape (Display *dpy, Window window, void *closure, 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); } } static Bool slidescreen_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; } @@ -469,8 +490,9 @@ static const char *slidescreen_defaults [] = { "*delay: 50000", "*delay2: 1000000", "*duration: 120", -#ifdef USE_IPHONE +#ifdef HAVE_MOBILE "*ignoreRotation: True", + "*rotateImages: True", #endif 0 };