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

ext/gd/libgd/gd.c

index 9983454631f29e243aac0bd51412ff7f7f410244..e09684b1e3396a17180b91fa829144c315eec3e4 100644 (file)
@@ -1795,17 +1795,15 @@ void gdImageFillToBorder (gdImagePtr im, int x, int y, int border, int color)
        int lastBorder;
        /* Seek left */
        int leftLimit = -1, rightLimit;
-       int i, restoreAlphaBleding=0;
+       int i, restoreAlphaBlending = 0;
 
        if (border < 0) {
                /* Refuse to fill to a non-solid border */
                return;
        }
 
-       if (im->alphaBlendingFlag) {
-               restoreAlphaBleding = 1;
-               im->alphaBlendingFlag = 0;
-       }
+       restoreAlphaBlending = 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 = restoreAlphaBlending;
                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 = restoreAlphaBlending;
 }
 
 /*
@@ -1908,7 +1902,7 @@ void gdImageFill(gdImagePtr im, int x, int y, int nc)
 
        /* stack of filled segments */
        /* struct seg stack[FILL_MAX],*sp = stack;; */
-       struct seg *stack;
+       struct seg *stack = NULL;
        struct seg *sp;
 
        if (!im->trueColor && nc > (im->colorsTotal -1)) {
@@ -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);
@@ -1991,7 +1985,10 @@ skip:                    for (x++; x<=x2 && (gdImageGetPixel(im, x, y)!=oc); x++);
                        l = x;
                } while (x<=x2);
        }
+
        efree(stack);
+
+done:
        im->alphaBlendingFlag = alphablending_bak;      
 }
 
@@ -2025,7 +2022,7 @@ void _gdImageFillTiled(gdImagePtr im, int x, int y, int nc)
 
        oc = gdImageGetPixel(im, x, y);
 
-       /* required! */
+/* required! */
        FILL_PUSH(y,x,x,1);
        /* seed segment (popped 1st) */
        FILL_PUSH(y+1, x, x, -1);