IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Nov 27, 2005, 9:22:01 PM (21 years ago)
Author:
eugene
Message:

fixed up RotFont stuff

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/kapa/graph/PSRotFont.c

    r5610 r5611  
    11# include "Ximage.h"
    2 # include "alphabet.h"
     2# define NROTCHARS 256
    33
    44/* writes commands to print string at location and angle using
     
    66void PSRotText (FILE *f, int x, int y, char *string, int pos, double angle) {
    77
    8   char *c, *segment, basefont[64];
     8  char *c, *segment, basename[64], *currentname;
    99  int i, N, code;
    1010  int dX, dY, Xoff, Yoff, X, Y, Nseg, NSEG, YoffBase;
    11   double cs, sn, fscale;
    12   int basesize;
    13    
     11  double cs, sn, fscale, currentscale;
     12  int basesize, currentsize;
     13  RotFont *currentfont;
     14 
     15  currentname = GetRotFont (&currentsize);
     16  currentfont = GetRotFontData (&currentscale);
     17  strcpy (basename, currentname);
     18  basesize = currentsize;
     19
    1420  /* strip off leading whitespace */
    1521  for (c = string; (*c == ' ') || (*c == '\t'); c++);
     
    2430  if (!strcmp (currentname, "symbol")) fscale = 1.2;
    2531  dX = fscale*RotStrlen (c);
    26   dY = activefont[65].ascent;
     32  dY = currentfont[65].ascent;
    2733 
    2834  /* apply appropriate offset */
     
    4450  Y = y - Xoff*sn + Yoff*cs;
    4551
    46   basesize = currentsize;
    47   strcpy (basefont, currentname);
    48 
    49   PSSetFont (f, currentsize);
     52  PSSetFont (f, currentname, currentsize);
    5053  fprintf (f, "gsave\n");
    5154  fprintf (f, " %d %d moveto %f rotate\n", X, Y, -angle);
     
    6164  for (i = 0; i < strlen (c); i++) {
    6265    N = (int)(c[i]);
    63     if ((N < 0) || (N >= NROT)) continue;
     66    if ((N < 0) || (N >= NROTCHARS)) continue;
    6467
    6568    /* check for special characters */
     
    6972        PSDumpRotSegment (f, segment, &Nseg);
    7073        SetRotFont (currentname, (int)(0.8*currentsize));
    71         Yoff = 0.75*activescale*dY;
     74        currentfont = GetRotFontData (&currentscale);
     75        Yoff = 0.75*currentscale*dY;
    7276        fprintf (f, "0 %d rmoveto\n", Yoff);
    7377        YoffBase += Yoff;
    74         PSSetFont (f, currentsize);
     78        PSSetFont (f, currentname, currentsize);
    7579        continue;
    7680      }
     
    7983        PSDumpRotSegment (f, segment, &Nseg);
    8084        SetRotFont (currentname, (int)(0.8*currentsize));
    81         Yoff = -0.5*activescale*dY;
     85        currentfont = GetRotFontData (&currentscale);
     86        Yoff = -0.5*currentscale*dY;
    8287        fprintf (f, "0 %d rmoveto\n", Yoff);
    8388        YoffBase += Yoff;
    84         PSSetFont (f, currentsize);
     89        PSSetFont (f, currentname, currentsize);
    8590        continue;
    8691      }
     
    8994        PSDumpRotSegment (f, segment, &Nseg);
    9095        SetRotFont (currentname, basesize);
     96        currentfont = GetRotFontData (&currentscale);
    9197        fprintf (f, "0 %d rmoveto\n", -YoffBase);
    9298        YoffBase = 0;
    93         PSSetFont (f, currentsize);
     99        PSSetFont (f, currentname, currentsize);
    94100        continue;
    95101      }
     
    118124        if (c[i+1] == 'h') {
    119125          SetRotFont ("helvetica", currentsize);
    120           PSSetFont (f, currentsize);
     126          currentfont = GetRotFontData (&currentscale);
     127          PSSetFont (f, currentname, currentsize);
    121128        }
    122129        if (c[i+1] == 't') {
    123130          SetRotFont ("times", currentsize);
    124           PSSetFont (f, currentsize);
     131          currentfont = GetRotFontData (&currentscale);
     132          PSSetFont (f, currentname, currentsize);
    125133        }
    126134        if (c[i+1] == 'c') {
    127135          SetRotFont ("courier", currentsize);
    128           PSSetFont (f, currentsize);
     136          currentfont = GetRotFontData (&currentscale);
     137          PSSetFont (f, currentname, currentsize);
    129138        }
    130139        if (c[i+1] == 's') {
    131140          SetRotFont ("symbol", currentsize);
    132           PSSetFont (f, currentsize);
     141          currentfont = GetRotFontData (&currentscale);
     142          PSSetFont (f, currentname, currentsize);
    133143        }
    134144        i++;
     
    144154  fprintf (f, "stroke grestore\n");
    145155  free (segment);
    146   SetRotFont (basefont, basesize);
     156  SetRotFont (basename, basesize);
    147157}
    148158
     
    154164}
    155165
    156 void PSSetFont (FILE *f, int size) {
    157   if (!strcmp (currentname, "times"))
     166void PSSetFont (FILE *f, char *name, int size) {
     167  if (!strcmp (name, "times"))
    158168    fprintf (f, "/Times-Roman findfont %d scalefont setfont\n", size);
    159   if (!strcmp (currentname, "helvetica"))
     169  if (!strcmp (name, "helvetica"))
    160170    fprintf (f, "/Helvetica findfont %d scalefont setfont\n", size);
    161   if (!strcmp (currentname, "courier"))
     171  if (!strcmp (name, "courier"))
    162172    fprintf (f, "/Courier findfont %d scalefont setfont\n", size);
    163   if (!strcmp (currentname, "symbol"))
     173  if (!strcmp (name, "symbol"))
    164174    fprintf (f, "/Symbol findfont %d scalefont setfont\n", size);
    165175}
Note: See TracChangeset for help on using the changeset viewer.