libgd/tests/gdimagefilledpolygon/bug00100.c

158 lines
3.4 KiB
C

#include <stdlib.h>
#include "gd.h"
#include "gdtest.h"
/* This is a quickie test program to show a bug in gd.
* There is a red line that is drawn across the bottom of
* the image that shouldn't be there.
*/
int
main(void)
{
gdPoint pointy[5];
gdPoint diamond[4];
int d, x, y, top, bot, left, right, r;
/* R G B */
int white = gdTrueColorAlpha(255, 255, 255, 10);
int black = gdTrueColorAlpha( 0, 0, 0, 10);
int red = gdTrueColorAlpha(255, 0, 0, 10);
int green = gdTrueColorAlpha( 0, 255, 0, 10);
int blue = gdTrueColorAlpha( 0, 0, 255, 10);
int yellow = gdTrueColorAlpha(255, 255, 0, 10);
int cyan = gdTrueColorAlpha( 0, 255, 255, 10);
int magenta = gdTrueColorAlpha(255, 0, 255, 10);
int purple = gdTrueColorAlpha(100, 0, 100, 10);
gdImagePtr im = gdImageCreateTrueColor(256, 256);
if (!im) exit(EXIT_FAILURE);
gdImageFilledRectangle(im, 0, 0, 256, 256, white);
/* M (bridge) */
top = 240;
bot = 255;
d = 30;
x = 100;
pointy[0].x = x;
pointy[0].y = top;
pointy[1].x = x+2*d;
pointy[1].y = top;
pointy[2].x = x+2*d;
pointy[2].y = bot;
pointy[3].x = x+d;
pointy[3].y = (top+bot)/2;
pointy[4].x = x;
pointy[4].y = bot;
gdImageFilledPolygon(im, pointy, 5, yellow);
/* left-facing M not on baseline */
top = 40;
bot = 70;
left = 120;
right = 180;
pointy[0].x = left;
pointy[0].y = top;
pointy[1].x = right;
pointy[1].y = top;
pointy[2].x = right;
pointy[2].y = bot;
pointy[3].x = left;
pointy[3].y = bot;
pointy[4].x = (left+right)/2;
pointy[4].y = (top+bot)/2;
gdImageFilledPolygon(im, pointy, 5, purple);
/* left-facing M on baseline */
top = 240;
bot = 270;
left = 20;
right = 80;
pointy[0].x = left;
pointy[0].y = top;
pointy[1].x = right;
pointy[1].y = top;
pointy[2].x = right;
pointy[2].y = bot;
pointy[3].x = left;
pointy[3].y = bot;
pointy[4].x = (left+right)/2;
pointy[4].y = (top+bot)/2;
gdImageFilledPolygon(im, pointy, 5, magenta);
/* left-facing M on ceiling */
top = -15;
bot = 15;
left = 20;
right = 80;
pointy[0].x = left;
pointy[0].y = top;
pointy[1].x = right;
pointy[1].y = top;
pointy[2].x = right;
pointy[2].y = bot;
pointy[3].x = left;
pointy[3].y = bot;
pointy[4].x = (left+right)/2;
pointy[4].y = (top+bot)/2;
gdImageFilledPolygon(im, pointy, 5, blue);
d = 30;
x = 150;
y = 150;
diamond[0].x = x-d;
diamond[0].y = y;
diamond[1].x = x;
diamond[1].y = y+d;
diamond[2].x = x+d;
diamond[2].y = y;
diamond[3].x = x;
diamond[3].y = y-d;
gdImageFilledPolygon(im, diamond, 4, green);
x = 180;
y = 225;
diamond[0].x = x-d;
diamond[0].y = y;
diamond[1].x = x;
diamond[1].y = y+d;
diamond[2].x = x+d;
diamond[2].y = y;
diamond[3].x = x;
diamond[3].y = y-d;
gdImageFilledPolygon(im, diamond, 4, red);
x = 225;
y = 255;
diamond[0].x = x-d;
diamond[0].y = y;
diamond[1].x = x;
diamond[1].y = y+d;
diamond[2].x = x+d;
diamond[2].y = y;
diamond[3].x = x;
diamond[3].y = y-d;
gdImageFilledPolygon(im, diamond, 4, cyan);
/* M (bridge) not touching bottom boundary */
top = 100;
bot = 150;
x = 30;
pointy[0].x = x;
pointy[0].y = top;
pointy[1].x = x+2*d;
pointy[1].y = top;
pointy[2].x = x+2*d;
pointy[2].y = bot;
pointy[3].x = x+d;
pointy[3].y = (top+bot)/2;
pointy[4].x = x;
pointy[4].y = bot;
gdImageFilledPolygon(im, pointy, 5, black);
r = gdAssertImageEqualsToFile("gdimagefilledpolygon/bug00100.png", im);
gdImageDestroy(im);
if (!r) exit(EXIT_FAILURE);
return EXIT_SUCCESS;
}