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

  1. /* Copyright 1989 GROUPE BULL -- See licence conditions in file COPYRIGHT */
  2. #include <stdio.h>
  3. #include "couche.h"    /* myEvent */
  4. #include "style.h"    /* NORMAL .. */
  5. #include "clientimage.h"    /* ClientImage pour fedor.h */
  6. #include "fedor.h"    /* fedchar */
  7.  
  8. extern   editresol;
  9. extern   Xleft, Baseliney ;
  10. extern   fedchar cartrav ;
  11. extern   ClientImage * bitmapsave ;
  12. extern   BackColor ;
  13.  
  14. static Resize(xorig,yorig,xfin,yfin,click)
  15.     int xorig,yorig,xfin,yfin ;
  16.     int click ;
  17. {    
  18.    int x1,y1,x2,y2 ;
  19.    int nouvx,nouvy ;
  20.    int x, y ;
  21.    int color ;
  22.    int ox,oy,xlim,ylim;
  23.    int bbw, bbh, newbbw, newbbh ;
  24.    int flag_modify = 0 ;
  25.  
  26.    /* make the box coordinates be ordered */
  27.    x1 = Min(xorig,xfin) ; 
  28.    y1 = Min(yorig,yfin) ;
  29.    x2 = Max(xorig,xfin) ;
  30.    y2 = Max(yorig,yfin) ;
  31.  
  32.    x2 ++ ; y2++ ;
  33.  
  34.    if (click == 2) {      /* define the new bbox */
  35.       if (Baseliney + cartrav.up < y1) {
  36.     flag_modify = 1 ;
  37.     for (y = Baseliney + cartrav.up; y < y1; y++) 
  38.       Rast_Op(cartrav.image,&cartrav.image,
  39.           Xleft,y,Xleft,y,cartrav.hsize,1,
  40.           VIDXOR,BackColor);
  41.       }
  42.       if (Baseliney + cartrav.down > y2) {
  43.     flag_modify = 1 ;
  44.     for (y = Baseliney + cartrav.down; y >= y2; y--)
  45.       Rast_Op(cartrav.image,&cartrav.image,
  46.           Xleft,y,Xleft,y,cartrav.hsize,1,
  47.           VIDXOR,BackColor);
  48.      }
  49.       if (Xleft < x1) {
  50.     flag_modify = 1 ;
  51.     for (x = Xleft; x < x1; x++)
  52.       Rast_Op(cartrav.image,&cartrav.image,
  53.           x,Baseliney + cartrav.up,x,Baseliney + cartrav.up,
  54.           1,cartrav.down-cartrav.up,
  55.           VIDXOR,BackColor);
  56.      }
  57.       if (Xleft + cartrav.hsize > x2) {
  58.     flag_modify = 1 ;
  59.     for (x = Xleft+cartrav.hsize; x >= x2; x--)
  60.       Rast_Op(cartrav.image,&cartrav.image,
  61.           x,Baseliney + cartrav.up,x,Baseliney + cartrav.up,
  62.           1,cartrav.down-cartrav.up,
  63.           VIDXOR,BackColor);
  64.      }
  65.       Xleft = x1 ;
  66.       cartrav.hsize = x2 - x1 ;
  67.       cartrav.up = y1 - Baseliney ;
  68.       cartrav.down = y2 - Baseliney ;
  69.       if (flag_modify == 0) Aff_all() ; else  MontrerCarTrav() ;
  70.    } else {               /* rescale the actual fedchar */
  71.       Rast_Off(&bitmapsave,BackColor) ;
  72.  
  73.       bbw = cartrav.hsize ;
  74.       newbbw = x2 - x1;
  75.       bbh = (cartrav.down - cartrav.up) ;
  76.       newbbh = y2 - y1;
  77.   
  78.       for ( y = 0; y < bbh; y ++ ) {
  79.      for ( x = 0; x < bbw; x ++ ) {
  80.         color = Rast_Inq(cartrav.image,Xleft+x,y+Baseliney + cartrav.up) ;
  81.         if (color != BackColor) {
  82.            ox = x*newbbw ;
  83.            oy = y*newbbh ;
  84.            xlim = how_many( ox+newbbw, bbw );
  85.            ylim = how_many( oy+newbbh, bbh );
  86.            for ( nouvy = oy/bbh; nouvy < ylim; nouvy++ ) {
  87.           for ( nouvx = ox/bbw; nouvx < xlim; nouvx++ ) {
  88.              Rast_Pix(bitmapsave,x1+nouvx,y1+nouvy,color);
  89.           }
  90.            }
  91.         }
  92.      }
  93.       }
  94.       Rast_Copy(bitmapsave,&cartrav.image);
  95.       cartrav.hsize = newbbw ;
  96.       Xleft = x1 ;
  97.       cartrav.up = y1 - Baseliney ;
  98.       cartrav.down = y2 - Baseliney ;
  99.       MontrerCarTrav() ;
  100.    }      
  101. }
  102.  
  103. Autom_resize (pev)
  104.     myEvent * pev ; 
  105. {   static int x,y ;
  106.     short           pas = (512 / editresol);
  107.     
  108.     switch (pev->type) {
  109.     case EnterZone : Afficher_boutons("SCALE","ADJUST");
  110.              x = -1 ;
  111.              break ;
  112.     case ButtonPressed : if (x == -1) {
  113.                 Afficher_boutons("ENDRECT","ENDRECT");
  114.                      x = pev->x ; 
  115.                      y = pev->y ; 
  116.                      stylesouris(FIXRECT,x,y);
  117.                  }
  118.                  break ;
  119.     case ButtonReleased : stylesouris(NORMAL,0,0);
  120.                   Afficher_boutons("SCALE","ADJUST");
  121.                   if (x != -1) {Dodo();
  122.                         Resize(convert(x),
  123.                                convert(y),
  124.                                convert(pev->x),
  125.                                convert(pev->y),
  126.                                pev->click);
  127.                   }
  128.                   x = -1 ;
  129.                   break ;
  130.     case MoveMouse : break ;                
  131.     case CloseWindow : break ;                
  132.     case LeaveZone : stylesouris(NORMAL,0,0);
  133.                  Afficher_numview(-1,-1) ; /* restaure le gris */
  134.              Afficher_boutons("","");
  135.              break ;
  136.     }
  137.