Esempio n. 1
0
static void
readttf_kern(Font *fnt)
{
  register kern *nk;
  register ttfinfo *ti;
  TT_Kern_0_Pair* pairs0;
  TT_Error error;
  unsigned int i, j;

  
  if ((error = TT_Get_Kerning_Directory(face, &directory)))
    oops("Cannot get kerning directory (error code = 0x%x).", error);
  
  if (directory.nTables == 0)
    return;

  for (i = 0; i < directory.nTables; i++)
  {
    if ((error = TT_Load_Kerning_Table(face, i)))
      oops("Cannot load kerning table (error code = 0x%x).", error);

    switch (directory.tables[i].format)
    {
    case 0:
      pairs0 = directory.tables[i].t.kern0.pairs;
      for (j = 0; j < directory.tables[i].t.kern0.nPairs; j++, pairs0++)
      {
        ti = findglyph(pairs0->left, fnt->charlist);
        if (ti == NULL)
          warning("kern char not found");
        else
        {
          nk = newkern();
          nk->succ = findglyph(pairs0->right, fnt->charlist)->adobename;
          nk->delta = transform(pairs0->value * 1000 / fnt->units_per_em, 0,
                                fnt->efactor, fnt->slant);
          nk->next = ti->kerns;
          ti->kerns = nk;
        }
      }
      return;   /* we stop after the first format 0 kerning table */

    default:
      break;
    }
  }
  return;
}
Esempio n. 2
0
static void image_ttf_make(INT32 args)
{
   int col=0, i=0;
   struct object *o;
   TT_Error res;
   TT_Face face;

   if (sp[-args].type!=T_STRING)
      Pike_error("Image.TTF(): illegal argument 1\n");

   res=TT_Open_Collection(engine, sp[-args].u.string->str, col, &face);
   if (res) my_tt_error("Image.TTF()","",res);
   while(! TT_Load_Kerning_Table( face, (TT_UShort)(i++) ) );

   pop_n_elems(args);

   o=clone_object(image_ttf_face_program,0);
   ((struct image_ttf_face_struct*)o->storage)->face=face;

   push_object(o);
}