From http://www.jwz.org/xscreensaver/xscreensaver-5.30.tar.gz
[xscreensaver] / hacks / celtic.c
index e9cef13eb4ab77d8f9ef77c4c5b33312b05af796..103b64718b03814e698f2b0fb0cf1c35e476e707 100644 (file)
@@ -85,7 +85,7 @@ struct state {
   Graph graph;
   XWindowAttributes xgwa;
   int delay2;
-  int reset;
+  int reset, force_reset;
   double t;
 
   struct params params;
@@ -838,6 +838,9 @@ static const char *celtic_defaults[] = {
     "*delay: 10000",
     "*delay2: 5",
     "*showGraph: False",
+#ifdef USE_IPHONE
+    "*ignoreRotation: True",
+#endif
     0
 };
 
@@ -919,10 +922,10 @@ celtic_init (Display *d_arg, Window w_arg)
   else
     {
 #if 0
-      make_random_colormap (st->dpy, st->xgwa.visual, st->xgwa.colormap,
+      make_random_colormap (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap,
                             st->colors, &st->ncolors, True, True, 0, True);
 #else
-      make_smooth_colormap (st->dpy, st->xgwa.visual, st->xgwa.colormap,
+      make_smooth_colormap (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap,
                             st->colors, &st->ncolors, True, 0, True);
 #endif
       if (st->ncolors < 2)
@@ -969,8 +972,11 @@ celtic_draw (Display *dpy, Window window, void *closure)
     return 10000;
   }
 
-  if (st->reset) {
+  if (st->reset || st->force_reset) {
+    int delay = (st->force_reset ? 0 : st->delay2);
     st->reset = 0;
+    st->force_reset = 0;
+    st->t = 1;
 
     pattern_del(st->pattern);
     st->pattern = NULL;
@@ -979,11 +985,11 @@ celtic_draw (Display *dpy, Window window, void *closure)
     /* recolor each time */
     st->ncolors = get_integer_resource (st->dpy, "ncolors", "Integer");
     if (st->ncolors > 2)
-      make_smooth_colormap (st->dpy, st->xgwa.visual, st->xgwa.colormap,
+      make_smooth_colormap (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap,
                             st->colors, &st->ncolors, True, 0, True);
 
     st->eraser = erase_window (st->dpy, st->window, st->eraser);
-    return st->delay2;
+    return (delay);
   }
 
   if (st->pattern == NULL) {
@@ -1102,6 +1108,12 @@ celtic_reshape (Display *dpy, Window window, void *closure,
 static Bool
 celtic_event (Display *dpy, Window window, void *closure, XEvent *event)
 {
+  struct state *st = (struct state *) closure;
+  if (screenhack_event_helper (dpy, window, event))
+    {
+      st->force_reset = 1;
+      return True;
+    }
   return False;
 }