Annotation of pmsdk/samples/vectfont/vf05.c, revision 1.1

1.1     ! root        1: /*--------------------------------------------
        !             2:    VF05.C -- Display "Hello, world" in circle
        !             3:   --------------------------------------------*/
        !             4: 
        !             5: #define INCL_GPI
        !             6: #include <os2.h>
        !             7: #include <math.h>
        !             8: #include <stdlib.h>
        !             9: #include "vectfont.h"
        !            10: 
        !            11: VOID Display_Rotate (HPS hps, LONG cxClient, LONG cyClient)
        !            12:      {
        !            13:      static CHAR szText[] = "Hello, world! " ;
        !            14:      static LONG cbText = sizeof szText - 1L ;
        !            15:      static LONG alWidthTable[256] ;
        !            16:      double      ang, angCharWidth, angChar ;
        !            17:      FONTMETRICS fm ;
        !            18:      GRADIENTL   gradl ;
        !            19:      INT         iChar ;
        !            20:      LONG        lCircum, lRadius, lTotWidth, lCharRadius, cyChar ;
        !            21:      POINTL      ptl ;
        !            22: 
        !            23:                          // Create the font and get font metrics
        !            24: 
        !            25:      CreateVectorFont (hps, LCID_MYFONT, "Tms Rmn") ;
        !            26:      GpiSetCharSet (hps, LCID_MYFONT) ;
        !            27: 
        !            28:      GpiQueryFontMetrics (hps, (LONG) sizeof fm, &fm) ;
        !            29: 
        !            30:                          // Find circle dimensions and scale font
        !            31: 
        !            32:      lRadius = min (cxClient / 4, cyClient / 4) ;
        !            33:      lCircum = (LONG) (2 * PI * lRadius) ;
        !            34:      cyChar  = fm.lMaxBaselineExt * lRadius / fm.lMaxAscender ;
        !            35: 
        !            36:      ScaleFontToBox (hps, cbText, szText, lCircum, cyChar) ;
        !            37: 
        !            38:                          // Obtain width table and total width
        !            39: 
        !            40:      GpiQueryWidthTable (hps, 0L, 256L, alWidthTable) ;
        !            41: 
        !            42:      for (lTotWidth = 0, iChar = 0 ; iChar < (INT) cbText ; iChar ++)
        !            43:           lTotWidth += alWidthTable [szText [iChar]] ;
        !            44: 
        !            45:      ang = PI / 2 ;      // Initial angle for first character
        !            46: 
        !            47:      for (iChar = 0 ; iChar < (INT) cbText ; iChar++)
        !            48:           {
        !            49:                               // Set character angle
        !            50: 
        !            51:           angCharWidth = 2 * PI * alWidthTable [szText [iChar]] / lTotWidth ;
        !            52: 
        !            53:           gradl.x = (LONG) (lRadius * cos (ang - angCharWidth / 2 - PI / 2)) ;
        !            54:           gradl.y = (LONG) (lRadius * sin (ang - angCharWidth / 2 - PI / 2)) ;
        !            55: 
        !            56:           GpiSetCharAngle (hps, &gradl) ;
        !            57: 
        !            58:                               // Find position for character and display it
        !            59: 
        !            60:           angChar = atan2 ((double) alWidthTable [szText [iChar]] / 2,
        !            61:                            (double) lRadius) ;
        !            62: 
        !            63:           lCharRadius = (LONG) (lRadius / cos (angChar)) ;
        !            64:           angChar += ang - angCharWidth / 2 ;
        !            65: 
        !            66:           ptl.x = (LONG) (cxClient / 2 + lCharRadius * cos (angChar)) ;
        !            67:           ptl.y = (LONG) (cyClient / 2 + lCharRadius * sin (angChar)) ;
        !            68: 
        !            69:           GpiCharStringAt (hps, &ptl, 1L, szText + iChar) ;
        !            70: 
        !            71:           ang -= angCharWidth ;
        !            72:           }
        !            73:      GpiSetCharSet (hps, LCID_DEFAULT) ;          // Clean up
        !            74:      GpiDeleteSetId (hps, LCID_MYFONT) ;
        !            75:      }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.