diff --git a/gdk-pixbuf/ChangeLog b/gdk-pixbuf/ChangeLog index 18b13d4849..9f72819564 100644 --- a/gdk-pixbuf/ChangeLog +++ b/gdk-pixbuf/ChangeLog @@ -1,3 +1,10 @@ +2007-03-05 Matthias Clasen + + Merge from trunk: + + * io-tga.c: (gdk_pixbuf__tga_stop_load): Flip rle-encoded + images even if they haven't been completely loaded. (#347106) + 2007-02-27 Felix Riemann * io-ico.c: (fill_info): Add image/x-ico to supported mime types. diff --git a/gdk-pixbuf/io-tga.c b/gdk-pixbuf/io-tga.c index 2cde75f767..4891b7c7e7 100644 --- a/gdk-pixbuf/io-tga.c +++ b/gdk-pixbuf/io-tga.c @@ -504,8 +504,9 @@ static guint parse_rle_data_pseudocolor(TGAContext *ctx) } } - if (ctx->pbuf_bytes_done == ctx->pbuf_bytes) + if (ctx->pbuf_bytes_done == ctx->pbuf_bytes) ctx->done = TRUE; + return n; } @@ -657,8 +658,10 @@ static gboolean parse_rle_data(TGAContext *ctx, GError **err) * perfect, but doing it during the rle decoding in place * is considerably more work. */ - if (!(ctx->hdr->flags & TGA_ORIGIN_UPPER)) + if (!(ctx->hdr->flags & TGA_ORIGIN_UPPER)) { pixbuf_flip_vertically (ctx->pbuf); + ctx->hdr->flags |= TGA_ORIGIN_UPPER; + } } @@ -933,6 +936,13 @@ static gboolean gdk_pixbuf__tga_stop_load(gpointer data, GError **err) TGAContext *ctx = (TGAContext *) data; g_return_val_if_fail(ctx != NULL, FALSE); + if (!(ctx->hdr->flags & TGA_ORIGIN_UPPER) && ctx->run_length_encoded) { + pixbuf_flip_vertically (ctx->pbuf); + if (ctx->ufunc) + (*ctx->ufunc) (ctx->pbuf, 0, 0, + ctx->pbuf->width, ctx->pbuf->height, + ctx->udata); + } if (ctx->hdr) g_free (ctx->hdr); if (ctx->cmap) {