[Previous] [Contents] [Index] [Next]

PfFindFont()

Generate an ID for a font

Synopsis:

FontID * PfFindFont( uchar_t const * pkucDescription,
                     uint32_t const kulFlags,
                     uint32_t const kulSize );

Library:

ph

Description:

PfFindFont() generates a font ID with the supplied parameter attributes:

pkucDescription
The foundry name of the requested font, e.g. Helvetica.
kulFlags
Flags that identify the requested font type. The following can be ORed together:
kulSize
The point size requested, e.g. 12.

Returns:

Returns NULL on failure, a FontID pointer on success. The FontID pointer is used to interface with the other calls in this API.

Errors:

ENOMEM
There wasn't enough memory to perform the desired request.

The errno global variable may also be set to one of the values generated by PfQueryFonts().

Examples:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <Ap.h>
#include <Ph.h>
#include <Pt.h>
#include <errno.h>

PtWidget_t * pwndMain = NULL, * pbtn = NULL, * pobjRaw = NULL;
char * pcText = "AaBbCcXxYyZz";
char ** ppcData = NULL;

int fnDrawCanvas( PtWidget_t * ptsWidget,
                  PhTile_t * ptsDamage );

#define FALSE 0

static FontID * gs_ptsID = NULL;

int main(int argc, char *argv[])
{   PtArg_t args[4];
    PhPoint_t win_size, pntPOS, pntDIM;
    short nArgs = 0;

    PtInit (NULL);

    ppcData = argv;

    if(argc < 2)
    {  printf(
      "Usage: pf2id descriptive_name, e.g. pf2id Helvetica\n");
       exit(EXIT_FAILURE);
    }

    //  set base pwndMain parms
    win_size.x = 450;
    win_size.y = 450;

    // window title = name  of program
    PtSetArg(&args[0],Pt_ARG_DIM, &win_size, 0);
    PtSetArg(&args[1],Pt_ARG_WINDOW_TITLE, "Pf2", 0);

    pwndMain = PtCreateWidget (PtWindow, Pt_NO_PARENT, 2, args);

    if(argc > 2)
      pcText = argv[2];

    nArgs = 0;
    pntDIM.x = 80;
    pntDIM.y = 20;
    PtSetArg(&args[0], Pt_ARG_DIM, &pntDIM, 0);
    nArgs++;
    pntPOS.x = 100;
    pntPOS.y = 10;
    PtSetArg(&args[1], Pt_ARG_POS, &pntPOS, 0);
    nArgs++;
    PtSetArg(&args[2], Pt_ARG_TEXT_STRING, pcText, NULL);
    nArgs++;

    // Find the font we desire.
    gs_ptsID = PfFindFont(argv[1], 0, 12);

    PtSetArg(&args[3], Pt_ARG_TEXT_FONT, 
             PfConvertFontID(gs_ptsID), NULL);
    nArgs++;
    pbtn = PtCreateWidget(PtButton, pwndMain, nArgs, args);
    PtRealizeWidget(pbtn);

    pntPOS.y = 100;
    pntPOS.x = 75;
    pntDIM.x = 300;
    pntDIM.y = 300;
    PtSetArg(&args[0], Pt_ARG_POS, &pntPOS, 0); 
    PtSetArg(&args[1], Pt_ARG_DIM, &pntDIM, 0);
    PtSetArg(&args[2], Pt_ARG_RAW_DRAW_F, fnDrawCanvas, 0L);
    pobjRaw = PtCreateWidget(PtRaw, pwndMain, 3, args);

    (void) PtRealizeWidget(pwndMain);

    printf("Size:  %d\n", PfFontSize(gs_ptsID));
    printf("Descriptive Name:  %s\n",
           PfFontDescription(gs_ptsID));

    if(PfFontFlags(gs_ptsID) & PF_SCALABLE)
      printf("Scalable font.\n");
    else if(PfFontFlags(gs_ptsID) & PF_BITMAP)
           printf("Bitmap font.\n");

    PtMainLoop ();

    PfFreeFont(gs_ptsID);  // Free the FontID resources.
}

int fnDrawCanvas( PtWidget_t * ptsWidget, PhTile_t * ptsDamage )
{   
    char ** argv = (char **)ppcData;
    PhRect_t rect;
    PhPoint_t pnt;
    PhRect_t tsExtent;
    short n = 0;
    char * pc = pcText;
    PgColor_t old;
    PhPoint_t pnt2;
    PhPoint_t tsPos = {0, 0};

    // find our canvas
    PtCalcCanvas(pobjRaw, &rect);

    old = PgSetStrokeColor(Pg_BLACK);

    PfExtentText(&tsExtent, &tsPos, 
                 PfConvertFontID(gs_ptsID), pcText, 
                 strlen(pcText));

    // draw text
    pnt.x = 10 + rect.ul.x;
    pnt.y = 100 + rect.ul.y;

    PgSetFont(PfConvertFontID(gs_ptsID));
    PgSetTextColor(Pg_BLACK);
    PgDrawText(pcText, strlen(pcText), &pnt, 0);

    pnt.x -= 10;
    pnt2.x = pnt.x + tsExtent.lr.x + 20;
    pnt2.y = pnt.y;

    PgSetStrokeColor(Pg_RED);

    PgDrawLine(&pnt, &pnt2);

    PgSetStrokeColor(old);

    return( Pt_CONTINUE );
}

Classification:

Photon

Safety:
Interrupt handler No
Signal handler No
Thread No

See also:

PfConvertFontID(), PfDecomposeStemToID(), PfFontDescription(), PfFontFlags(), PfFontSize(), PfFreeFont(), PfGenerateFontName(),

Fonts chapter of the Photon Programmer's Guide


[Previous] [Contents] [Index] [Next]