]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/image.cpp
Account for the margins used by Windows around status bar text.
[wxWidgets.git] / src / common / image.cpp
index 1c527ca0d7ba891a99029acf74d50bfb9595a087..e13640c4d65378b14ccca15da3d0cff95545fe4c 100644 (file)
@@ -616,8 +616,11 @@ wxImage wxImage::ResampleBilinear(int width, int height) const
 
     double srcpixy, srcpixy1, srcpixy2, dy, dy1;
     double srcpixx, srcpixx1, srcpixx2, dx, dx1;
-    double r1, g1, b1, a1;
-    double r2, g2, b2, a2;
+
+    // initialize alpha values to avoid g++ warnings about possibly
+    // uninitialized variables
+    double r1, g1, b1, a1 = 0;
+    double r2, g2, b2, a2 = 0;
 
     for ( int dsty = 0; dsty < height; dsty++ )
     {
@@ -1279,21 +1282,30 @@ wxImage wxImage::Size( const wxSize& size, const wxPoint& pos,
 
     image.SetRGB(wxRect(), r, g, b);
 
-    wxRect subRect(pos.x, pos.y, width, height);
-    wxRect finalRect(0, 0, size.GetWidth(), size.GetHeight());
-    if (pos.x < 0)
-        finalRect.width -= pos.x;
-    if (pos.y < 0)
-        finalRect.height -= pos.y;
+    // we have two coordinate systems:
+    // source:     starting at 0,0 of source image
+    // destination starting at 0,0 of destination image
+    // Documentation says:
+    // "The image is pasted into a new image [...] at the position pos relative
+    // to the upper left of the new image." this means the transition rule is:
+    // "dest coord" = "source coord" + pos;
+
+    // calculate the intersection using source coordinates:
+    wxRect srcRect(0, 0, width, height);
+    wxRect dstRect(-pos, size);
 
-    subRect.Intersect(finalRect);
+    srcRect.Intersect(dstRect);
 
-    if (!subRect.IsEmpty())
+    if (!srcRect.IsEmpty())
     {
-        if ((subRect.GetWidth() == width) && (subRect.GetHeight() == height))
-            image.Paste(*this, pos.x, pos.y);
+        // insertion point is needed in destination coordinates.
+        // NB: it is not always "pos"!
+        wxPoint ptInsert = srcRect.GetTopLeft() + pos;
+
+        if ((srcRect.GetWidth() == width) && (srcRect.GetHeight() == height))
+            image.Paste(*this, ptInsert.x, ptInsert.y);
         else
-            image.Paste(GetSubImage(subRect), pos.x, pos.y);
+            image.Paste(GetSubImage(srcRect), ptInsert.x, ptInsert.y);
     }
 
     return image;