![]()  | 
![]()  | 
![]()  | 
![]()  | 
Draw multiline text in an area
int PgDrawMultiTextArea( char *text,
                         int len,
                         PhRect_t *canvas,
                         int text_flags,
                         int canvas_flags,
                         int linespacing );
int PgDrawMultiTextAreaCx( void *dc,
                           char *text,
                           int len,
                           PhRect_t *canvas,
                           int text_flags,
                           int canvas_flags,
                           int linespacing );
ph
These functions draw multiline text within an area called a canvas, using the font specified by a previous call to PgSetFont().
These functions call PgExtentMultiText() to compute the extent of the text. Text can be aligned within the text-extent rectangle, and the text-extent rectangle itself can be aligned within the canvas.
#include <stdio.h>
#include <stdlib.h>
#include <Pt.h>
void MultiTextDraw( PtWidget_t *widget,
                    PhTile_t *damage )
{
    PhRect_t canvas;
    int r;
    char Helvetica14b[MAX_FONT_TAG];
    char s[100] = " clever \n is \n not he who wins \n \
but he who \n wins \n easily ";
    // Find the size of the canvas on which the text
    // will be drawn
    PtCalcCanvas(widget, &canvas);
    // Paint the canvas red
    PgSetFillColor( Pg_RED );
    PgDrawRect( &canvas, Pg_DRAW_FILL );
    // Set the fill color, text color, and font.
    PgSetFillColor( Pg_BLUE );
    PgSetTextColor( Pg_WHITE );
    if(PfGenerateFontName("Helvetica", PF_STYLE_BOLD, 14,
                          Helvetica14b) == NULL) {
        perror("Unable to find font");
    } else {
        PgSetFont( Helvetica14b );
    }
    // Draw multiline text. Note the text-extent and
    // canvas flags, and the linespacing.
    r = PgDrawMultiTextArea( s, 0, &canvas,
          Pg_TEXT_RIGHT|Pg_BACK_FILL,
          Pg_TEXT_CENTER|Pg_TEXT_MIDDLE, 10 );
    if ( r == -1 )
        fprintf( stderr, "\n Error." );
}
int main(int argc, char **argv)
{
    PtWidget_t *base;
    PtArg_t args[2];
    PhDim_t dim;
    // Initialize Photon and create a base window
    if (PtInit(NULL) == -1)
       exit(EXIT_FAILURE);
    dim.w = 250; dim.h = 250;
    PtSetArg( &args[0], Pt_ARG_DIM, &dim, 0 );
    if ((base = PtCreateWidget(PtWindow, Pt_NO_PARENT,
                               1, args)) == NULL)
      PtExit(EXIT_FAILURE);
    // Create a raw widget parented to the base window
    PtSetArg( &args[1], Pt_ARG_RAW_DRAW_F,
              (long) MultiTextDraw, 0 );
    PtCreateWidget( PtRaw, base, 2, args );
    // Realize the base window. This will realize the
    // raw widget, which in turn will draw itself with
    // the MultiTextDraw() function above.
    PtRealizeWidget(base);
    PtMainLoop();
    return EXIT_SUCCESS;
}
This code produces the following output:

Photon
| Safety: | |
|---|---|
| Interrupt handler | No | 
| Signal handler | No | 
| Thread | No | 
PgDrawString*(), PgDrawText*(), PgDrawTextArea*(), PgExtentMultiText*(), PgSetFillColor*(), PgSetFont*(), PgSetTextColor*(), PgSetTextDither*(), PgSetTextTransPat*(), PgSetTextXORColor*(), PgSetUnderline*(), PhRect_t
“Text” in the Raw Drawing and Animation chapter of the Photon Programmer's Guide
![]()  | 
![]()  | 
![]()  | 
![]()  |