Annotation of embedaddon/php/ext/gd/libgd/gd_arc.c, revision 1.1.1.1

1.1       misho       1: #if HAVE_GD_BUNDLED
                      2: # include "gd.h"
                      3: #else
                      4: # include <gd.h>
                      5: #endif
                      6: 
                      7: #include "gd_intern.h"
                      8: 
                      9: 
                     10: /**
                     11:  * Integer Ellipse functions (gdImageEllipse and gdImageFilledEllipse)
                     12:  * Function added by Pierre-Alain Joye 02/08/2003 (paj@pearfr.org)
                     13:  * See the ellipse function simplification for the equation
                     14:  * as well as the midpoint algorithm.
                     15:  */
                     16: 
                     17: void gdImageEllipse(gdImagePtr im, int mx, int my, int w, int h, int c)
                     18: {
                     19:        int x=0,mx1=0,mx2=0,my1=0,my2=0;
                     20:        long aq,bq,dx,dy,r,rx,ry,a,b;
                     21: 
                     22:        a=w>>1;
                     23:        b=h>>1;
                     24:        gdImageSetPixel(im,mx+a, my, c);
                     25:        gdImageSetPixel(im,mx-a, my, c);
                     26:        mx1 = mx-a;my1 = my;
                     27:        mx2 = mx+a;my2 = my;
                     28: 
                     29:        aq = a * a;
                     30:        bq = b * b;
                     31:        dx = aq << 1;
                     32:        dy = bq << 1;
                     33:        r  = a * bq;
                     34:        rx = r << 1;
                     35:        ry = 0;
                     36:        x = a;
                     37:        while (x > 0){
                     38:                if (r > 0) {
                     39:                        my1++;my2--;
                     40:                        ry +=dx;
                     41:                        r  -=ry;
                     42:                }
                     43:                if (r <= 0){
                     44:                        x--;
                     45:                        mx1++;mx2--;
                     46:                        rx -=dy;
                     47:                        r  +=rx;
                     48:                }
                     49:                gdImageSetPixel(im,mx1, my1, c);
                     50:                gdImageSetPixel(im,mx1, my2, c);
                     51:                gdImageSetPixel(im,mx2, my1, c);
                     52:                gdImageSetPixel(im,mx2, my2, c);
                     53:        }
                     54: }
                     55: 
                     56: void gdImageFilledEllipse (gdImagePtr im, int mx, int my, int w, int h, int c)
                     57: {
                     58:        int x=0,mx1=0,mx2=0,my1=0,my2=0;
                     59:        long aq,bq,dx,dy,r,rx,ry,a,b;
                     60:        int i;
                     61:        int old_y1,old_y2;
                     62: 
                     63:        a=w>>1;
                     64:        b=h>>1;
                     65: 
                     66:        for (x = mx-a; x <= mx+a; x++) {
                     67:                gdImageSetPixel(im, x, my, c);
                     68:        }
                     69: 
                     70:        mx1 = mx-a;my1 = my;
                     71:        mx2 = mx+a;my2 = my;
                     72: 
                     73:        aq = a * a;
                     74:        bq = b * b;
                     75:        dx = aq << 1;
                     76:        dy = bq << 1;
                     77:        r  = a * bq;
                     78:        rx = r << 1;
                     79:        ry = 0;
                     80:        x = a;
                     81:        old_y2=-2;
                     82:        old_y1=-2;
                     83:        while (x > 0){
                     84:                if (r > 0) {
                     85:                        my1++;my2--;
                     86:                        ry +=dx;
                     87:                        r  -=ry;
                     88:                }
                     89:                if (r <= 0){
                     90:                        x--;
                     91:                        mx1++;mx2--;
                     92:                        rx -=dy;
                     93:                        r  +=rx;
                     94:                }
                     95:                if(old_y2!=my2){
                     96:                        for(i=mx1;i<=mx2;i++){
                     97:                                gdImageSetPixel(im,i,my1,c);
                     98:                        }
                     99:                }
                    100:                if(old_y2!=my2){
                    101:                        for(i=mx1;i<=mx2;i++){
                    102:                                gdImageSetPixel(im,i,my2,c);
                    103:                        }
                    104:                }
                    105:                old_y2 = my2;
                    106:                old_y1 = my1;
                    107:        }
                    108: }
                    109: 
                    110: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>