From http://www.jwz.org/xscreensaver/xscreensaver-5.37.tar.gz
[xscreensaver] / utils / grabscreen.h
index 19d01e2aa2e165df4add8aeb37cf9426d1e98875..f0d7a0b653f37ba8c19728777fee791629ebfc6b 100644 (file)
@@ -1,5 +1,4 @@
-/* xscreensaver, Copyright (c) 1992, 1993, 1994, 1997, 2001, 2003, 2004
- *  Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1992-2014 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
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
    desktop, or from the system's video input, depending on user
    preferences.
 
    desktop, or from the system's video input, depending on user
    preferences.
 
-   If it is from a file, then it will be returned in `filename_return'.
-   filename_return may be NULL; also, NULL may be returned (e.g., if
-   it's a screenshot or video capture.)
+   When the callback is called, the image data will have been loaded
+   into the given drawable.  Copy `name' if you want to keep it.
+
+   If it is from a file, then the `filename' argument will be the name
+   of the file.  It may be NULL.  If you want to keep this string, copy it.
+
+   The size and position of the image is in the `geometry' arg.
+   The image will generally have been scaled up to fit the window, but
+   if a loaded file had a different aspect ratio than the window, it
+   will have been centered, and the returned coords will describe that.
 
    Many colors may be allocated from the window's colormap.
  */
 
    Many colors may be allocated from the window's colormap.
  */
-extern void load_random_image (Screen *screen,
-                               Window top_level_window,
-                               Drawable target_window_or_pixmap, 
-                               char **filename_return);
+extern void load_image_async (Screen *, Window, Drawable,
+                              void (*callback) (Screen *, Window,
+                                                Drawable,
+                                                const char *name,
+                                                XRectangle *geometry,
+                                                void *closure),
+                              void *closure);
 
 
-/* Like the above, but loads the image in the background and runs the
-   given callback once it has been loaded.
+/* A utility wrapper around load_image_async() that is simpler if you
+   are only loading a single image at a time: just keep calling it
+   periodically until it returns NULL.  When it does, the image has
+   been loaded.
  */
  */
-extern void fork_load_random_image (Screen *screen, Window window,
-                                    Drawable drawable,
-                                    void (*callback) (Screen *, Window,
-                                                      Drawable,
-                                                      const char *name,
-                                                      void *closure),
-                                    void *closure);
+typedef struct async_load_state async_load_state;
+extern async_load_state *load_image_async_simple (async_load_state *,
+                                                  Screen *,
+                                                  Window top_level,
+                                                  Drawable target, 
+                                                  char **filename_ret,
+                                                  XRectangle *geometry_ret);
 
 
 /* Whether one should use GCSubwindowMode when drawing on this window
 
 
 /* Whether one should use GCSubwindowMode when drawing on this window
@@ -65,8 +76,35 @@ extern Bool top_level_window_p(Screen *screen, Window window);
 /* Don't call this: this is for the "xscreensaver-getimage" program only. */
 extern void grab_screen_image_internal (Screen *, Window);
 
 /* Don't call this: this is for the "xscreensaver-getimage" program only. */
 extern void grab_screen_image_internal (Screen *, Window);
 
-/* Don't use this: this is how "xscreensaver-getimage" and "grabclient.c"
+/* Don't use these: this is how "xscreensaver-getimage" and "grabclient.c"
    pass the file name around. */
 #define XA_XSCREENSAVER_IMAGE_FILENAME "_SCREENSAVER_IMAGE_FILENAME"
    pass the file name around. */
 #define XA_XSCREENSAVER_IMAGE_FILENAME "_SCREENSAVER_IMAGE_FILENAME"
+#define XA_XSCREENSAVER_IMAGE_GEOMETRY "_SCREENSAVER_IMAGE_GEOMETRY"
+
+/* For debugging: turn on verbosity. */
+extern void grabscreen_verbose (void);
+
+#ifdef HAVE_JWXYZ
+/* Don't use these: internal interface of grabclient.c. */
+extern Bool osx_grab_desktop_image (Screen *, Window, Drawable,
+                                    XRectangle *geom_ret);
+extern Bool osx_load_image_file (Screen *, Window, Drawable,
+                                 const char *filename, XRectangle *geom_ret);
+#endif /* HAVE_JWXYZ */
+
+#ifdef USE_IPHONE
+extern void ios_load_random_image (void (*callback) (void *uiimage,
+                                                     const char *filename,
+                                                     int w, int h,
+                                                     void *closure),
+                                   void *closure,
+                                   int width, int height);
+#endif /* USE_IPHONE */
+
+#ifdef HAVE_ANDROID
+char *jwxyz_load_random_image (Display *dpy,  /* utils/grabclient.c */
+                               int *width_ret, int *height_ret,
+                               char **name_ret);
+#endif
 
 #endif /* __GRABSCREEN_H__ */
 
 #endif /* __GRABSCREEN_H__ */