123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- #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;
- }
|