fixes #21, clip rectangle to image size
parent
8b8c82309c
commit
7f910fbcc8
41
src/gd.c
41
src/gd.c
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue