Commit | Line | Data |
---|---|---|
3144ee8a AT |
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__ */ |