-static void
-screenshot_write_png(const struct buffer_size *buff_size,
- struct wl_list *output_list)
-{
- int output_stride, buffer_stride, i;
- cairo_surface_t *surface;
- void *data, *d, *s;
- struct screenshooter_output *output, *next;
- FILE *fp;
- char filepath[PATH_MAX];
-
- buffer_stride = buff_size->width * 4;
-
- data = xmalloc(buffer_stride * buff_size->height);
- if (!data)
- return;
-
- wl_list_for_each_safe(output, next, output_list, link) {
- output_stride = output->width * 4;
- s = output->data;
- d = data + (output->offset_y - buff_size->min_y) * buffer_stride +
- (output->offset_x - buff_size->min_x) * 4;
-
- for (i = 0; i < output->height; i++) {
- memcpy(d, s, output_stride);
- d += buffer_stride;
- s += output_stride;
- }
-
- free(output);
- }
-
- surface = cairo_image_surface_create_for_data(data,
- CAIRO_FORMAT_ARGB32,
- buff_size->width,
- buff_size->height,
- buffer_stride);
-
- fp = file_create_dated(getenv("XDG_PICTURES_DIR"), "agl-screenshot-",