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

  1. /* Copyright 1989 GROUPE BULL -- See licence conditions in file COPYRIGHT */
  2. #include <stdio.h>
  3. #include "couche.h"
  4. #include "clientimage.h" 
  5. #include "fedor.h"
  6. #include "style.h"    /* NORMAL .. */
  7.  
  8. extern fedchar cartrav;
  9. extern Xleft,Baseliney ;
  10. extern editresol ;
  11. extern ClientImage * bitmapsave ;
  12. extern int nf_grille ;
  13. extern BackColor ;
  14.  
  15. static TranslBox(click,x1,y1,x2,y2,x,y)
  16.     int click ;
  17.     int x1,y1,x2,y2,x,y ;
  18. {
  19.     int xhg,yhg,xbd,ybd,l,h,a,b ;
  20.     int i,j , minx1x2, miny1y2 ;
  21.  
  22.     if (cartrav.hsize==0){
  23.         gd_envoyermsg("NOTHING TO DO.");
  24.         return ;
  25.     }
  26.     l = (x1-x2>0)?(x1-x2):(x2-x1) ;l++ ;
  27.     h = (y1-y2>0)?(y1-y2):(y2-y1) ;h++ ;
  28.     a = Min(x-(x2-x1),x);
  29.     b = Min(y-(y2-y1),y);
  30.     if (click == 1) /* Copy */
  31.         Rast_Op(cartrav.image,&cartrav.image,
  32.             Min(x1,x2),Min(y1,y2),
  33.             a,b,l,h,VIDSTR,BackColor); else
  34.     if (click == 2) { /* Move : on doit passer par une sauvegarde */
  35.         Rast_Op(cartrav.image,&bitmapsave,
  36.             Min(x1,x2),Min(y1,y2),
  37.             0,0,
  38.             l,h,VIDSTR,BackColor);
  39.         minx1x2 = Min(x1,x2) ;
  40.         miny1y2 = Min(y1,y2) ;
  41.         for (i=minx1x2; i<minx1x2+l; i++)
  42.           for (j=miny1y2; j<miny1y2+h; j++)
  43.             Rast_Pix(cartrav.image,i,j,BackColor);
  44.         Rast_Op(bitmapsave,&cartrav.image,
  45.             0,0,a,b,l,h,VIDSTR,BackColor);
  46.     }
  47.  
  48.     xhg = Min(Xleft,a);
  49.     yhg = Min(Baseliney+cartrav.up,b);
  50.     xbd = Max(Xleft+cartrav.hsize,Max(x-(x2-x1),x));
  51.     ybd = Max(Baseliney+cartrav.down,Max(y-(y2-y1),y));
  52.  
  53.     /* on recalcule la bbox */
  54.     while ( Colonne_color(cartrav.image,xhg,yhg,ybd+1,BackColor)) xhg++ ;
  55.     Xleft = xhg ;
  56.     while ( Colonne_color(cartrav.image,xbd,yhg,ybd+1,BackColor)) xbd-- ;
  57.     cartrav.hsize = xbd - Xleft +1 ;
  58.     if (cartrav.hsize > 128) cartrav.hsize = 128 ; /* Hack */
  59.     while ( Ligne_color(cartrav.image,yhg,Xleft,
  60.                 Xleft+cartrav.hsize,BackColor) ) yhg++ ;
  61.     cartrav.up = yhg - Baseliney;
  62.  
  63.     while ( Ligne_color(cartrav.image,ybd,Xleft,
  64.                 Xleft+cartrav.hsize,BackColor) ) ybd-- ; 
  65.     cartrav.down = ybd - Baseliney + 1 ;
  66.     if (cartrav.down - cartrav.up > 128) cartrav.down = 128 + cartrav.up; /* Hack */
  67.  
  68.     MontrerCarTrav() ;
  69. }
  70.  
  71. Autom_cutap (pev)
  72.     myEvent * pev ; 
  73. {  static int x,y,a,b,flag ;    /* flag sert pour 2 choses : savoir si
  74.                 un bouton est deja enfonce (1) et savoir si 
  75.                 c'est la premiere fois ou pas (0,2)*/
  76.    short pas = (512/editresol) ;     
  77.     switch (pev->type) {
  78.     case EnterZone : Afficher_boutons("DefBox","DefBox");
  79.              flag = 0 ;
  80.              break ;
  81.     case ButtonPressed : if (flag == 0 ) {
  82.                 Afficher_boutons("EndBox","EndBox");
  83.                     x = pev->x ;
  84.                     y = pev->y ;
  85.                      stylesouris(FIXRECT,x,y);
  86.                 flag = 1 ;
  87.                  } 
  88.                  break ;
  89.     case ButtonReleased : if (flag == 1) {
  90.                 stylesouris(NORMAL,0,0);
  91.                     a = pev->x ;
  92.                     b = pev->y ;
  93.                       stylesouris(RECT,
  94.                     (convert(x)-convert(a))*pas,
  95.                     (convert(y)-convert(b))*pas);
  96.                 Afficher_boutons("Copy","Move");
  97.                       flag = 2 ;
  98.                   } else
  99.                   if (flag == 2) {
  100.                 stylesouris(NORMAL,0,0);
  101.                 flag = 0 ;
  102.                 Afficher_boutons("DefBox","DefBox");
  103.                 Dodo() ;
  104.                 TranslBox(pev->click,
  105.                     convert(x),convert(y),
  106.                     convert(a),convert(b),
  107.                     convert(pev->x),
  108.                     convert(pev->y));
  109.                   }
  110.                   break ;
  111.     case MoveMouse : break ;                
  112.     case CloseWindow : break ;                
  113.     case LeaveZone : stylesouris(NORMAL,0);
  114.                  Afficher_numview(-1,-1) ; /* restaure le gris */
  115.              Afficher_boutons("","");
  116.              break ;
  117.     }
  118.