#include <ft2build.h> | |
#include FT_FREETYPE_H | |
#include FT_BBOX_H | |
#include <time.h> /* for clock() */ | |
/* SunOS 4.1.* does not define CLOCKS_PER_SEC, so include <sys/param.h> */ | |
/* to get the HZ macro which is the equivalent. */ | |
#if defined(__sun__) && !defined(SVR4) && !defined(__SVR4) | |
#include <sys/param.h> | |
#define CLOCKS_PER_SEC HZ | |
#endif | |
static long | |
get_time( void ) | |
{ | |
return clock() * 10000L / CLOCKS_PER_SEC; | |
} | |
/* test bbox computations */ | |
#define XSCALE 65536 | |
#define XX(x) ((FT_Pos)(x*XSCALE)) | |
#define XVEC(x,y) { XX(x), XX(y) } | |
#define XVAL(x) ((x)/(1.0*XSCALE)) | |
/* dummy outline #1 */ | |
static FT_Vector dummy_vec_1[4] = | |
{ | |
#if 1 | |
XVEC( 408.9111, 535.3164 ), | |
XVEC( 455.8887, 634.396 ), | |
XVEC( -37.8765, 786.2207 ), | |
XVEC( 164.6074, 535.3164 ) | |
#else | |
{ (FT_Int32)0x0198E93DL , (FT_Int32)0x021750FFL }, /* 408.9111, 535.3164 */ | |
{ (FT_Int32)0x01C7E312L , (FT_Int32)0x027A6560L }, /* 455.8887, 634.3960 */ | |
{ (FT_Int32)0xFFDA1F9EL , (FT_Int32)0x0312387FL }, /* -37.8765, 786.2207 */ | |
{ (FT_Int32)0x00A49B7EL , (FT_Int32)0x021750FFL } /* 164.6074, 535.3164 */ | |
#endif | |
}; | |
static char dummy_tag_1[4] = | |
{ | |
FT_CURVE_TAG_ON, | |
FT_CURVE_TAG_CUBIC, | |
FT_CURVE_TAG_CUBIC, | |
FT_CURVE_TAG_ON | |
}; | |
static short dummy_contour_1[1] = | |
{ | |
3 | |
}; | |
static FT_Outline dummy_outline_1 = | |
{ | |
1, | |
4, | |
dummy_vec_1, | |
dummy_tag_1, | |
dummy_contour_1, | |
0 | |
}; | |
/* dummy outline #2 */ | |
static FT_Vector dummy_vec_2[4] = | |
{ | |
XVEC( 100.0, 100.0 ), | |
XVEC( 100.0, 200.0 ), | |
XVEC( 200.0, 200.0 ), | |
XVEC( 200.0, 133.0 ) | |
}; | |
static FT_Outline dummy_outline_2 = | |
{ | |
1, | |
4, | |
dummy_vec_2, | |
dummy_tag_1, | |
dummy_contour_1, | |
0 | |
}; | |
static void | |
dump_outline( FT_Outline* outline ) | |
{ | |
FT_BBox bbox; | |
/* compute and display cbox */ | |
FT_Outline_Get_CBox( outline, &bbox ); | |
printf( "cbox = [%.2f %.2f %.2f %.2f]\n", | |
XVAL( bbox.xMin ), | |
XVAL( bbox.yMin ), | |
XVAL( bbox.xMax ), | |
XVAL( bbox.yMax ) ); | |
/* compute and display bbox */ | |
FT_Outline_Get_BBox( outline, &bbox ); | |
printf( "bbox = [%.2f %.2f %.2f %.2f]\n", | |
XVAL( bbox.xMin ), | |
XVAL( bbox.yMin ), | |
XVAL( bbox.xMax ), | |
XVAL( bbox.yMax ) ); | |
} | |
static void | |
profile_outline( FT_Outline* outline, | |
long repeat ) | |
{ | |
FT_BBox bbox; | |
long count; | |
long time0; | |
time0 = get_time(); | |
for ( count = repeat; count > 0; count-- ) | |
FT_Outline_Get_CBox( outline, &bbox ); | |
time0 = get_time() - time0; | |
printf( "time = %5.2f cbox = [%.2f %.2f %.2f %.2f]\n", | |
((double)time0/10000.0), | |
XVAL( bbox.xMin ), | |
XVAL( bbox.yMin ), | |
XVAL( bbox.xMax ), | |
XVAL( bbox.yMax ) ); | |
time0 = get_time(); | |
for ( count = repeat; count > 0; count-- ) | |
FT_Outline_Get_BBox( outline, &bbox ); | |
time0 = get_time() - time0; | |
printf( "time = %5.2f bbox = [%.2f %.2f %.2f %.2f]\n", | |
((double)time0/10000.0), | |
XVAL( bbox.xMin ), | |
XVAL( bbox.yMin ), | |
XVAL( bbox.xMax ), | |
XVAL( bbox.yMax ) ); | |
} | |
#define REPEAT 100000L | |
int main( int argc, char** argv ) | |
{ | |
printf( "outline #1\n" ); | |
profile_outline( &dummy_outline_1, REPEAT ); | |
printf( "outline #2\n" ); | |
profile_outline( &dummy_outline_2, REPEAT ); | |
return 0; | |
} | |