Kristian Høgsberg | 82f6e8a | 2008-12-19 13:47:53 -0500 | [diff] [blame] | 1 | /* |
| 2 | * Copyright © 2008 Kristian Høgsberg |
| 3 | * |
| 4 | * This program is free software; you can redistribute it and/or modify |
| 5 | * it under the terms of the GNU General Public License as published by |
| 6 | * the Free Software Foundation; either version 2 of the License, or |
| 7 | * (at your option) any later version. |
| 8 | * |
| 9 | * This program is distributed in the hope that it will be useful, |
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 12 | * GNU General Public License for more details. |
| 13 | * |
| 14 | * You should have received a copy of the GNU General Public License |
| 15 | * along with this program; if not, write to the Free Software Foundation, |
| 16 | * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
| 17 | */ |
| 18 | |
| 19 | #ifndef _WAYLAND_SYSTEM_COMPOSITOR_H_ |
| 20 | #define _WAYLAND_SYSTEM_COMPOSITOR_H_ |
| 21 | |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 22 | #include <libudev.h> |
Kristian Høgsberg | 31bd6c7 | 2011-02-13 13:00:51 -0500 | [diff] [blame] | 23 | #include <pixman.h> |
Kristian Høgsberg | a661f26 | 2010-08-10 14:12:05 -0400 | [diff] [blame] | 24 | #include "wayland-server.h" |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 25 | #include "wayland-util.h" |
| 26 | |
Kristian Høgsberg | 5fcd0aa | 2010-08-09 14:43:33 -0400 | [diff] [blame] | 27 | #define GL_GLEXT_PROTOTYPES |
| 28 | #define EGL_EGLEXT_PROTOTYPES |
| 29 | #include <GLES2/gl2.h> |
| 30 | #include <GLES2/gl2ext.h> |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 31 | #include <EGL/egl.h> |
| 32 | #include <EGL/eglext.h> |
| 33 | |
| 34 | #define ARRAY_LENGTH(a) (sizeof (a) / sizeof (a)[0]) |
| 35 | |
| 36 | struct wlsc_matrix { |
| 37 | GLfloat d[16]; |
| 38 | }; |
| 39 | |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 40 | struct wlsc_surface; |
| 41 | |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 42 | struct wlsc_output { |
Kristian Høgsberg | b313b02 | 2010-12-01 17:07:41 -0500 | [diff] [blame] | 43 | struct wl_object object; |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 44 | struct wl_list link; |
| 45 | struct wlsc_compositor *compositor; |
| 46 | struct wlsc_surface *background; |
| 47 | struct wlsc_matrix matrix; |
| 48 | int32_t x, y, width, height; |
Kristian Høgsberg | 31bd6c7 | 2011-02-13 13:00:51 -0500 | [diff] [blame] | 49 | pixman_region32_t previous_damage_region; |
Benjamin Franzke | 9c26ff3 | 2011-03-15 15:08:41 +0100 | [diff] [blame] | 50 | uint32_t flags; |
Benjamin Franzke | ec4d342 | 2011-03-14 12:07:26 +0100 | [diff] [blame^] | 51 | int repaint_needed; |
| 52 | int finished; |
Benjamin Franzke | eefc36c | 2011-03-11 16:39:20 +0100 | [diff] [blame] | 53 | |
| 54 | int (*prepare_render)(struct wlsc_output *output); |
Benjamin Franzke | ec4d342 | 2011-03-14 12:07:26 +0100 | [diff] [blame^] | 55 | int (*present)(struct wlsc_output *output); |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 56 | }; |
| 57 | |
Kristian Høgsberg | 1db21f1 | 2010-08-16 16:08:12 -0400 | [diff] [blame] | 58 | enum wlsc_pointer_type { |
| 59 | WLSC_POINTER_BOTTOM_LEFT, |
| 60 | WLSC_POINTER_BOTTOM_RIGHT, |
| 61 | WLSC_POINTER_BOTTOM, |
| 62 | WLSC_POINTER_DRAGGING, |
| 63 | WLSC_POINTER_LEFT_PTR, |
| 64 | WLSC_POINTER_LEFT, |
| 65 | WLSC_POINTER_RIGHT, |
| 66 | WLSC_POINTER_TOP_LEFT, |
| 67 | WLSC_POINTER_TOP_RIGHT, |
| 68 | WLSC_POINTER_TOP, |
| 69 | WLSC_POINTER_IBEAM, |
| 70 | }; |
| 71 | |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 72 | struct wlsc_input_device { |
Kristian Høgsberg | b313b02 | 2010-12-01 17:07:41 -0500 | [diff] [blame] | 73 | struct wl_input_device input_device; |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 74 | struct wlsc_surface *sprite; |
Kristian Høgsberg | 77fb167 | 2010-08-16 10:38:29 -0400 | [diff] [blame] | 75 | int32_t hotspot_x, hotspot_y; |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 76 | struct wl_list link; |
Kristian Høgsberg | 5b75f1b | 2010-08-04 23:21:41 -0400 | [diff] [blame] | 77 | uint32_t modifier_state; |
Kristian Høgsberg | ae6c8a6 | 2011-01-18 09:08:53 -0500 | [diff] [blame] | 78 | struct wl_selection *selection; |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 79 | }; |
| 80 | |
Kristian Høgsberg | 3d5bae0 | 2010-10-06 21:17:40 -0400 | [diff] [blame] | 81 | struct wlsc_shm { |
Kristian Høgsberg | b313b02 | 2010-12-01 17:07:41 -0500 | [diff] [blame] | 82 | struct wl_object object; |
Kristian Høgsberg | 3d5bae0 | 2010-10-06 21:17:40 -0400 | [diff] [blame] | 83 | }; |
| 84 | |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 85 | struct wlsc_compositor { |
Kristian Høgsberg | b313b02 | 2010-12-01 17:07:41 -0500 | [diff] [blame] | 86 | struct wl_compositor compositor; |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 87 | |
Kristian Høgsberg | 3d5bae0 | 2010-10-06 21:17:40 -0400 | [diff] [blame] | 88 | struct wlsc_shm shm; |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 89 | EGLDisplay display; |
| 90 | EGLContext context; |
Benjamin Franzke | be01456 | 2011-02-18 17:04:24 +0100 | [diff] [blame] | 91 | EGLConfig config; |
Kristian Høgsberg | fa4e2a7 | 2011-02-13 13:44:55 -0500 | [diff] [blame] | 92 | GLuint fbo; |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 93 | GLuint proj_uniform, tex_uniform; |
Kristian Høgsberg | 8525a50 | 2011-01-14 16:20:21 -0500 | [diff] [blame] | 94 | struct wl_buffer **pointer_buffers; |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 95 | struct wl_display *wl_display; |
| 96 | |
Kristian Høgsberg | 83fc061 | 2010-08-04 22:44:55 -0400 | [diff] [blame] | 97 | /* We implement the shell interface. */ |
Kristian Høgsberg | 77a4a79 | 2010-08-16 16:24:19 -0400 | [diff] [blame] | 98 | struct wl_shell shell; |
Kristian Høgsberg | 83fc061 | 2010-08-04 22:44:55 -0400 | [diff] [blame] | 99 | |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 100 | /* There can be more than one, but not right now... */ |
Kristian Høgsberg | 9c3e8d7 | 2010-12-08 09:48:52 -0500 | [diff] [blame] | 101 | struct wl_input_device *input_device; |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 102 | |
| 103 | struct wl_list output_list; |
| 104 | struct wl_list input_device_list; |
| 105 | struct wl_list surface_list; |
| 106 | |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 107 | /* Repaint state. */ |
| 108 | struct wl_event_source *timer_source; |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 109 | int repaint_on_timeout; |
| 110 | struct timespec previous_swap; |
Kristian Høgsberg | 31bd6c7 | 2011-02-13 13:00:51 -0500 | [diff] [blame] | 111 | pixman_region32_t damage_region; |
Kristian Høgsberg | 525e4c0 | 2011-02-14 10:39:54 -0500 | [diff] [blame] | 112 | struct wl_array vertices, indices; |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 113 | |
Kristian Høgsberg | c9824dd | 2011-02-06 16:54:59 -0500 | [diff] [blame] | 114 | struct wlsc_switcher *switcher; |
Kristian Høgsberg | 86e0989 | 2010-07-07 09:51:11 -0400 | [diff] [blame] | 115 | uint32_t focus; |
Kristian Høgsberg | ce5325d | 2010-06-14 11:54:00 -0400 | [diff] [blame] | 116 | |
Kristian Høgsberg | caa6442 | 2010-12-01 16:52:15 -0500 | [diff] [blame] | 117 | void (*destroy)(struct wlsc_compositor *ec); |
Kristian Høgsberg | 640609a | 2010-08-09 22:11:47 -0400 | [diff] [blame] | 118 | int (*authenticate)(struct wlsc_compositor *c, uint32_t id); |
Kristian Høgsberg | 8525a50 | 2011-01-14 16:20:21 -0500 | [diff] [blame] | 119 | struct wl_buffer *(*create_buffer)(struct wlsc_compositor *c, |
| 120 | int32_t width, int32_t height, |
Benjamin Franzke | c649a92 | 2011-03-02 11:56:04 +0100 | [diff] [blame] | 121 | int32_t stride, struct wl_visual *visual, |
| 122 | void *data); |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 123 | }; |
| 124 | |
| 125 | #define MODIFIER_CTRL (1 << 8) |
| 126 | #define MODIFIER_ALT (1 << 9) |
Kristian Høgsberg | 5b75f1b | 2010-08-04 23:21:41 -0400 | [diff] [blame] | 127 | #define MODIFIER_SUPER (1 << 10) |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 128 | |
Benjamin Franzke | 1b765ff | 2011-02-18 16:51:37 +0100 | [diff] [blame] | 129 | enum wlsc_output_flags { |
| 130 | WL_OUTPUT_FLIPPED = 0x01 |
| 131 | }; |
| 132 | |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 133 | struct wlsc_vector { |
| 134 | GLfloat f[4]; |
| 135 | }; |
| 136 | |
Kristian Høgsberg | 0ce2457 | 2011-01-28 15:18:33 -0500 | [diff] [blame] | 137 | enum wlsc_surface_map_type { |
| 138 | WLSC_SURFACE_MAP_UNMAPPED, |
| 139 | WLSC_SURFACE_MAP_TOPLEVEL, |
| 140 | WLSC_SURFACE_MAP_TRANSIENT, |
| 141 | WLSC_SURFACE_MAP_FULLSCREEN |
| 142 | }; |
| 143 | |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 144 | struct wlsc_surface { |
Kristian Høgsberg | b313b02 | 2010-12-01 17:07:41 -0500 | [diff] [blame] | 145 | struct wl_surface surface; |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 146 | struct wlsc_compositor *compositor; |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 147 | GLuint texture; |
Kristian Høgsberg | 83fc061 | 2010-08-04 22:44:55 -0400 | [diff] [blame] | 148 | int32_t x, y, width, height; |
Kristian Høgsberg | 0ce2457 | 2011-01-28 15:18:33 -0500 | [diff] [blame] | 149 | int32_t saved_x, saved_y; |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 150 | struct wl_list link; |
| 151 | struct wlsc_matrix matrix; |
| 152 | struct wlsc_matrix matrix_inv; |
Kristian Høgsberg | 5fcd0aa | 2010-08-09 14:43:33 -0400 | [diff] [blame] | 153 | struct wl_visual *visual; |
Kristian Høgsberg | 3d5bae0 | 2010-10-06 21:17:40 -0400 | [diff] [blame] | 154 | struct wl_buffer *buffer; |
Benjamin Franzke | ec4d342 | 2011-03-14 12:07:26 +0100 | [diff] [blame^] | 155 | struct wlsc_output *output; |
Kristian Høgsberg | 0ce2457 | 2011-01-28 15:18:33 -0500 | [diff] [blame] | 156 | enum wlsc_surface_map_type map_type; |
| 157 | struct wlsc_output *fullscreen_output; |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 158 | }; |
| 159 | |
Kristian Høgsberg | 82f6e8a | 2008-12-19 13:47:53 -0500 | [diff] [blame] | 160 | void |
Kristian Høgsberg | 4cca349 | 2011-01-18 07:53:49 -0500 | [diff] [blame] | 161 | wlsc_surface_update_matrix(struct wlsc_surface *es); |
| 162 | |
| 163 | void |
Kristian Høgsberg | 9c3e8d7 | 2010-12-08 09:48:52 -0500 | [diff] [blame] | 164 | notify_motion(struct wl_input_device *device, |
Kristian Høgsberg | 808fd41 | 2010-07-20 17:06:19 -0400 | [diff] [blame] | 165 | uint32_t time, int x, int y); |
Kristian Høgsberg | 82f6e8a | 2008-12-19 13:47:53 -0500 | [diff] [blame] | 166 | void |
Kristian Høgsberg | 9c3e8d7 | 2010-12-08 09:48:52 -0500 | [diff] [blame] | 167 | notify_button(struct wl_input_device *device, |
Kristian Høgsberg | 808fd41 | 2010-07-20 17:06:19 -0400 | [diff] [blame] | 168 | uint32_t time, int32_t button, int32_t state); |
Kristian Høgsberg | 82f6e8a | 2008-12-19 13:47:53 -0500 | [diff] [blame] | 169 | void |
Kristian Høgsberg | 9c3e8d7 | 2010-12-08 09:48:52 -0500 | [diff] [blame] | 170 | notify_key(struct wl_input_device *device, |
Kristian Høgsberg | 808fd41 | 2010-07-20 17:06:19 -0400 | [diff] [blame] | 171 | uint32_t time, uint32_t key, uint32_t state); |
Kristian Høgsberg | 82f6e8a | 2008-12-19 13:47:53 -0500 | [diff] [blame] | 172 | |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 173 | void |
Kristian Høgsberg | 93331ff | 2011-01-26 20:35:07 -0500 | [diff] [blame] | 174 | notify_pointer_focus(struct wl_input_device *device, |
| 175 | uint32_t time, |
| 176 | struct wlsc_output *output, |
| 177 | int32_t x, int32_t y); |
| 178 | |
| 179 | void |
Kristian Høgsberg | 3ba4858 | 2011-01-27 11:57:19 -0500 | [diff] [blame] | 180 | notify_keyboard_focus(struct wl_input_device *device, |
| 181 | uint32_t time, struct wlsc_output *output, |
| 182 | struct wl_array *keys); |
| 183 | |
| 184 | void |
Benjamin Franzke | ec4d342 | 2011-03-14 12:07:26 +0100 | [diff] [blame^] | 185 | wlsc_output_finish_frame(struct wlsc_output *output, int msecs); |
Kristian Høgsberg | 86e0989 | 2010-07-07 09:51:11 -0400 | [diff] [blame] | 186 | void |
| 187 | wlsc_compositor_schedule_repaint(struct wlsc_compositor *compositor); |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 188 | |
Kristian Høgsberg | 4cca349 | 2011-01-18 07:53:49 -0500 | [diff] [blame] | 189 | void |
Benjamin Franzke | ec4d342 | 2011-03-14 12:07:26 +0100 | [diff] [blame^] | 190 | wlsc_surface_assign_output(struct wlsc_surface *surface); |
| 191 | |
| 192 | void |
Kristian Høgsberg | 31bd6c7 | 2011-02-13 13:00:51 -0500 | [diff] [blame] | 193 | wlsc_surface_damage(struct wlsc_surface *surface); |
| 194 | |
| 195 | void |
| 196 | wlsc_surface_damage_rectangle(struct wlsc_surface *surface, |
| 197 | int32_t x, int32_t y, |
| 198 | int32_t width, int32_t height); |
| 199 | |
| 200 | void |
Kristian Høgsberg | 4cca349 | 2011-01-18 07:53:49 -0500 | [diff] [blame] | 201 | wlsc_input_device_set_pointer_image(struct wlsc_input_device *device, |
| 202 | enum wlsc_pointer_type type); |
| 203 | struct wlsc_surface * |
| 204 | pick_surface(struct wl_input_device *device, int32_t *sx, int32_t *sy); |
| 205 | |
Kristian Høgsberg | ae6c8a6 | 2011-01-18 09:08:53 -0500 | [diff] [blame] | 206 | void |
| 207 | wlsc_selection_set_focus(struct wl_selection *selection, |
| 208 | struct wl_surface *surface, uint32_t time); |
| 209 | |
Kristian Høgsberg | 4cca349 | 2011-01-18 07:53:49 -0500 | [diff] [blame] | 210 | uint32_t |
| 211 | get_time(void); |
| 212 | |
Kristian Høgsberg | 8525a50 | 2011-01-14 16:20:21 -0500 | [diff] [blame] | 213 | struct wl_buffer * |
Benjamin Franzke | c649a92 | 2011-03-02 11:56:04 +0100 | [diff] [blame] | 214 | wlsc_shm_buffer_create(struct wlsc_compositor *ec, |
| 215 | int32_t width, int32_t height, |
| 216 | int32_t stride, struct wl_visual *visual, |
| 217 | void *data); |
Kristian Høgsberg | 3d5bae0 | 2010-10-06 21:17:40 -0400 | [diff] [blame] | 218 | |
Kristian Høgsberg | ce5325d | 2010-06-14 11:54:00 -0400 | [diff] [blame] | 219 | int |
| 220 | wlsc_compositor_init(struct wlsc_compositor *ec, struct wl_display *display); |
| 221 | void |
Benjamin Franzke | 9c26ff3 | 2011-03-15 15:08:41 +0100 | [diff] [blame] | 222 | wlsc_output_move(struct wlsc_output *output, int x, int y); |
| 223 | void |
Kristian Høgsberg | ce5325d | 2010-06-14 11:54:00 -0400 | [diff] [blame] | 224 | wlsc_output_init(struct wlsc_output *output, struct wlsc_compositor *c, |
Benjamin Franzke | 1b765ff | 2011-02-18 16:51:37 +0100 | [diff] [blame] | 225 | int x, int y, int width, int height, uint32_t flags); |
Kristian Høgsberg | ce5325d | 2010-06-14 11:54:00 -0400 | [diff] [blame] | 226 | void |
Benjamin Franzke | 9c26ff3 | 2011-03-15 15:08:41 +0100 | [diff] [blame] | 227 | wlsc_output_destroy(struct wlsc_output *output); |
| 228 | |
| 229 | void |
Kristian Høgsberg | ce5325d | 2010-06-14 11:54:00 -0400 | [diff] [blame] | 230 | wlsc_input_device_init(struct wlsc_input_device *device, |
| 231 | struct wlsc_compositor *ec); |
| 232 | |
Kristian Høgsberg | 3d5bae0 | 2010-10-06 21:17:40 -0400 | [diff] [blame] | 233 | int |
| 234 | wlsc_shm_init(struct wlsc_compositor *ec); |
| 235 | |
Kristian Høgsberg | 4cca349 | 2011-01-18 07:53:49 -0500 | [diff] [blame] | 236 | int |
| 237 | wlsc_shell_init(struct wlsc_compositor *ec); |
| 238 | |
| 239 | void |
| 240 | shell_move(struct wl_client *client, struct wl_shell *shell, |
| 241 | struct wl_surface *surface, |
| 242 | struct wl_input_device *device, uint32_t time); |
| 243 | |
| 244 | void |
| 245 | shell_resize(struct wl_client *client, struct wl_shell *shell, |
| 246 | struct wl_surface *surface, |
| 247 | struct wl_input_device *device, uint32_t time, uint32_t edges); |
| 248 | |
Kristian Høgsberg | ce5325d | 2010-06-14 11:54:00 -0400 | [diff] [blame] | 249 | struct wlsc_compositor * |
Kristian Høgsberg | 61a8251 | 2010-10-26 11:26:44 -0400 | [diff] [blame] | 250 | x11_compositor_create(struct wl_display *display, int width, int height); |
Kristian Høgsberg | ce5325d | 2010-06-14 11:54:00 -0400 | [diff] [blame] | 251 | |
| 252 | struct wlsc_compositor * |
Kristian Høgsberg | 61a8251 | 2010-10-26 11:26:44 -0400 | [diff] [blame] | 253 | drm_compositor_create(struct wl_display *display, int connector); |
Kristian Høgsberg | ce5325d | 2010-06-14 11:54:00 -0400 | [diff] [blame] | 254 | |
Benjamin Franzke | ec2e642 | 2010-11-27 19:04:12 +0100 | [diff] [blame] | 255 | struct wlsc_compositor * |
| 256 | wayland_compositor_create(struct wl_display *display, int width, int height); |
| 257 | |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 258 | void |
Kristian Høgsberg | 43db401 | 2011-01-14 14:45:42 -0500 | [diff] [blame] | 259 | evdev_input_add_devices(struct wlsc_compositor *c, struct udev *udev); |
| 260 | |
Kristian Høgsberg | e4762a6 | 2011-01-14 14:59:13 -0500 | [diff] [blame] | 261 | struct tty * |
| 262 | tty_create(struct wlsc_compositor *compositor); |
| 263 | |
| 264 | void |
| 265 | tty_destroy(struct tty *tty); |
| 266 | |
Kristian Høgsberg | 43db401 | 2011-01-14 14:45:42 -0500 | [diff] [blame] | 267 | void |
Kristian Høgsberg | fc783d4 | 2010-06-11 12:56:24 -0400 | [diff] [blame] | 268 | screenshooter_create(struct wlsc_compositor *ec); |
| 269 | |
Kristian Høgsberg | f58d8ca | 2011-01-26 14:37:07 -0500 | [diff] [blame] | 270 | uint32_t * |
| 271 | wlsc_load_image(const char *filename, int width, int height); |
| 272 | |
Kristian Høgsberg | 82f6e8a | 2008-12-19 13:47:53 -0500 | [diff] [blame] | 273 | #endif |