]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/image.cpp
[ 1578466 ] Support for custom floating panes
[wxWidgets.git] / src / common / image.cpp
index 2b43ad042cbb9c1b302962eb9653d55b2cae7beb..ff8169fff360e4911ad30857edd7468bc495548e 100644 (file)
 
 #include "wx/filefn.h"
 #include "wx/wfstream.h"
-
-#if wxUSE_XPM
-    #include "wx/xpmdecod.h"
-#endif
+#include "wx/xpmdecod.h"
 
 // For memcpy
 #include <string.h>
     #endif // wxUSE_FILE/wxUSE_FFILE
 #endif // HAS_FILE_STREAMS
 
+#if wxUSE_VARIANT
+IMPLEMENT_VARIANT_OBJECT_EXPORTED(wxImage,WXDLLEXPORT)
+#endif
+
 //-----------------------------------------------------------------------------
 // wxImage
 //-----------------------------------------------------------------------------
@@ -161,17 +162,12 @@ wxImage::wxImage( wxInputStream& stream, const wxString& mimetype, int index )
 }
 #endif // wxUSE_STREAMS
 
-wxImage::wxImage( const char** xpmData )
+wxImage::wxImage(const char* const* xpmData)
 {
     Create(xpmData);
 }
 
-wxImage::wxImage( char** xpmData )
-{
-    Create((const char**) xpmData);
-}
-
-bool wxImage::Create( const char** xpmData )
+bool wxImage::Create(const char* const* xpmData)
 {
 #if wxUSE_XPM
     UnRef();
@@ -469,13 +465,7 @@ wxImage wxImage::Scale( int width, int height, int quality ) const
         unsigned char *source_alpha = 0 ;
         unsigned char *target_alpha = 0 ;
 
-        if (M_IMGDATA->m_hasMask)
-        {
-            image.SetMaskColour( M_IMGDATA->m_maskRed,
-                                M_IMGDATA->m_maskGreen,
-                                M_IMGDATA->m_maskBlue );
-        }
-        else
+        if ( !M_IMGDATA->m_hasMask )
         {
             source_alpha = M_IMGDATA->m_alpha ;
             if ( source_alpha )
@@ -514,6 +504,14 @@ wxImage wxImage::Scale( int width, int height, int quality ) const
         }
     }
 
+    // If the original image has a mask, apply the mask to the new image
+    if (M_IMGDATA->m_hasMask)
+    {
+        image.SetMaskColour( M_IMGDATA->m_maskRed,
+                            M_IMGDATA->m_maskGreen,
+                            M_IMGDATA->m_maskBlue );
+    }
+
     // In case this is a cursor, make sure the hotspot is scaled accordingly:
     if ( HasOption(wxIMAGE_OPTION_CUR_HOTSPOT_X) )
         image.SetOption(wxIMAGE_OPTION_CUR_HOTSPOT_X,
@@ -573,7 +571,7 @@ wxImage wxImage::ResampleBox(int width, int height) const
             averaged_pixels = 0;
             sum_r = sum_g = sum_b = sum_a = 0.0;
 
-            for ( int j = src_y - scale_factor_y_2 + 1;
+            for ( int j = int(src_y - scale_factor_y/2.0 + 1);
                   j <= int(src_y + scale_factor_y_2);
                   j++ )
             {
@@ -581,7 +579,7 @@ wxImage wxImage::ResampleBox(int width, int height) const
                 if ( j < 0 || j > M_IMGDATA->m_height )
                     continue;
 
-                for ( int i = src_x - scale_factor_x_2 + 1;
+                for ( int i = int(src_x - scale_factor_x/2.0 + 1);
                       i <= src_x + scale_factor_x_2;
                       i++ )
                 {
@@ -850,7 +848,7 @@ wxImage wxImage::BlurHorizontal(int blurRadius)
                 sum_a += src_alpha[pixel_idx];
 
             // Save off the averaged data
-            dst = dst_data + x*3 + y*M_IMGDATA->m_width;
+            dst = dst_data + x*3 + y*M_IMGDATA->m_width*3;
             dst[0] = (unsigned char)(sum_r / blurArea);
             dst[1] = (unsigned char)(sum_g / blurArea);
             dst[2] = (unsigned char)(sum_b / blurArea);
@@ -1546,7 +1544,7 @@ unsigned char wxImage::GetBlue( int x, int y ) const
     return M_IMGDATA->m_data[pos+2];
 }
 
-bool wxImage::Ok() const
+bool wxImage::IsOk() const
 {
     // image of 0 width or height can't be considered ok - at least because it
     // causes crashes in ConvertToBitmap() if we don't catch it in time