| 1 | /* xscreensaver, Copyright (c) 1992-2014 Jamie Zawinski <jwz@jwz.org> |
| 2 | * |
| 3 | * Permission to use, copy, modify, distribute, and sell this software and its |
| 4 | * documentation for any purpose is hereby granted without fee, provided that |
| 5 | * the above copyright notice appear in all copies and that both that |
| 6 | * copyright notice and this permission notice appear in supporting |
| 7 | * documentation. No representations are made about the suitability of this |
| 8 | * software for any purpose. It is provided "as is" without express or |
| 9 | * implied warranty. |
| 10 | */ |
| 11 | |
| 12 | #ifndef __GRABSCREEN_H__ |
| 13 | #define __GRABSCREEN_H__ |
| 14 | |
| 15 | /* This will write an image onto the given Drawable. |
| 16 | The Drawable (arg 3) may be a Window or a Pixmap. |
| 17 | |
| 18 | The Window must be the top-level window. The image *may or may not* |
| 19 | be written to the window, though it will definitely be written to |
| 20 | the drawable. It's fine for args 2 and 3 to be the same window, or |
| 21 | for arg 2 to be a Window, and arg 3 to be a Pixmap. |
| 22 | |
| 23 | The loaded image might be from a file, or from a screen shot of the |
| 24 | desktop, or from the system's video input, depending on user |
| 25 | preferences. |
| 26 | |
| 27 | When the callback is called, the image data will have been loaded |
| 28 | into the given drawable. Copy `name' if you want to keep it. |
| 29 | |
| 30 | If it is from a file, then the `filename' argument will be the name |
| 31 | of the file. It may be NULL. If you want to keep this string, copy it. |
| 32 | |
| 33 | The size and position of the image is in the `geometry' arg. |
| 34 | The image will generally have been scaled up to fit the window, but |
| 35 | if a loaded file had a different aspect ratio than the window, it |
| 36 | will have been centered, and the returned coords will describe that. |
| 37 | |
| 38 | Many colors may be allocated from the window's colormap. |
| 39 | */ |
| 40 | extern void load_image_async (Screen *, Window, Drawable, |
| 41 | void (*callback) (Screen *, Window, |
| 42 | Drawable, |
| 43 | const char *name, |
| 44 | XRectangle *geometry, |
| 45 | void *closure), |
| 46 | void *closure); |
| 47 | |
| 48 | /* A utility wrapper around load_image_async() that is simpler if you |
| 49 | are only loading a single image at a time: just keep calling it |
| 50 | periodically until it returns NULL. When it does, the image has |
| 51 | been loaded. |
| 52 | */ |
| 53 | typedef struct async_load_state async_load_state; |
| 54 | extern async_load_state *load_image_async_simple (async_load_state *, |
| 55 | Screen *, |
| 56 | Window top_level, |
| 57 | Drawable target, |
| 58 | char **filename_ret, |
| 59 | XRectangle *geometry_ret); |
| 60 | |
| 61 | |
| 62 | /* Whether one should use GCSubwindowMode when drawing on this window |
| 63 | (assuming a screen image has been grabbed onto it.) Yes, this is a |
| 64 | total kludge. */ |
| 65 | extern Bool use_subwindow_mode_p(Screen *screen, Window window); |
| 66 | |
| 67 | /* Whether the given window is: |
| 68 | - the real root window; |
| 69 | - the virtual root window; |
| 70 | - a direct child of the root window; |
| 71 | - a direct child of the window manager's decorations. |
| 72 | */ |
| 73 | extern Bool top_level_window_p(Screen *screen, Window window); |
| 74 | |
| 75 | |
| 76 | /* Don't call this: this is for the "xscreensaver-getimage" program only. */ |
| 77 | extern void grab_screen_image_internal (Screen *, Window); |
| 78 | |
| 79 | /* Don't use these: this is how "xscreensaver-getimage" and "grabclient.c" |
| 80 | pass the file name around. */ |
| 81 | #define XA_XSCREENSAVER_IMAGE_FILENAME "_SCREENSAVER_IMAGE_FILENAME" |
| 82 | #define XA_XSCREENSAVER_IMAGE_GEOMETRY "_SCREENSAVER_IMAGE_GEOMETRY" |
| 83 | |
| 84 | /* For debugging: turn on verbosity. */ |
| 85 | extern void grabscreen_verbose (void); |
| 86 | |
| 87 | #ifdef HAVE_JWXYZ |
| 88 | /* Don't use these: internal interface of grabclient.c. */ |
| 89 | extern Bool osx_grab_desktop_image (Screen *, Window, Drawable, |
| 90 | XRectangle *geom_ret); |
| 91 | extern Bool osx_load_image_file (Screen *, Window, Drawable, |
| 92 | const char *filename, XRectangle *geom_ret); |
| 93 | #endif /* HAVE_JWXYZ */ |
| 94 | |
| 95 | #ifdef HAVE_IPHONE |
| 96 | extern void ios_load_random_image (void (*callback) (void *uiimage, |
| 97 | const char *filename, |
| 98 | int w, int h, |
| 99 | void *closure), |
| 100 | void *closure, |
| 101 | int width, int height); |
| 102 | #endif /* HAVE_IPHONE */ |
| 103 | |
| 104 | #ifdef HAVE_ANDROID |
| 105 | char *jwxyz_draw_random_image (Display *dpy, /* utils/grabclient.c */ |
| 106 | Drawable drawable, GC gc); |
| 107 | #endif |
| 108 | |
| 109 | #endif /* __GRABSCREEN_H__ */ |