]> granicus.if.org Git - php/commitdiff
- MFB: save/restore the alpha blending mode correctly in imagefill and
authorPierre Joye <pajoye@php.net>
Fri, 19 Jan 2007 15:16:46 +0000 (15:16 +0000)
committerPierre Joye <pajoye@php.net>
Fri, 19 Jan 2007 15:16:46 +0000 (15:16 +0000)
    imagefilltoborder

ext/gd/libgd/gd.c

index a52ed9f5cea12be71d57841ea720f29856310318..2a80faa9c8e097468192ff5abb0a863d4c6500f9 100644 (file)
@@ -1802,10 +1802,8 @@ void gdImageFillToBorder (gdImagePtr im, int x, int y, int border, int color)
                return;
        }
 
-       if (im->alphaBlendingFlag) {
-               restoreAlphaBleding = 1;
-               im->alphaBlendingFlag = 0;
-       }
+       restoreAlphaBleding = im->alphaBlendingFlag;
+       im->alphaBlendingFlag = 0;
 
        if (x >= im->sx) {
                x = im->sx - 1;
@@ -1822,9 +1820,7 @@ void gdImageFillToBorder (gdImagePtr im, int x, int y, int border, int color)
                leftLimit = i;
        }
        if (leftLimit == -1) {
-               if (restoreAlphaBleding) {
-                       im->alphaBlendingFlag = 1;
-               }
+               im->alphaBlendingFlag = restoreAlphaBleding;
                return;
        }
        /* Seek right */
@@ -1869,9 +1865,7 @@ void gdImageFillToBorder (gdImagePtr im, int x, int y, int border, int color)
                        }
                }
        }
-       if (restoreAlphaBleding) {
-               im->alphaBlendingFlag = 1;
-       }
+       im->alphaBlendingFlag = restoreAlphaBleding;
 }
 
 /*
@@ -1939,7 +1933,7 @@ void gdImageFill(gdImagePtr im, int x, int y, int nc)
                do {
                        c = gdImageGetPixel(im, ix, iy);
                        if (c != oc) {
-                               return;
+                               goto done;      
                        }
                        gdImageSetPixel(im, ix, iy, nc);
                } while(ix++ < (im->sx -1));
@@ -1947,11 +1941,11 @@ void gdImageFill(gdImagePtr im, int x, int y, int nc)
                do {
                        c = gdImageGetPixel(im, ix, iy);
                        if (c != oc) {
-                               return;
+                               goto done;
                        }
                        gdImageSetPixel(im, ix, iy, nc);
                } while(ix++ < (im->sx -1));
-               return;
+               goto done;      
        }
 
        stack = (struct seg *)safe_emalloc(sizeof(struct seg), ((int)(im->sy*im->sx)/4), 1);
@@ -1992,6 +1986,8 @@ skip:                     for (x++; x<=x2 && (gdImageGetPixel(im, x, y)!=oc); x++);
                } while (x<=x2);
        }
        efree(stack);
+
+done:
        im->alphaBlendingFlag = alphablending_bak;      
 }