From 1ab9af0cedfa668d0266b651dca384f6613d633c Mon Sep 17 00:00:00 2001 From: "tor%cs.brown.edu" Date: Sat, 23 Jun 2001 05:04:43 +0000 Subject: [PATCH] Bug 86822 - gif spacer image detector was looking at uninitialized data; animated gif spacer flag wasn't being updated. r=pavlov, sr=blizzard, a=dbaron --- gfx/src/gtk/nsImageGTK.cpp | 3 +++ modules/libpr0n/decoders/gif/nsGIFDecoder2.cpp | 4 ++-- modules/libpr0n/decoders/mng/imgContainerMNG.cpp | 11 +++++------ modules/libpr0n/decoders/png/nsPNGDecoder.cpp | 6 +++--- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/gfx/src/gtk/nsImageGTK.cpp b/gfx/src/gtk/nsImageGTK.cpp index 2818fae7afcb..b576bb1758f7 100644 --- a/gfx/src/gtk/nsImageGTK.cpp +++ b/gfx/src/gtk/nsImageGTK.cpp @@ -1720,6 +1720,9 @@ NS_IMETHODIMP nsImageGTK::DrawToImage(nsIImage* aDstImage, gdk_gc_unref(gc); + if (!mIsSpacer || !mAlphaDepth) + dest->mIsSpacer = PR_FALSE; + // need to copy the mImageBits in case we're rendered scaled PRUint8 *scaledImage = 0, *scaledAlpha = 0; PRUint8 *rgbPtr=0, *alphaPtr=0; diff --git a/modules/libpr0n/decoders/gif/nsGIFDecoder2.cpp b/modules/libpr0n/decoders/gif/nsGIFDecoder2.cpp index d8e1e29690a3..55b5d058c3a5 100644 --- a/modules/libpr0n/decoders/gif/nsGIFDecoder2.cpp +++ b/modules/libpr0n/decoders/gif/nsGIFDecoder2.cpp @@ -535,10 +535,10 @@ int HaveDecodedRow( ++rowBufIndex; } for (int i=0; imImageFrame->SetImageData(decoder->mRGBLine, - bpr, (aRowNumber+i)*bpr); decoder->mImageFrame->SetAlphaData(decoder->mAlphaLine, abpr, (aRowNumber+i)*abpr); + decoder->mImageFrame->SetImageData(decoder->mRGBLine, + bpr, (aRowNumber+i)*bpr); } } break; diff --git a/modules/libpr0n/decoders/mng/imgContainerMNG.cpp b/modules/libpr0n/decoders/mng/imgContainerMNG.cpp index 3a33cf9c7f60..fa66f44f3bd9 100644 --- a/modules/libpr0n/decoders/mng/imgContainerMNG.cpp +++ b/modules/libpr0n/decoders/mng/imgContainerMNG.cpp @@ -393,6 +393,11 @@ il_mng_refresh(mng_handle handle, *cptr++ = *row++; *cptr++ = *row++; } + if (container->alpha) + container->mFrame->SetAlphaData(container->alpha + + y*container->mByteWidthAlpha, + container->mByteWidthAlpha, + abpr*y); container->mFrame->SetImageData(buf, bpr, bpr*y); #else container->mFrame->SetImageData(container->image + @@ -400,12 +405,6 @@ il_mng_refresh(mng_handle handle, container->mByteWidth, bpr*y); #endif - - if (container->alpha) - container->mFrame->SetAlphaData(container->alpha + - y*container->mByteWidthAlpha, - container->mByteWidthAlpha, - abpr*y); } #ifdef XP_MAC nsMemory::Free(buf); diff --git a/modules/libpr0n/decoders/png/nsPNGDecoder.cpp b/modules/libpr0n/decoders/png/nsPNGDecoder.cpp index f4cbeb4a582c..8fce1a459f91 100644 --- a/modules/libpr0n/decoders/png/nsPNGDecoder.cpp +++ b/modules/libpr0n/decoders/png/nsPNGDecoder.cpp @@ -460,8 +460,8 @@ row_callback(png_structp png_ptr, png_bytep new_row, aptr[x>>3] |= 1<<(7-x&0x7); } } - decoder->mFrame->SetImageData(decoder->colorLine, bpr, row_num*bpr); decoder->mFrame->SetAlphaData(decoder->alphaLine, abpr, row_num*abpr); + decoder->mFrame->SetImageData(decoder->colorLine, bpr, row_num*bpr); } break; case gfxIFormats::RGB_A8: @@ -478,8 +478,8 @@ row_callback(png_structp png_ptr, png_bytep new_row, *cptr++ = *line++; *aptr++ = *line++; } - decoder->mFrame->SetImageData(decoder->colorLine, bpr, row_num*bpr); decoder->mFrame->SetAlphaData(decoder->alphaLine, abpr, row_num*abpr); + decoder->mFrame->SetImageData(decoder->colorLine, bpr, row_num*bpr); } break; case gfxIFormats::RGBA: @@ -495,8 +495,8 @@ row_callback(png_structp png_ptr, png_bytep new_row, *cptr++ = *line++; *aptr++ = *line++; } - decoder->mFrame->SetImageData(decoder->colorLine, bpr, row_num*bpr); decoder->mFrame->SetAlphaData(decoder->alphaLine, abpr, row_num*abpr); + decoder->mFrame->SetImageData(decoder->colorLine, bpr, row_num*bpr); } #else decoder->mFrame->SetImageData(line, bpr, row_num*bpr);