From http://www.jwz.org/xscreensaver/xscreensaver-5.35.tar.gz
[xscreensaver] / hacks / xlyap.c
index d78b81b095993f523c18bc40636e4f19c2d5ba52..cbd493794c194c607ba172dcaa13cfef1f684b1d 100644 (file)
 #undef countof
 #define countof(x) (sizeof((x))/sizeof((*x)))
 
-#ifndef HAVE_COCOA
+#ifndef HAVE_JWXYZ
 # include <X11/cursorfont.h> 
 #endif
 
 static const char *xlyap_defaults [] = {
   ".background:         black",
   ".foreground:         white",
+  "*fpsSolid:          true",
   "*randomize:          true",
   "*builtin:            -1",
   "*minColor:           1",
@@ -77,6 +78,9 @@ static const char *xlyap_defaults [] = {
   "*delay:              10000",
   "*linger:             5",
   "*colors:             200",
+#ifdef HAVE_MOBILE
+  "*ignoreRotation:     True",
+#endif
   0
 };
 
@@ -157,7 +161,7 @@ typedef struct {
 #endif
 
 typedef struct {
-# ifndef HAVE_COCOA
+# ifndef HAVE_JWXYZ
   Cursor band_cursor;
 # endif
   double p_min, p_max, q_min, q_max;
@@ -177,8 +181,8 @@ typedef double (*PFD)(double,double);
 /*#define BACKING_PIXMAP*/
 
 struct state {
-  int screen;
   Display *dpy;
+  Screen *screen;
   Visual *visual;
   Colormap cmap;
 
@@ -551,15 +555,15 @@ init_color(struct state *st)
 {
   int i;
   if (st->ncolors)
-    free_colors (st->dpy, st->cmap, st->colors, st->ncolors);
+    free_colors (st->screen, st->cmap, st->colors, st->ncolors);
   st->ncolors = st->maxcolor;
-  make_smooth_colormap(st->dpy, st->visual, st->cmap,
+  make_smooth_colormap(st->screen, st->visual, st->cmap,
                        st->colors, &st->ncolors, True, NULL, True);
 
   for (i = 0; i < st->maxcolor; i++) {
     if (! st->Data_GC[i]) {
       XGCValues gcv;
-      gcv.background = BlackPixel(st->dpy, st->screen);
+      gcv.background = BlackPixelOfScreen(st->screen);
       st->Data_GC[i] = XCreateGC(st->dpy, st->canvas, GCBackground, &gcv);
     }
     XSetForeground(st->dpy, st->Data_GC[i],
@@ -823,7 +827,7 @@ Getkey(struct state *st, XKeyEvent *event)
   unsigned char key;
   int i;
   if (XLookupString(event, (char *)&key, sizeof(key), (KeySym *)0,
-                    (XComposeStatus *) 0) > 0)
+                    (XComposeStatus *) 0) > 0) {
 
     if (st->reset_countdown)
       st->reset_countdown = st->linger;
@@ -952,6 +956,7 @@ Getkey(struct state *st, XKeyEvent *event)
     case 'H': print_help(st); return True;
     default:  return False;
     }
+  }
 
   return False;
 }
@@ -1236,7 +1241,6 @@ EndRubberBand(struct state *st, image_data_t *data, XEvent *event)
   data->p_min += diff * delta;
   delta = (double)(st->width - bot.x) / (double)st->width;
   data->p_max -= diff * delta;
-  fflush(stdout);
   set_new_params(st, data);
 }
 
@@ -1782,6 +1786,7 @@ xlyap_init (Display *d, Window window)
   st->width = xgwa.width;
   st->height = xgwa.height;
   st->visual = xgwa.visual;
+  st->screen = xgwa.screen;
   st->cmap = xgwa.colormap;
 
   do_defaults(st);
@@ -1799,14 +1804,13 @@ xlyap_init (Display *d, Window window)
   if (builtin >= 0)
     do_preset (st, builtin);
 
-  st->screen = DefaultScreen(st->dpy);
-  st->background = BlackPixel(st->dpy, st->screen);
+  st->background = BlackPixelOfScreen(st->screen);
   setupmem(st);
   init_data(st);
   if (!mono_p)
     st->foreground = st->startcolor;
   else
-    st->foreground = WhitePixel(st->dpy, st->screen);
+    st->foreground = WhitePixelOfScreen(st->screen);
 
   /*
    * Create the window to display the Lyapunov exponents
@@ -1874,11 +1878,13 @@ static Bool
 xlyap_event (Display *dpy, Window window, void *closure, XEvent *event)
 {
   struct state *st = (struct state *) closure;
+
   switch(event->type)
     {
     case KeyPress:
-      return Getkey(st, &event->xkey);
-      return True;
+      if (Getkey(st, &event->xkey))
+        return True;
+      break;
 #if 0
     case ButtonPress:
       StartRubberBand(st, &st->rubber_data, event);
@@ -1893,6 +1899,13 @@ xlyap_event (Display *dpy, Window window, void *closure, XEvent *event)
     default: 
       break;
     }
+
+  if (screenhack_event_helper (dpy, window, event))
+    {
+      Clear(st);
+      return True;
+    }
+
   return False;
 }