home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / xfedor.zip / XFree86 / src / xfedor / otherfont.c < prev    next >
C/C++ Source or Header  |  1999-03-02  |  5KB  |  194 lines

  1. /* Copyright 1989 GROUPE BULL -- See licence conditions in file COPYRIGHT */
  2. #include <stdio.h>
  3. #include "clientimage.h"  /* VIDSTR ,ClientImage.. */
  4. #include "fedor.h"      /* fedchar .. MAXFONTCARD */
  5. #include "math.h"      /* sqrt, ceil */
  6. #include "couche.h"       /* how_many */
  7.  
  8. extern int First, Last ;
  9. extern fedchar chartab[MAXFONTCARD] ;
  10.  
  11. extern int nf_garb ;    /* pour l'animation */
  12. extern ClientImage * bitmapsave ;  /* Bold,Scale et Slant */
  13. extern int BackColor, CurColor ;
  14.  
  15. Scale(numx,denx,numy,deny)
  16.     int numx,denx,numy,deny ;
  17. {
  18.    int nouvx,nouvy ;
  19.    int x, y ;
  20.    int color ;
  21.    int ox,oy,xlim,ylim;
  22.    int bbw, bbh, newbbw, newbbh ;
  23.    int code ;
  24.  
  25.   for (code=First; (code<=Last) && (code < MAXFONTCARD); code++) 
  26.     if (chartab[code].hsize>0)
  27.       {
  28.     Rast_Off(&bitmapsave,BackColor) ;
  29.     bbw = chartab[code].hsize ;
  30.     newbbw = how_many( bbw * numx, denx );
  31.     bbh = (chartab[code].down - chartab[code].up) ;
  32.     newbbh = how_many( bbh * numy, deny );
  33.   
  34.     if (newbbw > 128) return ;
  35.     if (newbbh > 128) return ;
  36.  
  37.     for ( y = 0; y < bbh; y ++ ) {
  38.        for ( x = 0; x < bbw; x ++ ) {
  39.           color = Rast_Inq(chartab[code].image,x,y) ;
  40.           if (color != 0) {     /* Hack 1n n1 */
  41.          ox = x*newbbw ;
  42.          oy = y*newbbh ;
  43.          xlim = how_many( ox+newbbw, bbw );
  44.          ylim = how_many( oy+newbbh, bbh );
  45.          for ( nouvy = oy/bbh; nouvy < ylim; nouvy++ ) {
  46.             for ( nouvx = ox/bbw; nouvx < xlim; nouvx++ ) {
  47.                Rast_Pix(bitmapsave,nouvx,nouvy,CurColor);
  48.             }
  49.          }
  50.           }
  51.        }
  52.     }
  53.     chartab[code].hsize = newbbw ;
  54.     chartab[code].down += (newbbh - bbh) ;
  55.     chartab[code].hincr += (newbbw - bbw) ;
  56.  
  57.     Rast_Free(&chartab[code].image) ;
  58.     Rast_Init(&chartab[code].image,
  59.           chartab[code].hsize,
  60.           chartab[code].down-chartab[code].up,0);
  61.  
  62.     Rast_Op_n1(bitmapsave,&chartab[code].image,0,0,
  63.         0,0,
  64.         chartab[code].hsize,
  65.         chartab[code].down-chartab[code].up,
  66.         VIDSTR,BackColor);
  67.       }
  68.   ShowDoIt(First,Last);
  69. }
  70.  
  71. Slant()
  72. {
  73.     register int h,        /* hauteur du car */
  74.              n,ni,    /* nb de decalages */
  75.              b,        /* hauteur de base d'un decalage */
  76.              r ;    /* surplus a repartir */
  77.              
  78.     int code, dec, x,x1,x2 ;
  79.  
  80.     /* color traite les caracteres voulus */
  81.     for (code=First; (code<=Last) && (code < MAXFONTCARD); code++) 
  82.         if (chartab[code].hsize>0) {
  83.         h = chartab[code].down-chartab[code].up ;if(h==1)continue ;
  84.         ni = n = (int) ceil(sqrt((double)h)) ; 
  85.         b = h/n ;
  86.         r = h%n ;
  87.         Rast_Off(&bitmapsave,BackColor) ;
  88.         dec = 0 ;
  89.  
  90.         do {    register int bprim ;
  91.  
  92.            dec += (bprim = b + (r-- > 0)) ;
  93.  
  94.            Rast_Op_1n(chartab[code].image,&bitmapsave,
  95.             0, h - dec,
  96.             ni - n ,
  97.             h - dec,
  98.             chartab[code].hsize,
  99.             bprim,VIDSTR,CurColor);
  100.         } while (n--) ;    
  101.  
  102.         x2 = chartab[code].hsize + ni - 1 ;
  103.         while (Colonne_color(bitmapsave,x2--,0,h,BackColor)) ;x2+=2;
  104.         x1 = 0 ;
  105.         while (Colonne_color(bitmapsave,x1++,0,h,BackColor)) ;x1--;
  106.         x = x2 - x1 ;
  107.         if (chartab[code].hsize < x) { 
  108.           chartab[code].hincr += x-chartab[code].hsize ;
  109.           chartab[code].hsize = x ;
  110.  
  111.           Rast_Free(&chartab[code].image) ;
  112.           Rast_Init(&chartab[code].image,
  113.                 chartab[code].hsize,
  114.                 chartab[code].down-chartab[code].up,0);
  115.         }
  116.         Rast_Op_n1(bitmapsave,&chartab[code].image,
  117.             x1,0,0,0,
  118.             chartab[code].hsize,
  119.             chartab[code].down-chartab[code].up,
  120.             VIDSTR,BackColor);
  121.         }
  122.       ShowDoIt(First,Last);
  123. }
  124.  
  125.  
  126.  Kill()
  127. {
  128.     int code ;
  129.  
  130.     /* on efface les caracteres voulus */
  131.     for (code=First; (code<=Last) && (code < MAXFONTCARD); code++) 
  132.         if (chartab[code].hsize>0) {
  133.         Rast_Free(&chartab[code].image) ;
  134.         chartab[code].hsize = 0 ;
  135.         }
  136.       ShowDoIt(First,Last);
  137. }
  138.  
  139.  Bold()
  140. {
  141.     int code ;
  142.     int i,j ;
  143.  
  144.     /* on sauve le car, on libere, on ralloue plus large et on reecrit
  145.         plus large. seul hsize change */
  146.     for (code=First; (code<=Last) && (code < MAXFONTCARD); code++) 
  147.         if (chartab[code].hsize>0) {
  148.         Rast_Off(&bitmapsave,BackColor) ;
  149.             Rast_Op_1n(chartab[code].image,&bitmapsave,
  150.             0,0,0,0,
  151.             chartab[code].hsize,
  152.             chartab[code].down-chartab[code].up,
  153.             VIDSTR,CurColor);
  154.         chartab[code].hsize += 1 ; ;
  155.         chartab[code].hincr += 1 ;
  156.         Rast_Free(&chartab[code].image) ;
  157.         Rast_Init(&chartab[code].image,
  158.                 chartab[code].hsize,
  159.                 chartab[code].down-chartab[code].up,0);
  160.             Rast_Op_n1(bitmapsave,&chartab[code].image,
  161.             0,0,0,0,
  162.             chartab[code].hsize - 1,
  163.             chartab[code].down-chartab[code].up,
  164.             VIDSTR,BackColor);
  165.             Rast_Op_n1(bitmapsave,&chartab[code].image,
  166.             0,0,1,0,
  167.             chartab[code].hsize - 1,
  168.             chartab[code].down-chartab[code].up,
  169.             VIDOR,BackColor);
  170.         }
  171.       ShowDoIt(First,Last);
  172. }
  173.  
  174. Anim(delay)
  175. /* on fait une animation dans la poubelle :
  176.    on envoi les caracteres entre First et Last jusqu'a un event click */
  177. {
  178.     int code,temp ;
  179.  
  180.     code = First ;
  181.     do {
  182.         if (chartab[code].hsize>0) {
  183.                w_cleararea(nf_garb, 0,0, 128,128);
  184.            w_bitblt(nf_garb,chartab[code].image,
  185.             0,0,chartab[code].hsize,
  186.             chartab[code].down-chartab[code].up,0,0);
  187.                for(temp=0 ; temp<delay; temp++) w_flush() ;
  188.         }
  189.         code ++ ;
  190.         if (code > Last) code = First ;
  191.       } while (w_click());
  192.     afficher_car();       
  193. }
  194.