Fix thumbnailing with the GdkPixbuf loader

This commit is contained in:
Přemysl Eric Janouch 2023-06-13 13:20:14 +02:00
parent b308b5da18
commit 41b5ddc744
Signed by: p
GPG Key ID: A0420B94F92B9493
1 changed files with 13 additions and 3 deletions

View File

@ -3107,10 +3107,20 @@ open_gdkpixbuf(
gdk_pixbuf_get_bits_per_sample(pixbuf) == 8; gdk_pixbuf_get_bits_per_sample(pixbuf) == 8;
cairo_surface_t *surface = NULL; cairo_surface_t *surface = NULL;
if (custom_argb32) if (custom_argb32) {
surface = load_gdkpixbuf_argb32_unpremultiplied(pixbuf); surface = load_gdkpixbuf_argb32_unpremultiplied(pixbuf);
else } else {
surface = gdk_cairo_surface_create_from_pixbuf(pixbuf, 1, NULL); // Don't depend on GDK being initialized, to speed up thumbnailing
// (calling gdk_cairo_surface_create_from_pixbuf() would).
cairo_surface_t *dummy =
cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 1, 1);
cairo_t *cr = cairo_create(dummy);
cairo_surface_destroy(dummy);
gdk_cairo_set_source_pixbuf(cr, pixbuf, 0, 0);
(void) cairo_pattern_get_surface(cairo_get_source(cr), &surface);
cairo_surface_reference(surface);
cairo_destroy(cr);
}
cairo_status_t surface_status = cairo_surface_status(surface); cairo_status_t surface_status = cairo_surface_status(surface);
if (surface_status != CAIRO_STATUS_SUCCESS) { if (surface_status != CAIRO_STATUS_SUCCESS) {