![]()  | 
![]()  | 
![]()  | 
![]()  | 
![]()  | 
This version of this document is no longer maintained. For the latest documentation, see http://www.qnx.com/developers/docs. | 
Calculate the width of a char string of multibyte UTF-8 characters
#include <photon/Pf.h>
int PfTextWidthBytes( const char *font,
                      const char *str,
                      int len );
ph
PfTextWidthBytes() is a convenience function that calculates the width of the given string in the given font, using the formula:
extent.lr.x - min(extent.ul.x, 0) + 1
PfTextWidthChars() is similar, but you give it the number of characters in the string rather than the number of bytes.
The width of the string, or 0 if an error occurred.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <Ap.h>
#include <Ph.h>
#include <Pt.h>
#include <errno.h>
int fnDrawCanvas( PtWidget_t * ptsWidget,
                  PhTile_t * ptsDamage );
int main(int argc, char *argv[])
{   PtArg_t args[8];
    PhPoint_t win_size, pntPOS, pntDIM;
    short nArgs = 0;
    PtWidget_t * pwndMain = NULL, * pobjRaw = NULL;
    PtInit (NULL);
    //  set base pwndMain parms
    win_size.x = 450;
    win_size.y = 600;
    PtSetArg(&args[0],Pt_ARG_DIM, &win_size, 0);
    // window title = name  of program
    PtSetArg(&args[1],Pt_ARG_WINDOW_TITLE, "PfTextWidth", 0);
    pwndMain = PtCreateWidget (PtWindow, Pt_NO_PARENT, 2, args);
    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);
    PtMainLoop ();
    return(0);
}
int fnDrawCanvas( PtWidget_t * ptsWidget, PhTile_t * ptsDamage )
{   PhRect_t rect;
    PhPoint_t tsPos = {0, 0};
    PgColor_t old;
    int iLen = 0;
    char szHelvetica12[MAX_FONT_TAG];
    // find our canvas
    PtCalcCanvas(ptsWidget, &rect);
    PtSuperClassDraw(PtBasic, ptsWidget, ptsDamage);
    old = PgSetStrokeColor(Pg_BLACK);
    // draw text
    tsPos.x = 10 + rect.ul.x;
    tsPos.y = 10 + rect.ul.y;
    PgSetFont(PfGenerateFontName("Helvetica", 0, 12,
              szHelvetica12));
    PgSetTextColor(Pg_BLACK);
    PgDrawText("Hello", 5, &tsPos, 0);
    if((iLen = PfTextWidthBytes(szHelvetica12,
                                "Hello", 0)) == 0)
      return(Pt_CONTINUE);
    PgDrawILine(tsPos.x, tsPos.y, tsPos.x + iLen, tsPos.y);
    PgSetStrokeColor(old);
    return( Pt_CONTINUE );
}
Photon
| Safety: | |
|---|---|
| Interrupt handler | No | 
| Signal handler | No | 
| Thread | No | 
PfGenerateFontName(), PfTextWidthChars()
Fonts chapter of the Photon Programmer's Guide
![]()  | 
![]()  | 
![]()  | 
![]()  |