libgd/tests/gdimagestringft/gdimagestringft_bbox.c

83 lines
2.3 KiB
C

#include "gd.h"
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "gdtest.h"
#define PI 3.141592
#define DELTA (PI/8)
static int EXPECT[16][8] = {
{500, 400, 628, 400, 628, 376, 500, 376},
{492, 362, 611, 312, 601, 290, 483, 339},
{470, 330, 561, 239, 544, 221, 453, 312},
{437, 308, 486, 189, 464, 180, 414, 299},
{400, 301, 400, 173, 376, 173, 376, 301},
{363, 309, 313, 190, 291, 200, 340, 318},
{332, 331, 241, 240, 223, 257, 314, 348},
{311, 363, 192, 314, 183, 336, 302, 386},
{304, 399, 176, 399, 176, 423, 304, 423},
{312, 435, 193, 485, 203, 507, 321, 458},
{333, 465, 242, 556, 259, 574, 350, 483},
{364, 486, 315, 605, 337, 614, 387, 495},
{399, 492, 399, 620, 423, 620, 423, 492},
{434, 484, 484, 603, 506, 593, 457, 475},
{463, 464, 554, 555, 572, 538, 481, 447},
{483, 434, 602, 483, 611, 461, 492, 411},
};
int main()
{
char *path;
gdImagePtr im;
int black;
double cos_t, sin_t;
int x, y, temp;
int i, j;
int brect[8];
int error = 0;
FILE *fp;
/* disable subpixel hinting */
putenv("FREETYPE_PROPERTIES=truetype:interpreter-version=35");
path = gdTestFilePath("freetype/DejaVuSans.ttf");
im = gdImageCreate(800, 800);
gdImageColorAllocate(im, 0xFF, 0xFF, 0xFF); /* allocate white for background color */
black = gdImageColorAllocate(im, 0, 0, 0);
cos_t = cos(DELTA);
sin_t = sin(DELTA);
x = 100;
y = 0;
for (i = 0; i < 16; i++) {
if (gdImageStringFT(im, brect, black, path, 24, DELTA*i, 400+x, 400+y, "ABCDEF")) {
error = 1;
goto done;
}
for (j = 0; j < 8; j++) {
if (brect[j] < EXPECT[i][j] - 1 || brect[j] > EXPECT[i][j] + 1) {
gdTestErrorMsg("(%d, %d) (%d, %d) (%d, %d) (%d, %d) expected, but (%d, %d) (%d, %d) (%d, %d) (%d, %d)\n",
EXPECT[i][0], EXPECT[i][1], EXPECT[i][2], EXPECT[i][3],
EXPECT[i][4], EXPECT[i][5], EXPECT[i][6], EXPECT[i][7],
brect[0], brect[1], brect[2], brect[3],
brect[4], brect[5], brect[6], brect[7]);
error = 1;
goto done;
}
}
gdImagePolygon(im, (gdPointPtr)brect, 4, black);
gdImageFilledEllipse(im, brect[0], brect[1], 8, 8, black);
temp = (int)(cos_t * x + sin_t * y);
y = (int)(cos_t * y - sin_t * x);
x = temp;
}
fp = gdTestTempFp();
gdImagePng(im, fp);
fclose(fp);
done:
gdImageDestroy(im);
gdFontCacheShutdown();
free(path);
return error;
}