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

  1. /* Copyright 1989 GROUPE BULL -- See licence conditions in file COPYRIGHT */
  2. #include <stdio.h>
  3. #include "clientimage.h"    /* VID */
  4. #include "fedor.h"        /* fedchar */
  5. #include "couche.h"             /* Min, Max */
  6.  
  7. extern fedchar cartrav, carback ;
  8. extern int Baseliney,Xleft,Baseback, BackLeft ;
  9. extern ClientImage * bitmapsave ;
  10. extern fedchar carundo[] ;
  11. extern BackColor ;
  12.  
  13. void Clear() ;
  14. void Back() ;
  15. void Mouse() ;
  16. void Magnify() ;
  17. void Tileh() ;
  18. void Tilev() ;
  19. void Mirrorh() ;
  20. void Mirrorv() ;
  21. void Reflecth() ;
  22. void Reflectv() ;
  23. void NoWhite() ;
  24. void Dodo() ;
  25. void Undo() ;
  26.  
  27. #define NUNDO 2
  28. static int oldxleft[NUNDO],oldbase[NUNDO] ;
  29. static int iundo ;
  30.  
  31. void Clear(click)
  32.     int click ;
  33. {
  34.             
  35.     if (click == 1) {
  36.         Dodo();
  37.         cartrav.up = 0 ;
  38.         cartrav.down = 0 ;
  39.         cartrav.hsize = 0 ;
  40.             Rast_Off(&cartrav.image,BackColor) ;
  41.         Xleft = 0 ;
  42.     } 
  43.     if (click == 2) {
  44.         carback.up = 0 ;
  45.         carback.down = 0 ;
  46.         carback.hsize = 0 ;
  47.             Rast_Off(&carback.image,BackColor) ;
  48.         BackLeft = 0 ;
  49.     }        
  50.     MontrerCarTrav() ;
  51. }
  52.  
  53.  
  54. void Back()
  55. {     
  56.  
  57.     CopyCar(&cartrav,&carback);
  58.     BackLeft = Xleft; 
  59.     Baseback = Baseliney ;
  60.     Rast_Copy(cartrav.image,&carback.image);
  61.     Afficher_back();
  62. }
  63.  
  64.  
  65.     
  66. void Mouse()
  67. {
  68.     int x , y, w, h ;
  69.  
  70.     x = Xleft ;
  71.     y = Baseliney + cartrav.up ;
  72.     w = cartrav.hsize ;
  73.     h = cartrav.down - cartrav.up ;
  74.  
  75.     if ((x == 0) && (y == 0)) Translate(0,0,1,1) ; else
  76.     if (x == 0) Translate(0,y,1,y) ; else
  77.     if (y == 0) Translate(x,0,x,1) ;
  78.     if ((x+w >= 128)||(y+h >= 128)) {
  79.         gd_envoyermsg("MOUSE BBOX CAN'T BE CREATED");
  80.         return ;
  81.     }
  82.  
  83.     x = Xleft ;
  84.     y = Baseliney + cartrav.up ;
  85.  
  86.     Rast_Copy(cartrav.image,&carback.image);
  87.  
  88.     Rast_Op(cartrav.image,&carback.image,x,y,x+1,y,w,h,VIDOR,BackColor);
  89.     Rast_Op(cartrav.image,&carback.image,x,y,x,y+1,w,h,VIDOR,BackColor);
  90.     Rast_Op(cartrav.image,&carback.image,x,y,x-1,y,w,h,VIDOR,BackColor);
  91.     Rast_Op(cartrav.image,&carback.image,x,y,x,y-1,w,h,VIDOR,BackColor);
  92.     
  93.     BackLeft = Xleft - 1 ;
  94.     Baseback = Baseliney ;
  95.  
  96.     CopyCar(&cartrav,&carback);
  97.     carback.hsize += 2;
  98.     carback.up -= 1;
  99.     carback.down += 1;
  100.  
  101.     Afficher_back();
  102. }
  103.  
  104.  
  105.  
  106. void Magnify(numx,denx,numy,deny)
  107.   int numx,denx,numy,deny ;
  108. {
  109.    int nouvx,nouvy ;
  110.    int x, y ;
  111.    int color ;
  112.    int ox,oy,xlim,ylim;
  113.    int bbw, bbh, newbbw, newbbh ;
  114.  
  115.    Dodo();
  116.    Rast_Off(&bitmapsave,BackColor) ;
  117.  
  118.    bbw = cartrav.hsize ;
  119.    newbbw = how_many( bbw * numx, denx );
  120.    bbh = (cartrav.down - cartrav.up) ;
  121.    newbbh = how_many( bbh * numy, deny );
  122.   
  123.    if (newbbw + Xleft>128) return ;
  124.    if (Baseliney+cartrav.up+newbbh >128) return ;
  125.  
  126.    for ( y = 0; y < bbh; y ++ ) {
  127.       for ( x = 0; x < bbw; x ++ ) {
  128.      color = Rast_Inq(cartrav.image,Xleft+x,y+Baseliney + cartrav.up) ;
  129.      if (color != BackColor) {
  130.         ox = x*newbbw ;
  131.         oy = y*newbbh ;
  132.         xlim = how_many( ox+newbbw, bbw );
  133.         ylim = how_many( oy+newbbh, bbh );
  134.         for ( nouvy = oy/bbh; nouvy < ylim; nouvy++ ) {
  135.            for ( nouvx = ox/bbw; nouvx < xlim; nouvx++ ) {
  136.             Rast_Pix(bitmapsave,Xleft+nouvx,
  137.                  Baseliney + cartrav.up+nouvy,color);
  138.            }
  139.         }
  140.      }
  141.       }
  142.    }
  143.    Rast_Copy(bitmapsave,&cartrav.image);
  144.    cartrav.hsize = newbbw ;
  145.    if (Xleft+cartrav.hsize>128) cartrav.hsize = 128 - Xleft ;
  146.    cartrav.down += (newbbh - bbh) ;
  147.    if (Baseliney+cartrav.down>128) cartrav.down = 128 - Baseliney ;
  148.    
  149.    MontrerCarTrav() ;
  150.            
  151. }
  152.  
  153.  
  154. void Tileh()
  155. {
  156.     int x,y,x1,y1 ;
  157.  
  158.     Dodo() ;
  159.     y = y1 = Baseliney + cartrav.up ;
  160.     x = Xleft ;
  161.     x1 = Xleft + cartrav.hsize ;
  162.         Rast_Op(cartrav.image,&cartrav.image,x,y,x1,y1,
  163.         cartrav.hsize,cartrav.down-cartrav.up,VIDSTR,BackColor);
  164.  
  165.     cartrav.hsize *=2 ;
  166.     if (Xleft+cartrav.hsize>128) cartrav.hsize = 128 - Xleft ;
  167.  
  168.     MontrerCarTrav() ;
  169. }
  170.  
  171.  
  172.  
  173. void Tilev()
  174. {
  175.  
  176.     int x,y,x1,y1 ;
  177.  
  178.     Dodo() ;
  179.     x = x1 = Xleft ;
  180.     y = Baseliney +cartrav.up  ; 
  181.     y1 = Baseliney + cartrav.down ;
  182.     Rast_Op(cartrav.image,&cartrav.image,x,y,x1,y1,
  183.         cartrav.hsize,(cartrav.down - cartrav.up + 1),
  184.         VIDSTR,BackColor);
  185.  
  186.     cartrav.down += (cartrav.down - cartrav.up);
  187.     if (Baseliney+cartrav.down>128) cartrav.down = 128 - Baseliney ;
  188.  
  189.     MontrerCarTrav() ;
  190. }
  191.  
  192. void Mirrorh()
  193. {
  194.     
  195.     int x,y,x1,y1 ;
  196.  
  197.     Dodo() ;
  198.     y = y1 = Baseliney + cartrav.up ;
  199.     Rast_Off(&bitmapsave,BackColor) ;
  200.     for (x = Xleft, x1 = Xleft+cartrav.hsize-1; 
  201.         x < Xleft+cartrav.hsize ; x ++, x1 --)
  202.                  Rast_Op(cartrav.image,&bitmapsave,x,y,x1,y1,1,
  203.                 cartrav.down-cartrav.up,VIDSTR,BackColor);
  204.  
  205.     Rast_Copy(bitmapsave,&cartrav.image);
  206.  
  207.     MontrerCarTrav() ;
  208. }
  209.  
  210.  
  211. void Mirrorv()
  212. {
  213.     int x,y,x1,y1 ;
  214.  
  215.     Dodo() ;
  216.     x = x1 = Xleft ;
  217.     Rast_Off(&bitmapsave,BackColor) ;
  218.     for (y = Baseliney +cartrav.up-1, y1 = Baseliney + cartrav.down;
  219.         y < Baseliney+cartrav.down ; y++, y1--)
  220.                  Rast_Op(cartrav.image,&bitmapsave,x,y,x1,y1,
  221.             cartrav.hsize,1,VIDSTR,BackColor);
  222.  
  223.     Rast_Copy(bitmapsave,&cartrav.image);
  224.  
  225.     MontrerCarTrav() ;
  226. }
  227.  
  228.  
  229. void Reflecth()
  230. {
  231.     int x,y,x1,y1 ;
  232.  
  233.     Dodo() ;
  234.     y = y1 = Baseliney + cartrav.up ;
  235.     for (x = Xleft, x1 = Xleft + 2*cartrav.hsize - 1 ;
  236.         x < Xleft+cartrav.hsize ; x ++, x1 --)
  237.                  Rast_Op(cartrav.image,&cartrav.image,x,y,x1,y1,
  238.                 1,cartrav.down-cartrav.up,VIDSTR,BackColor);
  239.  
  240.     cartrav.hsize *=2 ;
  241.     if (Xleft+cartrav.hsize>128) cartrav.hsize = 128 - Xleft ;
  242.  
  243.     MontrerCarTrav() ;
  244. }
  245.  
  246.  
  247. void Reflectv()
  248. {
  249.     int x,y,x1,y1 ;
  250.  
  251.     Dodo() ;
  252.     x = x1 = Xleft ;
  253.     for (y = Baseliney +cartrav.up-1, 
  254.          y1 = Baseliney + cartrav.down +(cartrav.down-cartrav.up);
  255.         y < Baseliney+cartrav.down ; y++, y1--)
  256.                  Rast_Op(cartrav.image,&cartrav.image,x,y,x1,y1,
  257.                 cartrav.hsize,1,VIDSTR,BackColor);
  258.  
  259.     cartrav.down += (cartrav.down - cartrav.up);
  260.     if (Baseliney+cartrav.down>128) cartrav.down = 128 - Baseliney ;
  261.  
  262.     MontrerCarTrav() ;
  263. }
  264.  
  265. void NoWhite()
  266. {
  267.   int xhg,yhg,xbd,ybd,l,h,a,b ;
  268.  
  269.   xhg = Xleft ;
  270.   yhg = Baseliney+cartrav.up ;
  271.   xbd = Xleft+cartrav.hsize ;
  272.   ybd = Baseliney+cartrav.down ;
  273.  
  274.   /* on recalcule la bbox */
  275.   while ( Colonne_color(cartrav.image,xhg,yhg,ybd+1,BackColor)) xhg++ ;
  276.   Xleft = xhg ;
  277.   while ( Colonne_color(cartrav.image,xbd,yhg,ybd+1,BackColor)) xbd-- ;
  278.   cartrav.hsize = xbd - Xleft + 1 ;
  279.   while ( Ligne_color(cartrav.image,yhg,Xleft,
  280.               Xleft+cartrav.hsize,BackColor) ) yhg++ ;
  281.   cartrav.up = yhg - Baseliney;
  282.  
  283.   while ( Ligne_color(cartrav.image,ybd,Xleft,
  284.               Xleft+cartrav.hsize,BackColor) ) ybd-- ; 
  285.   cartrav.down = ybd - Baseliney + 1 ;
  286.  
  287.   Aff_all() ;        
  288. }
  289.  
  290.  
  291. void Dodo()
  292. {
  293.   static idodo = 0 ;
  294.         iundo = idodo ;
  295.     CopyCar(&cartrav,&(carundo[idodo]));
  296.     Rast_Copy(cartrav.image,&carundo[idodo].image);
  297.     oldxleft[idodo] = Xleft ;
  298.     oldbase[idodo] = Baseliney ;
  299.         if (idodo == (NUNDO - 1)) idodo = 0 ; else idodo ++ ;
  300. }
  301.  
  302.  
  303. void Undo()
  304. {
  305.     CopyCar(&(carundo[iundo]),&cartrav) ;
  306.     Rast_Copy(carundo[iundo].image,&cartrav.image) ;
  307.     Xleft = oldxleft[iundo] ;
  308.     Baseliney = oldbase[iundo] ;
  309.         if (iundo == 0) iundo = (NUNDO - 1) ; else iundo -- ;
  310.  
  311.     MontrerCarTrav();
  312. }
  313.  
  314.  
  315.