1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <math.h>
#include "gd.h"
#define DEGTORAD(x) ( (x) * (2.0 * 3.14159265) / 360.0 )
void
doerr (FILE * err, const char *msg)
{
if (err)
{
fprintf (err, "%s\n", msg);
fflush (err);
}
}
void
dowheel (gdImagePtr im, int color, char *fontfile,
int fontsize, double angle, int x, int y, char *string)
{
int brect[8];
FILE *err;
double curang;
char *cp;
err = fopen ("err.out", "a");
doerr (err, "------------- New fontwheel --------------");
doerr (err, fontfile);
doerr (err, string);
doerr (err, "------------------------------------------");
for (curang = 0.0; curang < 360.0; curang += angle)
{
/* The case of newlines is taken care of in the gdImageStringTTF call */
#if defined(OLDER_GD)
cp =
gdImageStringTTF (im, brect, color, fontfile, fontsize,
DEGTORAD (curang), x, y, string);
#else
cp =
gdImageStringFT (im, brect, color, fontfile, fontsize,
DEGTORAD (curang), x, y, string);
#endif
if (cp)
doerr (err, cp);
}
fclose (err);
}
void
dolines (gdImagePtr im, int color, double incr, int x, int y, int offset,
int length)
{
double curang;
double angle;
double x0, x1, y0, y1;
for (curang = 0.0; curang < 360.0; curang += incr)
{
angle = curang * (2.0 * 3.14159265) / 360.0;
x0 = cos (angle) * offset + x;
x1 = cos (angle) * (offset + length) + x;
y0 = sin (angle) * offset + y;
y1 = sin (angle) * (offset + length) + y;
gdImageLine (im, x0, y0, x1, y1, color);
}
}
void
dotest (char *font, int size, double incr,
int w, int h, char *string, const char *filename)
{
gdImagePtr im;
FILE *out;
int bg;
int fc;
int lc;
int xc = w / 2;
int yc = h / 2;
im = gdImageCreate (w, h);
bg = gdImageColorAllocate (im, 0, 0, 0);
gdImageFilledRectangle (im, 1, 1, w - 1, h - 1, bg);
fc = gdImageColorAllocate (im, 255, 192, 192);
lc = gdImageColorAllocate (im, 192, 255, 255);
out = fopen (filename, "wb");
dowheel (im, fc, font, size, incr, xc, yc, string);
dolines (im, lc, incr, xc, yc, 20, 120);
#if defined(HAVE_LIBPNG)
gdImagePng (im, out);
#elif defined(HAVE_LIBJPEG)
gdImageJpeg (im, out, -1);
#endif
fclose (out);
}
int
main (int argc, char **argv)
{
#if defined(HAVE_LIBPNG)
dotest ("times", 16, 20.0, 400, 400, ".....Hello, there!",
"fontwheeltest1.png");
dotest ("times", 16, 30.0, 400, 400, ".....Hello, there!",
"fontwheeltest2.png");
dotest ("arial", 16, 45.0, 400, 400, ".....Hello, there!",
"fontwheeltest3.png");
dotest ("arial", 16, 90.0, 400, 400, ".....Hello, there!",
"fontwheeltest4.png");
#elif defined(HAVE_LIBJPEG)
dotest ("times", 16, 20.0, 400, 400, ".....Hello, there!",
"fontwheeltest1.jpeg");
dotest ("times", 16, 30.0, 400, 400, ".....Hello, there!",
"fontwheeltest2.jpeg");
dotest ("arial", 16, 45.0, 400, 400, ".....Hello, there!",
"fontwheeltest3.jpeg");
dotest ("arial", 16, 90.0, 400, 400, ".....Hello, there!",
"fontwheeltest4.jpeg");
#else
fprintf (stderr, "no PNG or JPEG support\n");
#endif
return 0;
}
|