freetype-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[ft-devel] FT_Set_Pixel_Sizes / design height / maximum height


From: Anson
Subject: [ft-devel] FT_Set_Pixel_Sizes / design height / maximum height
Date: Wed, 15 Jun 2005 14:21:03 +0100

I re-post my question here as I could see people here are more
knowledgable about FT.

I am looking at the documentation of FT_Set_Pixel_Sizes.  It says:

 /*    The values of `pixel_width' and `pixel_height' correspond to the   */
 /*    pixel values of the _typographic_ character size, which are NOT    */
 /*    necessarily the same as the dimensions of the glyph `bitmap        */
 /*    cells'.                                                            */
 /*                                                                       */
 /*    The `character size' is really the size of an abstract square      */
 /*    called the `EM', used to design the font.  However, depending      */
 /*    on the font design, glyphs will be smaller or greater than the     */
 /*    EM.                                                                */
 /*                                                                       */
 /*    This means that setting the pixel size to, say, 8x8 doesn't        */
 /*    guarantee in any way that you will get glyph bitmaps that all fit  */
 /*    within an 8x8 cell (sometimes even far from it).                   */

I was told that such pixel width/height is usually called "design
height", like the point size we specify in WinWord.  What we want to
do is to create a "tallest/biggest" font within a user-supplied
(maximum) height.  The problem is that if we call FT_Set_Pixel_Sizes
with height 30 for instance, the maximum height of the resultant font
we get could be as high as 42 (measured on screen.)  So I have a
method DeriveDesignHeightFromMaxHeight (which works like below) to
call before actually creating the font.

While this approach seems to work, I find myself a bit silly to have
to do this.  Is there a better way to limit the maximum height of a
font to be created?

Any feedback would be very helpful!

Many thanks,
Anson

--my_funny_function_starts--

int DeriveDesignHeightFromMaxHeight(const FT_Face& aFace, int aMaxHeightInPixel)
  {
  const int boundingBoxHeightInFontUnit =
    aFace->bbox.yMax - aFace->bbox.yMin;
  int designHeightInPixels =
    ( ( aMaxHeightInPixel * aFace->units_per_EM ) /
boundingBoxHeightInFontUnit );

  const int maxHeightInFontUnit = aMaxHeightInPixel << 6;
  FT_Set_Pixel_Sizes( aFace, designHeightInPixels, designHeightInPixels );
  int currentMaxHeightInFontUnit =
    FT_MulFix(boundingBoxHeightInFontUnit, aFace->size->metrics.y_scale );
  while ( currentMaxHeightInFontUnit < maxHeightInFontUnit )
    {
    designHeightInPixels++;
    FT_Set_Pixel_Sizes( aFace, designHeightInPixels, designHeightInPixels );
    currentMaxHeightInFontUnit =
      FT_MulFix(boundingBoxHeightInFontUnit, aFace->size->metrics.y_scale );
    }
  while ( currentMaxHeightInFontUnit > maxHeightInFontUnit )
    {
    designHeightInPixels--;
    FT_Set_Pixel_Sizes( aFace, designHeightInPixels, designHeightInPixels );
    currentMaxHeightInFontUnit =
      FT_MulFix(boundingBoxHeightInFontUnit, aFace->size->metrics.y_scale );
    }
  return designHeightInPixels;
  }

--my_funny_function_ends--




reply via email to

[Prev in Thread] Current Thread [Next in Thread]