[comp.soft-sys.andrew] new method for fontdesc? StringBoundingBox.

janssen@parc.xerox.com (Bill Janssen) (06/06/90)

I find myself using this code over and over, and think something like it
might be nice to have in the fontdesc code.  It takes a font, graphic,
and string, and returns the width and height of that string in that font
on that graphic, in pixels.  Its return value is the width, in pixels.

    long fontdesc_StringBoundingBox (font, graphic, string, width, height)
         struct fontdesc *font;
         struct graphic *graphic;
         char *string;
         int *width;
         int *height;
    {
      int w, a, d, ascent, descent, junk;
      register short *fwt, *fht;
      register char *p;
      static struct fontdesc_charInfo ci;

    #define MAX(a,b) (((a)>(b))?(a):(b))

      fwt = fontdesc_WidthTable (font, graphic);
      fht = fontdesc_HeightTable (font, graphic);
      if (fwt == NULL || fht == NULL)
        return 0;
      fontdesc_StringSize (font, graphic, string, &w, &junk);
      for (p = string, a = 0, d = 0;  *p != (char) 0;  p += 1)
        {
          fontdesc_CharSummary (font, graphic, *p, &ci);
          ascent = ci.yOriginOffset;
          descent = ci.height - ascent;
          a = MAX(a,ascent);
          d = MAX(d,descent);
        }
      *width = w;
      *height = a + d;
      return (w);
    }  

[An Andrew ToolKit view (a raster image) was included here, but could
not be displayed.]