Devices now have a couple of new font options. One option is to have the system download its own fonts to the device driver. The other option is to let the system manage text queries and strings while letting the device actually render the images.

Download Fonts

Two things must be done to tell the graphics subsystem that your device driver wants to be font-download enabled:

Once this has been done, the graphics subsystem sends all text output to the device driver via pfnTextBlt.

  APIRET APIENTRY pfnTextBlt(PTEXTBLTINFO ptbi, ULONG hddc);
  TEXTBLTINFO

     ULONG          ulLength        sizeof(TEXTBLTINFO)
     ULONG          flOptions       00
     ULONG          lGlyphCnt       Count of Glyphs to render
     PLONG          pGlyphIndices   pointer to glyph indicies
     ULONG          ulFGMix         Foreground mix mode
     ULONG          ulBGMix         Background mix mode
     ULONG          ulFGColor       Foreground text color
     ULONG          ulBGColor       Background text color
     PBMAPINFO      pDstBmapInfo    Destination bitmap information
     PDEVFONTINFO   pDevFntInfo     Device font information
     ULONG          ulClpCnt        Non-Clipping Drivers Ignore
     PBLTRECT       abrClipRects    Non-Clipping Drivers Ignore
     PPOINTL        aptlSrcOrg      Clipping Drivers Ignore
     PBLTRECT       abrDst          Clipping Drivers Ignore .ulXExt & ulYExt

  DEVFONTINFO

    ULONG          ulFntCnt        Maximum glyphs contained in this font
    ULONG          fFontInfo       Flags
    ULONG          ulEngTag        Renderer Tag - i.e. 'GRE'
    ULONG          ulUniqueFntID   Unique font ID
    ULONG          ulMaxHeight     Font maximum height
    ULONG          ulMaxWidth      Font maximum width
    PGHBTBL        pghbTbl         Pointer to glyph high-byte table see below
    ULONG          ulHalfWidth     N/A
    CHAR           szGlyphlist[16] Glyph list name (ie. PM383)
    ULONG          ulReserved1     N/A
    ULONG          ulReserved2     N/A

  DFI_FIXED_FONT         Font is a fixed-width font
  DFI_DBCS_FONT          Font is a DBCS font

  GRETAG "GRE_"          Font is a PM system style font
  WINTAG "WIN_"          Font is a WIN system style font

The Glyph Table is designed to be a dynamic 2-byte font table. As an example, lets take a PM383 font with three cached entries, index 34, 36 and 301:

       GHBTBL
   ÚÄÄÄÄÄÄÄÄÄÄÄÄ¿                                   ÚÄÄÄÄÄÄÄÄÄÄÄÄ¿
 0 ³ pglbtbl1   ³ÄÄÄÄÄ¿                        ÚÄÄÄ>³ A Space    ³
   ÃÄÄÄÄÄÄÄÄÄÄÄÄ´     ³                        ³    ÃÄÄÄÄÄÄÄÄÄÄÄÄ´
 1 ³ pglbtbl2   ³ÄÄ¿  ³                        ³    ³ B Space    ³
   ÃÄÄÄÄÄÄÄÄÄÄÄÄ´  ³  ³                        ³    ÃÄÄÄÄÄÄÄÄÄÄÄÄ´
 2 ³            ³  ³  ³                        ³    ³ C Space    ³
   ÃÄÄÄÄÄÄÄÄÄÄÄÄ´  ³  ³                        ³    ÃÄÄÄÄÄÄÄÄÄÄÄÄ´
 n ³            ³  ³  ³                        ³    ³ Pad        ³
   ÀÄÄÄÄÄÄÄÄÄÄÄÄÙ  ³  ³                        ³    ÃÄÄÄÄÄÄÄÄÄÄÄÄ´
                   ³  ³                        ³    ³ Bitmapinfo ³
                   ³  ³           GLBTBL       ³    ÀÄÄÄÄÄÄÄÄÄÄÄÄÙ
                   ³  ³       ÚÄÄÄÄÄÄÄÄÄÄÄÄ¿   ³
                   ³  ÃÄÄÄ>34 ³ pGlyphInfo ³ÄÄÄÙ         ÚÄÄÄÄÄÄÄÄÄÄÄÄ¿
                   ³  ³       ÃÄÄÄÄÄÄÄÄÄÄÄÄ´       ÚÄÄÄÄ>³ A Space    ³
                   ³  ³    35 ³            ³       ³     ÃÄÄÄÄÄÄÄÄÄÄÄÄ´
                   ³  ³       ÃÄÄÄÄÄÄÄÄÄÄÄÄ´       ³     ³ B Space    ³
                   ³  ÀÄÄÄ>36 ³ pGlyphInfo ³ÄÄÄÄÄÄÄÙ     ÃÄÄÄÄÄÄÄÄÄÄÄÄ´
                   ³          ÃÄÄÄÄÄÄÄÄÄÄÄÄ´             ³ C Space    ³
                   ³       37 ³            ³             ÃÄÄÄÄÄÄÄÄÄÄÄÄ´
                   ³          ÀÄÄÄÄÄÄÄÄÄÄÄÄÙ             ³ Pad        ³
                   ³                                     ÃÄÄÄÄÄÄÄÄÄÄÄÄ´
                   ³             GLBTBL                  ³ Bitmapinfo ³
                   ³          ÚÄÄÄÄÄÄÄÄÄÄÄÄ¿             ÀÄÄÄÄÄÄÄÄÄÄÄÄÙ
                   ³       44 ³            ³
                   ³          ÃÄÄÄÄÄÄÄÄÄÄÄÄ´                  ÚÄÄÄÄÄÄÄÄÄÄÄÄ¿
                   ÀÄÄÄÄÄÄ>45 ³ pGlyphInfo ³ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ>³ A Space    ³
                              ÃÄÄÄÄÄÄÄÄÄÄÄÄ´                  ÃÄÄÄÄÄÄÄÄÄÄÄÄ´
                           46 ³            ³                  ³ B Space    ³
                              ÃÄÄÄÄÄÄÄÄÄÄÄÄ´                  ÃÄÄÄÄÄÄÄÄÄÄÄÄ´
                           47 ³            ³                  ³ C Space    ³
                              ÀÄÄÄÄÄÄÄÄÄÄÄÄÙ                  ÃÄÄÄÄÄÄÄÄÄÄÄÄ´
                                                              ³ Pad        ³
                                                              ÃÄÄÄÄÄÄÄÄÄÄÄÄ´
                                                              ³ Bitmapinfo ³
                                                              ÀÄÄÄÄÄÄÄÄÄÄÄÄÙ
  GHBTBL

    PGLBTBL         pglbTbl[1]      Up to 256 entries per table


  GLBTBL
    PGLYPHINFO      pGlyphInfo[1]   Up to 256 entries per table


  GLYPHINFO

    char      bAspace
    char      bBspace
    char      bCspace
    char      bPad
    BMAPINFO  bmapinfo

Device Fonts Handled By The System

Here again, the DS_DEVICE_FONTS flag needs to be set and the pfnTextBlt function must be hooked out and handled by the device driver. In order for the system to handle font queries and text positioning of the device font, the system will query the fonts and font attributes for all the supported device fonts.

The system will need to know what fonts the driver wants supported. The system will query the driver the first time a device font request is initiated via the following new dispatch entry:

   APIRET APIENTRY QueryDeviceFontMetrics(HDC             hdc,
                                          PDEVFONTMETRICS abDFM,
                                          ULONG           lDFMFlags,
                                          ULONG           hddc,
                                          ULONG           ulFunN)

   return: Count of device fonts


   DEVFONTMETRICS

      ULONG         flOptions               Device font metrics options
      PFOCAFONT     pFoca                   pointer to focafont information
      PVOID         pUniPanhose             pointer to panhose info for uni fonts
      char          achFileName[260]        if pFoca is null then font file name to use
      PSZ           pszFullFamilyName       pointer family name null if pFoca null
      PSZ           pszFullFaceName         pointer to face name null if pFoca null
      char          achGlyphListName[16]    glyph list name
      PFN           pfnDevQueryCodePage     pointer to code page functionality (defaulted to PM383 )
      LONG          lDevMatch               Devices lmatch number (negative)

   Options for flOptions of DEVFONTMETRICS

   DEVFONT_DEFAULT           selects which font in the array of DEVFONTMETRICS
                             is the device's default font.


[Back: Dithering / Color Mapping Interface]
[Next: OS2_PM_DRV_ENABLE: Subfunction 0Eh - QueryDeviceSurface - Topics]