Blame src/tools/test_bbox.c

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