]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/imagpng.cpp
fix for always terminating intermediate UniChar String for 4 bytes wchar_t
[wxWidgets.git] / src / common / imagpng.cpp
index 99db62ed93b5d66045e1a9479f7475e3652eef75..250fac506acf6d28c269c35c0d0d6689b403ef6b 100644 (file)
@@ -11,7 +11,7 @@
 // declarations
 // ============================================================================
 
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
 #pragma implementation "imagpng.h"
 #endif
 
@@ -160,12 +160,14 @@ struct wxPNGInfoStruct
 extern "C"
 {
 
-void PNGLINKAGEMODE _PNG_stream_reader( png_structp png_ptr, png_bytep data, png_size_t length )
+void PNGLINKAGEMODE wx_PNG_stream_reader( png_structp png_ptr, png_bytep data,
+                                          png_size_t length )
 {
     WX_PNG_INFO(png_ptr)->stream.in->Read(data, length);
 }
 
-void PNGLINKAGEMODE _PNG_stream_writer( png_structp png_ptr, png_bytep data, png_size_t length )
+void PNGLINKAGEMODE wx_PNG_stream_writer( png_structp png_ptr, png_bytep data,
+                                          png_size_t length )
 {
     WX_PNG_INFO(png_ptr)->stream.out->Write(data, length);
 }
@@ -460,25 +462,27 @@ void CopyDataFromPNG(wxImage *image,
                     case Transparency_Mask:
                         if ( IsTransparent(a) )
                         {
-                            // if we couldn't find a unique colour for the mask, we
-                            // can have real pixels with the same value as the mask
-                            // and it's better to slightly change their colour than
-                            // to make them transparent
-                            if ( r == rMask && g == gMask && b == bMask )
-                            {
-                                r++;
-                            }
-
                             *ptrDst++ = rMask;
                             *ptrDst++ = bMask;
                             *ptrDst++ = gMask;
                             break;
                         }
-                        // else: !transparent
-
-                        // must be opaque then as otherwise we shouldn't be
-                        // using the mask at all
-                        wxASSERT_MSG( IsOpaque(a), _T("logic error") );
+                        else // !transparent
+                        {
+                            // must be opaque then as otherwise we shouldn't be
+                            // using the mask at all
+                            wxASSERT_MSG( IsOpaque(a), _T("logic error") );
+
+                            // if we couldn't find a unique colour for the
+                            // mask, we can have real pixels with the same
+                            // value as the mask and it's better to slightly
+                            // change their colour than to make them
+                            // transparent
+                            if ( r == rMask && g == gMask && b == bMask )
+                            {
+                                r++;
+                            }
+                        }
 
                         // fall through
 
@@ -538,7 +542,7 @@ wxPNGHandler::LoadFile(wxImage *image,
 
     // NB: please see the comment near wxPNGInfoStruct declaration for
     //     explanation why this line is mandatory
-    png_set_read_fn( png_ptr, &wxinfo, _PNG_stream_reader);
+    png_set_read_fn( png_ptr, &wxinfo, wx_PNG_stream_reader);
 
     info_ptr = png_create_info_struct( png_ptr );
     if (!info_ptr)
@@ -665,7 +669,7 @@ bool wxPNGHandler::SaveFile( wxImage *image, wxOutputStream& stream, bool verbos
 
     // NB: please see the comment near wxPNGInfoStruct declaration for
     //     explanation why this line is mandatory
-    png_set_write_fn( png_ptr, &wxinfo, _PNG_stream_writer, NULL);
+    png_set_write_fn( png_ptr, &wxinfo, wx_PNG_stream_writer, NULL);
 
     png_set_IHDR( png_ptr, info_ptr, image->GetWidth(), image->GetHeight(), 8,
         PNG_COLOR_TYPE_RGB_ALPHA, PNG_INTERLACE_NONE,