fixes #21, clip rectangle to image size

master
Pierre Joye 2013-04-16 21:40:31 +02:00
parent 8b8c82309c
commit 7f910fbcc8
1 changed files with 27 additions and 14 deletions

View File

@ -1,12 +1,14 @@
/* $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"
@ -2176,29 +2178,40 @@ BGD_DECLARE(void) gdImageFilledRectangle (gdImagePtr im, int x1, int y1, int x2,
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);