Commits

Pierre Joye committed 7f910fb

fixes #21, clip rectangle to image size

  • Participants
  • Parent commits 8b8c823

Comments (0)

Files changed (1)

 /* $Id$ */
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
 
 #include <stdio.h>
 #include <math.h>
 #include <string.h>
 #include <stdlib.h>
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 /* 2.03: don't include zlib here or we can't build without PNG */
 #include "gd.h"
 #include "gdhelpers.h"
         int color)
 {
 	int x, y;
-	/* Nick Atty: limit the points at the edge.  Note that this also
-	   nicely kills any plotting for rectangles completely outside the
-	   window as it makes the tests in the for loops fail */
-	if (x1 < 0)
-		x1 = 0;
-	if (x1 > gdImageSX (im))
-		x1 = gdImageSX (im);
-	if (y1 < 0)
-		y1 = 0;
-	if (y1 > gdImageSY (im))
-		y1 = gdImageSY (im);
+
+	if (x1 == x2 && y1 == y2) {
+		gdImageSetPixel(im, x1, y1, color);
+		return;
+	}
 
 	if (x1 > x2) {
 		x = x1;
 		x1 = x2;
 		x2 = x;
 	}
+
 	if (y1 > y2) {
 		y = y1;
 		y1 = y2;
 		y2 = y;
 	}
 
+	if (x1 < 0) {
+		x1 = 0;
+	}
+
+	if (x2 >= gdImageSX(im)) {
+		x2 = gdImageSX(im) - 1;
+	}
+
+	if (y1 < 0) {
+		y1 = 0;
+	}
+
+	if (y2 >= gdImageSY(im)) {
+		y2 = gdImageSY(im) - 1;
+	}
+
 	for (y = y1; (y <= y2); y++) {
 		for (x = x1; (x <= x2); x++) {
 			gdImageSetPixel (im, x, y, color);