GreRealizeFont is called by the graphics engine to allow the presentation driver to satisfy logical font requests. The example below shows a typical font-matching algorithm for the presentation driver:

/* If the face name is empty, the application is requesting the default font.  Return NO_MATCH.*/

   if(Font->szFacename = NULL)
   {
      return(0);
   }

/* If the match number is positive, an engine font is required.  Return NO_MATCH.              */

   if(Font->lfMatch > 0)
   {
      return(0);
   }

/* If the match number is negative, a device font is required.  The presentation driver should  */
/* return the font if it exists; otherwise return NO_MATCH.                                     */

   if(Font->lMatch < 0)
   {
     if(font with required lMatch exists)
     {
     /* Check the fsSelection flags and szFacename.  If the font is unable to satisfy these     */
     /* flags, return NO_MATCH.  Otherwise, return the device font handle.                      */

       if((FATTR_FONTUSE_OUTLINE && font not outline)
         ||(FATTR_FONTUSE_TRANSFORMABLE && font not outline) ||(szFacename does not match font))
          return(0);
       else
          return(device_font_handle);
     }
     else
     {
     /* Attempt metrics match (i.e. all metrics including szFaceName, usCodePage, lAveCharWidth */
     /* and lMaxBaselineExt).  If match exists, return device font handle.  Otherwise, return   */
     /* NO_MATCH.                                                                               */

       if(metric match exists)
       {
          return(device_font_handle);
       }
       else
          return(0);
     }
   }

/* The match number is zero, the presentation driver should search for a font with the          */
/* specified metrics, and if an exact match exists, return the device font handle. Otherwise,   */
/* return NO_MATCH.                                                                             */

if(Font->lMatch = 0)
{
  if(metrics match exists - see above)
  {
  /* Check the fsSelection flags.  If the font is unable to satisfy these flags, return          */
  /* NO_MATCH.  Otherwise, return the device font handle.                                        */

    if((FATTR_FONTUSE_OUTLINE && font not outline)
    ||(FATTR_FONTUSE_TRANSFORMABLE && font not outline)
       return(0);
    else
       return(device_font_handle);
  }
else
   return(0);
}

Graphics Engine Simulation


[Back: GreRealizeFont - Parameters]
[Next: GreRealizeFont - Topics]