From http://www.jwz.org/xscreensaver/xscreensaver-5.39.tar.gz
[xscreensaver] / hacks / slidescreen.c
index 313f0eecff0ad5bce43621e379bf91e9095caf62..c5656f32c867bc9b20df146b1dc16698fb6deded 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1992-2014 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1992-2018 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -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;
@@ -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;