]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/image.cpp
listctrl header cleanup
[wxWidgets.git] / src / common / image.cpp
index 6f1a729952a4248961479cfd917279e74ea224b5..8e656989899a1d1ebee326d4aadeb8b18c5d90b3 100644 (file)
     #endif // wxUSE_FILE/wxUSE_FFILE
 #endif // HAS_FILE_STREAMS
 
+#if wxUSE_VARIANT
+IMPLEMENT_VARIANT_OBJECT_EXPORTED(wxImage,WXDLLEXPORT)
+#endif
+
 //-----------------------------------------------------------------------------
 // wxImage
 //-----------------------------------------------------------------------------
@@ -469,13 +473,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 +512,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,
@@ -809,11 +815,11 @@ wxImage wxImage::BlurHorizontal(int blurRadius)
         }
 
         dst = dst_data + y * M_IMGDATA->m_width*3;
-        dst[0] = sum_r / blurArea;
-        dst[1] = sum_g / blurArea;
-        dst[2] = sum_b / blurArea;
+        dst[0] = (unsigned char)(sum_r / blurArea);
+        dst[1] = (unsigned char)(sum_g / blurArea);
+        dst[2] = (unsigned char)(sum_b / blurArea);
         if ( src_alpha )
-            dst_alpha[y * M_IMGDATA->m_width] = sum_a / blurArea;
+            dst_alpha[y * M_IMGDATA->m_width] = (unsigned char)(sum_a / blurArea);
 
         // Now average the values of the rest of the pixels by just moving the
         // blur radius box along the row
@@ -851,11 +857,11 @@ wxImage wxImage::BlurHorizontal(int blurRadius)
 
             // Save off the averaged data
             dst = dst_data + x*3 + y*M_IMGDATA->m_width;
-            dst[0] = sum_r / blurArea;
-            dst[1] = sum_g / blurArea;
-            dst[2] = sum_b / blurArea;
+            dst[0] = (unsigned char)(sum_r / blurArea);
+            dst[1] = (unsigned char)(sum_g / blurArea);
+            dst[2] = (unsigned char)(sum_b / blurArea);
             if ( src_alpha )
-                dst_alpha[x + y * M_IMGDATA->m_width] = sum_a / blurArea;
+                dst_alpha[x + y * M_IMGDATA->m_width] = (unsigned char)(sum_a / blurArea);
         }
     }
 
@@ -927,11 +933,11 @@ wxImage wxImage::BlurVertical(int blurRadius)
         }
 
         dst = dst_data + x*3;
-        dst[0] = sum_r / blurArea;
-        dst[1] = sum_g / blurArea;
-        dst[2] = sum_b / blurArea;
+        dst[0] = (unsigned char)(sum_r / blurArea);
+        dst[1] = (unsigned char)(sum_g / blurArea);
+        dst[2] = (unsigned char)(sum_b / blurArea);
         if ( src_alpha )
-            dst_alpha[x] = sum_a / blurArea;
+            dst_alpha[x] = (unsigned char)(sum_a / blurArea);
 
         // Now average the values of the rest of the pixels by just moving the
         // box along the column from top to bottom
@@ -969,11 +975,11 @@ wxImage wxImage::BlurVertical(int blurRadius)
 
             // Save off the averaged data
             dst = dst_data + (x + y * M_IMGDATA->m_width) * 3;
-            dst[0] = sum_r / blurArea;
-            dst[1] = sum_g / blurArea;
-            dst[2] = sum_b / blurArea;
+            dst[0] = (unsigned char)(sum_r / blurArea);
+            dst[1] = (unsigned char)(sum_g / blurArea);
+            dst[2] = (unsigned char)(sum_b / blurArea);
             if ( src_alpha )
-                dst_alpha[x + y * M_IMGDATA->m_width] = sum_a / blurArea;
+                dst_alpha[x + y * M_IMGDATA->m_width] = (unsigned char)(sum_a / blurArea);
         }
     }