X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3ca6a5f04692678cd2d9f3ea0843fc3f5a0b254f..147043343ea6b36fd07f786ab4c5d2d6f6be09e6:/src/common/imagjpeg.cpp?ds=sidebyside diff --git a/src/common/imagjpeg.cpp b/src/common/imagjpeg.cpp index f985604631..2f5cd0a432 100644 --- a/src/common/imagjpeg.cpp +++ b/src/common/imagjpeg.cpp @@ -20,20 +20,28 @@ #include "wx/defs.h" -#if wxUSE_LIBJPEG +#if wxUSE_IMAGE && wxUSE_LIBJPEG #include "wx/imagjpeg.h" #include "wx/bitmap.h" #include "wx/debug.h" #include "wx/log.h" #include "wx/app.h" -extern "C" -{ -#ifdef __WATCOMC__ + +// NB: Some compilers define boolean type in Windows headers (e.g. Watcom C++). +// This causes a conflict with jmorecfg.h header from libjpeg, so we have +// to make sure libjpeg won't try to define boolean itself. This is done by +// defining HAVE_BOOLEAN. +#if defined(__WXMSW__) && (defined(__MWERKS__) || defined(__WATCOMC__)) #define HAVE_BOOLEAN + #include #endif + +extern "C" +{ #include "jpeglib.h" } + #include "wx/filefn.h" #include "wx/wfstream.h" #include "wx/intl.h" @@ -50,10 +58,6 @@ extern "C" #endif #endif -#ifdef __WXMSW__ -#include -#endif - //----------------------------------------------------------------------------- // wxJPEGHandler //----------------------------------------------------------------------------- @@ -102,7 +106,7 @@ METHODDEF(void) my_skip_input_data ( j_decompress_ptr cinfo, long num_bytes ) { my_src_ptr src = (my_src_ptr) cinfo->src; - while (num_bytes > (long)src->pub.bytes_in_buffer) + while (num_bytes > (long)src->pub.bytes_in_buffer) { num_bytes -= (long) src->pub.bytes_in_buffer; src->pub.fill_input_buffer(cinfo); @@ -198,8 +202,9 @@ bool wxJPEGHandler::LoadFile( wxImage *image, wxInputStream& stream, bool verbos /* If we get here, the JPEG code has signaled an error. * We need to clean up the JPEG object, close the input file, and return. */ - if (verbose) + if (verbose) wxLogError(_("JPEG: Couldn't load - file is probably corrupted.")); + (cinfo.src->term_source)(&cinfo); jpeg_destroy_decompress(&cinfo); if (image->Ok()) image->Destroy(); return FALSE; @@ -306,12 +311,12 @@ bool wxJPEGHandler::SaveFile( wxImage *image, wxOutputStream& stream, bool verbo if (!verbose) cinfo.err->output_message=NULL; /* Establish the setjmp return context for my_error_exit to use. */ - if (setjmp(jerr.setjmp_buffer)) + if (setjmp(jerr.setjmp_buffer)) { /* If we get here, the JPEG code has signaled an error. * We need to clean up the JPEG object, close the input file, and return. */ - if (verbose) + if (verbose) wxLogError(_("JPEG: Couldn't save image.")); jpeg_destroy_compress(&cinfo); return FALSE; @@ -357,7 +362,7 @@ bool wxJPEGHandler::DoCanRead( wxInputStream& stream ) { unsigned char hdr[2]; - stream.Read(&hdr, 2); + stream.Read(hdr, 2); stream.SeekI(-2, wxFromCurrent); return (hdr[0] == 0xFF && hdr[1] == 0xD8); }