Blob Blame History Raw
--- gd-2.0.33/gd.c.pom	2006-11-16 14:29:57.000000000 +0100
+++ gd-2.0.33/gd.c	2006-11-16 14:30:44.000000000 +0100
@@ -3075,6 +3075,8 @@
 	/* keep them as 32bits */
 	long x, y, inc;
 	long dx, dy,tmp;
+	int w, wid, wstart;
+	int thick = im->thick;
 	if (!im->trueColor) {
 		/* TBB: don't crash when the image is of the wrong type */
 		gdImageLine(im, x1, y1, x2, y2, col);
@@ -3087,12 +3089,30 @@
           return;
 	dx = x2 - x1;
 	dy = y2 - y1;
-
 	if (dx == 0 && dy == 0) {
 		/* TBB: allow setting points */
 		gdImageSetAAPixelColor(im, x1, y1, col, 0xFF);
 		return;
 	}
+	else {
+	    double ag;
+	    if (dy < dx) 
+		ag  = cos (atan2 (dy, dx));
+	    else 
+		ag = sin (atan2 (dy, dx));
+            if (ag != 0)                                                                                                                         
+	    {                                                                                                                                  
+        	wid = thick / ag;
+	    }                                                                                                                                  
+	    else                                                                                                                                 
+	    {                                                                                                                                  
+    		wid = 1;                                                                                                                         
+	    }
+	    if (wid == 0)                                                                                                                        
+	    {                                                                                                                                  
+	          wid = 1;                                                                                                                         
+	    }
+	}
 	if (abs(dx) > abs(dy)) {
 		if (dx < 0) {
 			tmp = x1;
@@ -3109,8 +3129,11 @@
 		inc = (dy * 65536) / dx;
 		/* TBB: set the last pixel for consistency (<=) */
 		while ((x >> 16) <= x2) {
-			gdImageSetAAPixelColor(im, x >> 16, y >> 16, col, (y >> 8) & 0xFF);
-			gdImageSetAAPixelColor(im, x >> 16, (y >> 16) + 1,col, (~y >> 8) & 0xFF);
+			wstart = (y >> 16) - wid / 2;                                                                                                                 
+			for (w = wstart; w < wstart + wid; w++) {   
+			    gdImageSetAAPixelColor(im, (x >> 16) , w , col , (y >> 8) & 0xFF);
+    			    gdImageSetAAPixelColor(im, (x >> 16) , w + 1 , col, (~y >> 8) & 0xFF);
+    			}
 			x += (1 << 16);
 			y += inc;
 		}
@@ -3130,8 +3153,11 @@
 		inc = (dx * 65536) / dy;
 		/* TBB: set the last pixel for consistency (<=) */
 		while ((y>>16) <= y2) {
-			gdImageSetAAPixelColor(im, x >> 16, y >> 16, col, (x >> 8) & 0xFF);
-			gdImageSetAAPixelColor(im, (x >> 16) + 1, (y >> 16),col, (~x >> 8) & 0xFF);
+			wstart = (x >> 16) - wid / 2;                                                                                                                 
+			for (w = wstart; w < wstart + wid; w++) {
+                    	    gdImageSetAAPixelColor(im, w , y >> 16  , col, (x >> 8) & 0xFF);                   
+                    	    gdImageSetAAPixelColor(im, w + 1, y >> 16, col, (~x >> 8) & 0xFF);  
+                    	}
 			x += inc;
 			y += (1<<16);
 		}