/* This procedure shows how to adjust font size
   and center a text in a frame
   */
   
/******* This should fit a box of 7.6 inches by 3 inches **********/
{ xprint.i}

/*=============== Parameters ===========================================================*/
DEF VAR fontName       AS CHAR    NO-UNDO INITIAL "TAHOMA".
DEF VAR maxHeightValue AS DECIMAL NO-UNDO INITIAL 1.15.        /* Max height of area */
DEF VAR myText         AS CHAR    NO-UNDO.
DEF VAR areaWidth      AS DECIMAL NO-UNDO INITIAL 2.1.        /* area width in inches */

myText = "This text fits in the area. Powered by vpxPrint from 4GL.".
/*======================================================================================*/

DEF VAR i AS INT NO-UNDO.
DEF VAR r AS INT NO-UNDO.
DEF VAR v AS INT NO-UNDO.

DEF VAR areaWidthInPixels AS INT NO-UNDO.
DEF VAR mySize            AS INT NO-UNDO.
DEF VAR numberOflines     AS INT NO-UNDO initial 1.               /* note */
DEF VAR F                 AS CHAR NO-UNDO.

DEF VAR M AS MEMPTR.
DEF VAR L AS CHAR.

DEF VAR myFont as CHAR NO-UNDO.

SET-SIZE(M) = 256.

        
DEF STREAM O.
DEF VAR maxW AS INT NO-UNDO.

F = SESSION:TEMP-DIRECTORY + "fontsize.xpr".

OUTPUT STREAM O TO VALUE(F).



PUT STREAM O CONTROL "<preview>".

RUN getPrinterRes(OUTPUT R).	   /* to get the current printer resolution.*/
 
DO areaWidth = 0.5 TO 8:                          /* loop 2 to 7 " */
            areaWidthInPixels = areaWidth * R.			       /* number of pixels */
            
            
            do mySize = 50 to 6 by -1:		/*	starting font size is 30.*/

                    myFont = fontName + "," + string(mySize) + ",B".
                
                   RUN getTextHeight( myText, myFont, areaWidthInPixels, OUTPUT numberOflines).   /* I = # lines */
                   RUN getLPI(myFont, M).
                   L = GET-STRING(M, 1).
        
                   IF numberOflines / DECIMAL(L)  <= maxHeightValue THEN
                        LEAVE.
                   END.
            
            
    PUT STREAM O control
        "<#1>"
        "<C+10><P12><AT=-0.2><I><FGCOLOR=BLUE>Font=" myFONT ", width=" areaWidth '"' "</I><FGCOLOR=BLACK><=#1>"          /* for debugging purpose */
        "<AT=,+" areaWidth "><AT=+" maxheightValue "><RECT#1><#2><FRAME#1>"
         "<F" fontName "><P"  string(mySize)  "><B><ADJUST=LPI><C1>"
        "<=#1>".

DEF VAR printLine   AS CHAR NO-UNDO.
DEF VAR aWord       AS CHAR NO-UNDO.

    /* Center line process
       =================*/
    printLine = "".
    DO I = 1 TO NUM-ENTRIES(myText, " "):
        aWord = ENTRY(I, myText, " ").
        IF aWord = "" THEN NEXT.

        RUN getTextWidth (printLine + " " + aWord, myFont, OUTPUT V).
        IF V > areaWidthInPixels THEN  DO:     /* We have to write the previous line */
            IF printLine = "" THEN             /* This word does not fit in the width !!! */
                ASSIGN printLine = aWord
                       aWord = "".                
               
            PUT STREAM O UNFORMATTED
                            "<CENTER=#2>" printLine SKIP.
            printLine = "".
            END.

        printLine = LEFT-TRIM(printLine + " " + aWord, " ").

        END.

    IF printLine > "" THEN                  /* For the remaining of text */
            PUT STREAM O UNFORMATTED "<CENTER=#2>" printLine SKIP.

    PUT STREAM O UNFORMATTED "<=#2>" SKIP "<R-0.3>".
        

    END.

SET-SIZE(M) = 0.
OUTPUT STREAM O close.

RUN printFile( F ).



