home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / xfedor.zip / XFree86 / src / xfedor / ed_main.c < prev    next >
C/C++ Source or Header  |  1999-03-02  |  3KB  |  117 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) ;
  27.     h = (y1-y2>0)?(y1-y2):(y2-y1) ;
  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.     while ( Ligne_color(cartrav.image,yhg,Xleft,
  59.                 Xleft+cartrav.hsize,BackColor) ) yhg++ ;
  60.     cartrav.up = yhg - Baseliney;
  61.  
  62.     while ( Ligne_color(cartrav.image,ybd,Xleft,
  63.                 Xleft+cartrav.hsize,BackColor) ) ybd-- ; 
  64.     cartrav.down = ybd - Baseliney + 1 ;
  65.  
  66.     MontrerCarTrav() ;
  67. }
  68.  
  69. Autom_cutap (pev)
  70.     myEvent * pev ; 
  71. {  static int x,y,a,b,flag ;    /* flag sert pour 2 choses : savoir si
  72.                 un bouton est deja enfonce (1) et savoir si 
  73.                 c'est la premiere fois ou pas (0,2)*/
  74.    short pas = (512/editresol) ;     
  75.     switch (pev->type) {
  76.     case EnterZone : Afficher_boutons("DefBox","DefBox");
  77.              flag = 0 ;
  78.              break ;
  79.     case ButtonPressed : if (flag == 0 ) {
  80.                 Afficher_boutons("EndBox","EndBox");
  81.                     x = pev->x ;
  82.                     y = pev->y ;
  83.                      stylesouris(FIXRECT,x,y);
  84.                 flag = 1 ;
  85.                  } 
  86.                  break ;
  87.     case ButtonReleased : if (flag == 1) {
  88.                 stylesouris(NORMAL,0,0);
  89.                     a = pev->x-pas/2 ;
  90.                     b = pev->y-pas/2 ;
  91.                       stylesouris(RECT,
  92.                     (convert(x)-convert(a)-1)*pas,
  93.                     (convert(y)-convert(b)-1)*pas);
  94.                 Afficher_boutons("Copy","Move");
  95.                       flag = 2 ;
  96.                   } else
  97.                   if (flag == 2) {
  98.                 stylesouris(NORMAL,0,0);
  99.                 flag = 0 ;
  100.                 Afficher_boutons("DefBox","DefBox");
  101.                 Dodo() ;
  102.                 TranslBox(pev->click,
  103.                     convert(x),convert(y),
  104.                     convert(a)+1,convert(b)+1,
  105.                     convert(pev->x-pas/2)+1,
  106.                     convert(pev->y-pas/2)+1);
  107.                   }
  108.                   break ;
  109.     case MoveMouse : break ;                
  110.     case CloseWindow : break ;                
  111.     case LeaveZone : stylesouris(NORMAL,0);
  112.                  Afficher_numview(-1,-1) ; /* restaure le gris */
  113.              Afficher_boutons("","");
  114.              break ;
  115.     }
  116.