X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=clients%2Fscreenshooter.c;h=986e7bd9ba9d5a8f1cfb9fd1ebb811091c238c60;hb=refs%2Fchanges%2F51%2F28551%2F1;hp=faced55e5bcdd68bbd05dad35913dc367b74f7d3;hpb=be8288cc5b127074fae6e2da052d6cd5cd623ae2;p=src%2Fagl-compositor.git diff --git a/clients/screenshooter.c b/clients/screenshooter.c index faced55..986e7bd 100644 --- a/clients/screenshooter.c +++ b/clients/screenshooter.c @@ -150,6 +150,8 @@ static const struct wl_output_listener output_listener = { display_handle_mode, display_handle_done, display_handle_scale, + NULL, + NULL }; static void @@ -201,6 +203,8 @@ add_xdg_output_v1_info(struct screenshooter_data *shooter_data, struct screenshooter_output *output) { struct xdg_output_v1_info *xdg_output = zalloc(sizeof(*xdg_output)); + if (!xdg_output) + return; wl_list_insert(&shooter_data->xdg_output_list, &xdg_output->link); @@ -395,28 +399,17 @@ screenshot_write_png(const struct buffer_size *buff_size, free(data); } -static int +static void screenshot_set_buffer_size_per_output(struct buffer_size *buff_size, struct screenshooter_output *output) { - buff_size->min_x = buff_size->min_y = INT_MAX; - buff_size->max_x = buff_size->max_y = INT_MIN; - buff_size->min_x = MIN(buff_size->min_x, output->offset_x); buff_size->min_y = MIN(buff_size->min_y, output->offset_y); - buff_size->max_x = - MAX(buff_size->max_x, output->offset_x + output->width); - buff_size->max_y = - MAX(buff_size->max_y, output->offset_y + output->height); - - if (buff_size->max_x <= buff_size->min_x || - buff_size->max_y <= buff_size->min_y) - return -1; + buff_size->max_x = MAX(buff_size->max_x, output->offset_x + output->width); + buff_size->max_y = MAX(buff_size->max_y, output->offset_y + output->height); buff_size->width = buff_size->max_x - buff_size->min_x; buff_size->height = buff_size->max_y - buff_size->min_y; - - return 0; } static void @@ -432,12 +425,21 @@ screenshot_set_buffer_size(struct buffer_size *buff_size, struct wl_list *output struct screenshooter_output *output; int pos = 0; + buff_size->min_x = buff_size->min_y = INT_MAX; + buff_size->max_x = buff_size->max_y = INT_MIN; + wl_list_for_each_reverse(output, output_list, link) screenshot_compute_output_offset(&pos, output); wl_list_for_each(output, output_list, link) - if (screenshot_set_buffer_size_per_output(buff_size, output)) - return -1; + screenshot_set_buffer_size_per_output(buff_size, output); + + if (buff_size->max_x <= buff_size->min_x || + buff_size->max_y <= buff_size->min_y) + return -1; + + buff_size->width = buff_size->max_x - buff_size->min_x; + buff_size->height = buff_size->max_y - buff_size->min_y; return 0; }