コード例 #1
0
ファイル: FULLSCR.C プロジェクト: daemqn/Atari_ST_Sources
void traite_pleinecran(GEM_WINDOW *gwnd)
{
  GEM_WINDOW *wprog ;
  VXIMAGE    *vimage ;
  MFDB       out ;
  float      x_level, y_level, level ;
  int        xy[8] ;
  int        cp ;

  if ( gwnd == NULL ) return ;
  vimage = (VXIMAGE *) gwnd->Extension ;

  mouse_busy() ;
  x_level = (float)(Xmax-2)/(float)vimage->raster.fd_w ;
  y_level = (float)(Ymax-2)/(float)vimage->raster.fd_h ;
  if (x_level > y_level) level = y_level ;
  else                   level = x_level ;
  wprog = DisplayStdProg(msg[MSG_CALCREDUC], "", "", CLOSER ) ;
  out.fd_addr = NULL ;
  out.fd_w    = (int) ( 0.5 + (float)vimage->raster.fd_w * level ) ;
  out.fd_h    = (int) ( 0.5 + (float)vimage->raster.fd_h * level ) ;
/*  if (raster_pczoom(&vimage->raster, &out, level, level, wprog))*/
  if ( RasterZoom( &vimage->raster, &out, wprog ) )
  {
    GWDestroyWindow( wprog ) ;
    form_error(8) ;
    mouse_restore() ;
    return ;
  }
  GWDestroyWindow( wprog ) ;

  mouse_restore() ;

  cp = config.color_protect ;
  config.color_protect = 0 ;
  set_imgpalette( vimage ) ;
  cls_gemscreen() ;

  clear_buffers( MU_KEYBD | MU_BUTTON ) ;
  xy[0] = 0 ;
  xy[1] = 0 ;
  xy[2] = out.fd_w-1 ;
  xy[3] = out.fd_h-1 ;
  xy[4] = (Xmax-xy[2])/2 ;
  xy[5] = (Ymax-xy[3])/2 ;
  xy[6] = xy[4]+xy[2] ;
  xy[7] = xy[5]+xy[3] ;
  v_hide_c(handle) ;

  wind_update(BEG_UPDATE) ;
  vro_cpyfm(handle, S_ONLY, xy, &out, &screen) ;
  wait_for( MU_KEYBD | MU_BUTTON ) ;
  wind_update(END_UPDATE) ;

  free(out.fd_addr) ;
  restore_gemscreen(GemApp.Menu) ;
  v_show_c(handle, 1) ;
  config.color_protect = cp ;
  set_imgpalette( vimage ) ;
}
コード例 #2
0
ファイル: VSLDSHOW.C プロジェクト: daemqn/Atari_ST_Sources
int load_nextimg( char *name, MFDB *mfdb, INFO_IMAGE *inf, VSS_INFO *vss_info, GEM_WINDOW *wprog )
{
  int ret ;

  display_status( STATUS_LOADING ) ;
  ret = img_format( name, inf ) ;
  if ( ret != 0 )
  {
    if ( inf->palette ) free( inf->palette ) ;
  }
  else
  {
    memset( mfdb, 0, sizeof(MFDB) ) ;
    mfdb->fd_nplanes = nb_plane ;
    if ( nb_plane == 16 ) Force16BitsLoad = 1 ;
    else                  Force16BitsLoad = 0 ;
    mouse_busy() ;
    ret = load_picture( name, mfdb, inf, wprog ) ;
    mouse_restore() ;
    mfdb->fd_w = inf->largeur ; /* Evite la bande sur la droite */
    if ( ( vss_info->display_type & DISPLAYTYPE_ZOOM ) &&
        ( ( mfdb->fd_w < 1+Xmax ) || ( mfdb->fd_h < 1+Ymax ) )
      )
     strech_img( mfdb ) ;
   else
    if ( ( vss_info->display_type & DISPLAYTYPE_REDUC ) &&
         ( ( mfdb->fd_w > 1+Xmax ) || ( mfdb->fd_h > 1+Ymax ) )
      )
     strech_img( mfdb ) ;
  }

  log_event( CMD_DISPLAY, name ) ;

  return( ret ) ;
}
コード例 #3
0
ファイル: mouse.c プロジェクト: happychen/wang
int mouse_test(pinfo_t fb)
{
    int fd;
    if ((fd = mouse_open("/dev/input/mice")) < 0) 
    {
        fprintf(stderr, "Error mouse open: %s\n", strerror(errno));    
        exit(1);
    }
    mevent_t mevent;

    int m_x = fb->w / 2;
    int m_y = fb->h / 2;
    mouse_draw(fb, m_x, m_y);

    u8_t buf[] = {0xF3, 0xC8, 0xF3, 0x64, 0xF3, 0x50};
    if (write(fd, buf, sizeof(buf)) < sizeof(buf)) 
    {
        fprintf(stderr, "Error write to mice devie:%s\n", strerror(errno));
        fprintf(stderr, "鼠标将不支持滚轮\n");
    }

    while(1)
    {
        if (mouse_parse(fd, &mevent) == 0) 
        {
            printf("dx= %d\tdy=%d\tdz=%d\t", mevent.dx, mevent.dy, mevent.dz);
            mouse_restore(fb, m_x, m_y);

            m_x += mevent.dx;
            m_y += mevent.dy;

            mouse_draw(fb, m_x, m_y);
            printf("mx= %d\tmy= %d\n", m_x, m_y);

            switch(mevent.button)
            {
                case 1 :
                        printf("left button\n");
                        break;
                case 2 :
                        printf("right button\n");
                        break;
                case 4 :
                        printf("middle button\n");
                        break;
                case 0 :
                        printf("no button\n");
                        break;
                default :
                        break;
            }
        }
        else
            ;
    }
    close(fd);
    return 0;
}
コード例 #4
0
ファイル: FGAMMA.C プロジェクト: daemqn/Atari_ST_Sources
void traite_gamma(GEM_WINDOW *gwnd)
{
  GEM_WINDOW       *dlg ;
  WEXTENSION_GAMMA *wext ;
  VXIMAGE          *vimage ;
  INFO_IMAGE       *inf_img ;
  DLGDATA          dlg_data ;
  int              code ;

  if ( gwnd == NULL ) return ;
  wext = (WEXTENSION_GAMMA *) malloc( sizeof(WEXTENSION_GAMMA) ) ;
  if ( wext == NULL )
  {
    form_error( 8 ) ;
    return ;
  }
  wext->wnd     = gwnd ;
  wext->vimage  = vimage  = (VXIMAGE *) gwnd->Extension ;
  wext->inf_img = inf_img = &vimage->inf_img ;

  memset( &dlg_data, 0, sizeof(DLGDATA) ) ;
  dlg_data.RsrcId         = FORM_GAMMA ;
  strcpy( dlg_data.Title, msg[MSG_WFNAMES] ) ;
  dlg_data.UserData       = wext ;
  dlg_data.OnInitDialog   = OnInitDialogGamma ;
  dlg_data.OnObjectNotify = OnObjectNotifyGamma ;

  dlg  = GWCreateDialog( &dlg_data ) ;
  code = GWDoModal( dlg, 0 ) ;

  if ( code == IDOK )
  {
    mouse_busy() ;
    undo_put( gwnd, 0, 0, vimage->raster.fd_w-1, vimage->raster.fd_h-1, UGAMMA, NULL ) ;

    if ( Truecolor ) make_tcpal( wext->tcrgamma, wext->tcvgamma, wext->tcbgamma, gwnd ) ;
    else
    {
      if ( inf_img->palette )
        make_vdigamma( wext->trgamma, wext->tvgamma, wext->tbgamma, inf_img->palette, (int) inf_img->nb_cpal) ;
      set_imgpalette( vimage ) ;
    }

    set_modif( gwnd ) ;
    mouse_restore() ;
    if (Truecolor) GWRePaint( gwnd ) ;
  }
  else
  {
    if (Truecolor) GWRePaint( gwnd ) ;
    else           set_imgpalette( vimage ) ;
  }

  free( wext ) ;
}
コード例 #5
0
ファイル: FCONV.C プロジェクト: daemqn/Atari_ST_Sources
void rvb2gris(GEM_WINDOW *gwnd)
{
  VXIMAGE *vimage ;

  if ( gwnd == NULL ) return ;
  vimage = (VXIMAGE *) gwnd->Extension ;

  mouse_busy() ;
  make_greyimage( &vimage->raster, &vimage->inf_img ) ;

  if ( vimage->raster.fd_nplanes <= 8 ) set_imgpalette( vimage ) ;
  else                                  GWRePaint( gwnd ) ;

  set_modif( gwnd ) ;
  mouse_restore() ;
}
コード例 #6
0
ファイル: UNDO.C プロジェクト: daemqn/Atari_ST_Sources
void clip_putlasso(GEM_WINDOW *gwnd, int x1, int y1, int x2, int y2, MFDB *mask, MFDB *masked_img)
{
  VXIMAGE *vimage ;

  if ( !GWIsWindowValid( gwnd ) ) return ;
  vimage = (VXIMAGE *) gwnd->Extension ;

  FreeClipboard() ;

  memcpy(&clipboard.img, masked_img, sizeof(MFDB)) ;
  memcpy(&clipboard.mask, mask, sizeof(MFDB)) ;
  clipboard.gwindow = gwnd ;
  clipboard.x   = x1 ;
  clipboard.y   = y1 ;
  clipboard.w   = 1+x2-x1 ;
  clipboard.h   = 1+y2-y1 ;

  if (config.clip_gem == 1)
  {
    char name[200] ;

    mouse_busy() ;
    if ( clbd_getpath( name ) == 0 )
    {
      INFO_IMAGE info ;

      memcpy( &info, &vimage->inf_img, sizeof(INFO_IMAGE) ) ;
      info.largeur  = clipboard.img.fd_w ;
      info.hauteur  = clipboard.img.fd_h ;
      if ( Truecolor )
      {
        strcat(name, "SCRAP.TIF") ;
        info.compress = 1 ;
        info.lformat  = IID_TIFF ;
      }
      else
      {
        strcat(name, "SCRAP.IMG") ;
        info.lformat  = IID_IMG ;
      }
      save_picture( name, &clipboard.img, &vimage->inf_img, NULL ) ;
    }
    mouse_restore() ;
  }
}
コード例 #7
0
ファイル: PRINT.C プロジェクト: daemqn/Atari_ST_Sources
void scan_drivers(void)
{
  GEM_WINDOW *wprog ;
  char driver_name[128] ;
  char devstring[128] ;
  int  libr, driv, xplane, attrib ;
  int  devnum, devexist, prt_handle, new_driver ;

  mouse_busy() ;

  wprog = DisplayStdProg( msg[MSG_LOOKSPDDRV], "", "", CLOSER ) ;

  for (devnum = 21 ; devnum < 31 ; devnum++) /* on va tester tous les No Gdos pour l'impression */
  {
    prt_handle = open_work(devnum) ; /* Ouverture de la station imprimante */
    if ( prt_handle )                /* driver dispo pour ce num‚ro        */
    {                                /* s'enquiŠre du nom de l'imprimante  */
       vqt_devinfo( prt_handle, devnum, &devexist, devstring ) ;
/*
       if ( devexist )
       { Test enleve depuis VISION 4.0 car sous NVDI 5, devexist vaut 0 pour gestion du multitache
*/
       id[nb_drivers] = devnum ;
       strcpy(driver_name, (char *)&_VDIParBlk.ptsout[1]) ;
       new_driver = vq_driver_info( prt_handle, &libr, &driv, &xplane,
                                    &attrib, devstring ) ;
       if ( new_driver )
       {
         if ( strlen( devstring ) >= 19) devstring[19] = 0 ;
           strcpy(&printer_names[nb_drivers][0], devstring) ;
       }
       else
         strcpy( &printer_names[nb_drivers][0], driver_name ) ;
       StdProgWText( wprog, 1, &printer_names[nb_drivers][0] ) ;
       nb_drivers++ ;
/*       }*/
       v_clswk(prt_handle) ; /* ferme la station de l'imprimante */
    }
    wprog->ProgPc( wprog, 10*(devnum-20), NULL ) ;
  }
  printer_init = 1 ;
  mouse_restore() ;
  GWDestroyWindow( wprog ) ;
}
コード例 #8
0
ファイル: mouse.c プロジェクト: tengben/yyy
int main(void)
{
	fb_info_t fb;
	mevent_t mevent;
	
	int fd, mfd;

	int m_x, m_y;
	if((fd = open("/dev/fb0", O_RDWR)) < 0)
	{
		perror("open /dev/fb0 error:");
		exit(1);
	}
	if(-1L == ioctl(fd, FBIOGET_VSCREENINFO, &(fb.fb_var)))
	{
		printf("ioctl FBIOGET_VSCREENINFO\n");
		exit(1);
	}
	fb.w = fb.fb_var.xres;
	fb.h = fb.fb_var.yres;
	fb.bpp = fb.fb_var.bits_per_pixel;
	fb.fd = fd;
	fb.fb_mem = mmap(NULL, fb.w*fb.h*fb.bpp/8, PROT_READ|PROT_WRITE, MAP_SHARED, fb.fd,0);
	if(MAP_FAILED == fb.fb_mem)
	{
		printf("mmap error!");
		exit(1);
	}

	m_x = fb.w / 2;
	m_y = fb.h / 2;

	put1(&fb,0xFFFF);
	put2(&fb,0xFFFF);
	put3(&fb,0xFFFF);

	//Step 1	
	mouse_save(&fb, m_x, m_y);

	//Step 2
	mouse_draw_take(&fb, m_x, m_y);

	mfd = open("/dev/input/mice", O_RDWR | O_NONBLOCK);
	if(mfd < 0)
	{
		perror("open /dev/input/mice error:");
		exit(1);
	}


	while(1)
	{
		if(mouse_parse(mfd, &mevent) == 0)
		{
			//Step 3
			mouse_restore(&fb, m_x, m_y);

			m_x += mevent.dx;
			m_y += mevent.dy;
			
			if(m_x < 0)
				m_x = 0;
			if(m_x > (fb.w-C_WIDTH-1))
				m_x = fb.w - C_WIDTH-1;
			if(m_y < 0)
				m_y = 0;
			if(m_y > (fb.h-C_HEIGHT-1))
				m_y = fb.h-C_HEIGHT-1;
			if((m_x > x_start_l)&&(m_x < x_start_r)&&(m_y > y_start_l)&&(m_y < y_start_r))
			{
				mouse_save(&fb, m_x, m_y);
				mouse_draw_load(&fb, m_x, m_y);
				if(mevent.button == 1)
				{
				/*开始*/
				printf("star\n");
			//	exit(1);
				}
			}
			else if((m_x > x_list_l)&&(m_x < x_list_r)&&(m_y > y_list_l)&&(m_y < y_list_r))
			{
				mouse_save(&fb, m_x, m_y);
				mouse_draw_load(&fb, m_x, m_y);
				if(mevent.button == 1)
				{
				/*列表*/
				printf("list\n");
			//	exit(1);
				}	
			}
			else if((m_x > x_quit_l)&&(m_x < x_quit_r)&&(m_y > y_quit_l)&&(m_y < y_quit_r))
			{
				mouse_save(&fb, m_x, m_y);
				mouse_draw_load(&fb, m_x, m_y);
				if(mevent.button == 1)
				{
				/*退出*/
				printf("exit\n");
			//	exit(1);
				}
			}
			else
			{	
				mouse_save(&fb, m_x, m_y);	
				mouse_draw_take(&fb, m_x, m_y);
			}
		}
	}
	close(fb.fd);
	munmap(fb.fb_mem,fb.w*fb.h*fb.bpp/8);
	return 0;	

}	
コード例 #9
0
ファイル: mouseop.c プロジェクト: zhiweijiang/c-note
int mouse_test(pinfo_t fb)
{
    int fd;
    mevent_t mevent;
    int m_x = fb->w/2;
    int m_y = fb->h/2;
    int i,j;
    int flag = 0;
    int mouse_flag = 0;

    if((fd = mouse_open("/dev/input/mice")) < 0)
    {
        perror("open");
        exit(1);
    }
    mouse_draw(fb, m_x, m_y);

//  u8_t buf[] = {0xf3,0xc8,0xf3,0x64,0xf3,0x50};

//    if(write(fd, buf, sizeof(buf)) < sizeof(buf))
//   {
//        perror("write");
//        fprintf(stderr, "鼠标将不知支持滚轮\n");
//   }
    while(!flag)
    {
        if(mouse_parse(fd, &mevent) == 0)
        {
  //        printf("dx = %d\tdy = %d\tdz = %d\t", mevent.dx, mevent.dy, mevent.dz);
            mouse_restore(fb, m_x, m_y);
            m_x += mevent.dx;
            m_y += mevent.dy;
            m_x=((m_x<0)? 0:m_x);
            m_y=((m_y<0)? 0:m_y);
            if(m_x > (fb->w - C_WIDTH))
            {
                m_x = fb->w -C_WIDTH;
            }
            if(m_y > (fb->h - C_HIGHT))
            {
                m_y = fb->h - C_HIGHT;
            }
  //        printf("mx = %d\tmy = %d\n", m_x, m_y);
            switch(mevent.button)
            {
                case 0:
                    switch(mouse_flag)
                    {
                        case 1:
                            i = 50;
                            while(i > 25)
                            {
                                fb_cirle(fb, m_x, m_y, i, 0x0fff);
                                i--;
                            }
                            for (j = m_y -1; j < m_y+2; j++) 
                            {
                                for (i = m_x - 25; i < m_x + 25; i++) 
                                {
                                    fb_pixel(fb, i, j, 0xff00);
                                }
                            } 
                            for (j = m_y -25; j < m_y+25; j++) 
                            {
                                for (i = m_x - 1; i < m_x + 2; i++) 
                                {
                                    fb_pixel(fb, i, j, 0xff00);
                                }
                            }   
                            mouse_flag = 0;
                            break;
                        case 2:
                            for (j = m_y -50; j < m_y + 50; j++) 
                            {
                              for (i = (m_y-j-50)/2; i <= (50+j-m_y)/2; i++) 
                                {
                                    fb_pixel(fb, m_x+i/2, j, 0xff000);
                                }
                            }
                            fb_cirle(fb, m_x, m_y, 250, 0x0fff); 
                            mouse_flag = 0;
                            break;
                        case 4:
                            flag = 1;
                            for (j = m_y - 12; j < m_y + 12; j++) 
                            {
                                for (i = -75; i < 75; i++) 
                                {
                                    fb_pixel(fb, m_x+i, j, 0x0ff);
                                }
                            }
                            mouse_flag = 0;
                            break;
                        default:
                            break;
                    }
                    break;
                case 1:
                    mouse_flag = 1;
                    break;   
                case 2:
                    mouse_flag = 2;
                    break;
                case 4:
                    mouse_flag = 4;
                    break;
                default:
                    break;
            }
            mouse_draw(fb, m_x, m_y);
        }
    }
    close(fd);

    return 0;
}
コード例 #10
0
ファイル: FSYM.C プロジェクト: daemqn/Atari_ST_Sources
void traite_symetrie(GEM_WINDOW *gwnd)
{
  WEXTENSION_SYM wext ;
  VXIMAGE        *vimage ;
  int            xy[4] ;

  if ( gwnd == NULL ) return ;
  wext.wnd     = gwnd ;
  wext.vimage  = vimage = (VXIMAGE *) gwnd->Extension ;

  if ( FGetSym( &wext ) != IDOK ) return ;

  mouse_busy() ;
  if ( wext.sym_image )
  {
    xy[0] = 0 ;
    xy[1] = 0 ;
    xy[2] = vimage->raster.fd_w-1 ;
    xy[3] = vimage->raster.fd_h-1 ;
  }
  else
  {
    xy[0] = vclip.x1 ;
    xy[1] = vclip.y1 ;
    xy[2] = vclip.x2 ;
    xy[3] = vclip.y2 ;
    gwnd = vclip.gwindow ;
  }

  if ( wext.type_sym == SYMETRIE_X )
  {
    undo_put( gwnd, xy[0], xy[1], xy[2], xy[3], USYMX, NULL ) ;
    if (raster_hsym(&vimage->raster, xy) != 0)
      form_error(8) ;
    if ( wext.sym_image )
    {
      vclip.y1 = vimage->raster.fd_h-1-vclip.y1 ;
      vclip.y2 = vimage->raster.fd_h-1-vclip.y2 ;
      if (vclip.y1 > vclip.y2)
      {
        int temp ;

        temp     = vclip.y1 ; 
        vclip.y1 = vclip.y2 ;
        vclip.y2 = temp ;
      }
    }
  }
  else
  if ( wext.type_sym == SYMETRIE_Y )
  {
    undo_put( gwnd, xy[0], xy[1], xy[2], xy[3], USYMY, NULL ) ;
    if (raster_vsym(&vimage->raster, xy) != 0)
      form_error(8) ;
    if ( wext.sym_image )
    {
      vclip.x1 = vimage->raster.fd_w-1-vclip.x1 ;
      vclip.x2 = vimage->raster.fd_w-1-vclip.x2 ;
      if (vclip.x1 > vclip.x2)
      {
        int temp ;

        temp     = vclip.x1 ; 
        vclip.x1 = vclip.x2 ;
        vclip.x2 = temp ;
      }
    }
  }
  else
  if ( wext.type_sym == SYMETRIE_XY )
  {
    undo_put( gwnd, xy[0], xy[1], xy[2], xy[3], USYMXY, NULL ) ;
    if (raster_vsym(&vimage->raster, xy) != 0)
      form_error(8) ;
    if ( wext.sym_image )
    {
      vclip.x1 = vimage->raster.fd_w-1-vclip.x1 ;
      vclip.x2 = vimage->raster.fd_w-1-vclip.x2 ;
      if (vclip.x1 > vclip.x2)
      {
        int temp ;

        temp     = vclip.x1 ; 
        vclip.x1 = vclip.x2 ;
        vclip.x2 = temp ;
      }
    }
    if (raster_hsym(&vimage->raster, xy) != 0)
      form_error(8) ;
    if ( wext.sym_image )
    {
      vclip.y1 = vimage->raster.fd_h-1-vclip.y1 ;
      vclip.y2 = vimage->raster.fd_h-1-vclip.y2 ;
      if (vclip.y1 > vclip.y2)
      {
        int temp ;

        temp     = vclip.y1 ; 
        vclip.y1 = vclip.y2 ;
        vclip.y2 = temp ;
      }
    }
  }

  mouse_restore() ;
  set_modif( gwnd ) ;
  if (vimage->zoom_level != 1)
    traite_loupe( gwnd, vimage->zoom_level, -1, -1 ) ;
  GWRePaint( gwnd ) ;
}
コード例 #11
0
ファイル: PRINT.C プロジェクト: daemqn/Atari_ST_Sources
int print_image(MFDB *raster, INFO_IMAGE *in_info)
{
  GEM_WINDOW *wprog = NULL ;
  DLGDATA    dlg_data ;
  DLGPRINTER_USER_DATA dlg_user_data ;
  GEM_WINDOW *dlg ;
  MFDB       src ;
  float      sizex, sizey ;
  float      ptpx, ptpy ;
  int        pintin[256], pintout[256] ;
  int        xyarray[4] ;
  int        print_handle ;
  int        i, xoffset, yoffset ;
  int        bouton ;
  int        dither_mono, print_color ;
  char       *filename = dlg_user_data.filename ;
  char       *c ;
  char       buffer[200] ;
  char       nom[30] ;

  if ( !Gdos ) return(PNOGDOS) ;
  if ( !printer_init ) scan_drivers() ;
  if ( nb_drivers <= 0 ) return( PNODRIVER ) ;

  memset( &dlg_user_data, 0, sizeof(DLGPRINTER_USER_DATA) ) ;
  if ( raster ) memcpy( &dlg_user_data.raster, raster, sizeof(MFDB) ) ;
  if ( in_info ) memcpy( &dlg_user_data.info, in_info, sizeof(INFO_IMAGE) ) ;

  while ( dlg_user_data.raster.fd_w == 0 )
  {
    strcpy( buffer, filename ) ;
    c = strrchr( buffer, '\\' ) ;
    if ( c ) *c = 0 ;
    strcat( buffer, "\\*.*" ) ;
    if ( file_name( buffer, "", buffer ) == 1 )
    {
      INFO_IMAGE inf ;

      strcpy( dlg_user_data.filename, buffer ) ;
      if ( img_format(dlg_user_data.filename, &inf) == 0 )
      {
        memcpy(&dlg_user_data.info, &inf, sizeof(INFO_IMAGE)) ;
        memset(&dlg_user_data.raster, 0, sizeof(MFDB)) ;
        dlg_user_data.raster.fd_w       = inf.largeur ;
        dlg_user_data.raster.fd_h       = inf.hauteur ;
        dlg_user_data.raster.fd_nplanes = inf.nplans ;
        dlg_user_data.raster.fd_wdwidth = dlg_user_data.raster.fd_w/16 ;
        if (dlg_user_data.raster.fd_w % 16) dlg_user_data.raster.fd_wdwidth++ ;
      }
    }
    else return(PCANCEL) ;
  }

  memset( &dlg_data, 0, sizeof(DLGDATA) ) ;
  dlg_data.RsrcId         = FORM_PRINT ;
  dlg_data.UserData       = &dlg_user_data ;
  dlg_data.ExtensionSize  = 0 ; /* Sera alloue par OnInitPrinterDialog */
  dlg_data.OnInitDialog   = OnInitPrinterDialog ;
  dlg_data.OnObjectNotify = OnObjectNotifyPrinterDialog ;
  dlg_data.OnCloseDialog  = OnClosePrinterDialog ;

  dlg    = GWCreateDialog( &dlg_data ) ;
  bouton = GWDoModal( dlg, PRINT_XPC ) ;
  if ( bouton == IDCANCEL ) return( PCANCEL ) ;

  printer_index = dlg_user_data.printer_index ;
  type_index    = dlg_user_data.type_index ;

  if ( dlg_user_data.filename[0] )
  {
    INFO_IMAGE inf ;
    int        analyse = img_analyse ;

    img_analyse = 0 ;
    if ( img_format( dlg_user_data.filename, &inf ) == 0 )
    {
      memcpy(&dlg_user_data.info, &inf, sizeof(INFO_IMAGE)) ;
      src.fd_nplanes = -1 ; /* Conserver le nombre de plans */
      Force16BitsLoad = 0 ;
      wprog = DisplayStdProg( msg[MSG_LOADINGIMG], "", dlg_user_data.filename, 0 ) ;
      if ( load_picture( dlg_user_data.filename, &src, &inf, wprog ) != 0 )
      {
        GWDestroyWindow( wprog ) ;
        img_analyse = analyse ;
        return(PCANCEL) ;
      }
      StdProgWText( wprog, 1, "" ) ;
    }
    else
    {
      img_analyse = analyse ;
      return( PCANCEL ) ;
    }

    img_analyse = analyse ;
    GWDestroyWindow( wprog ) ;
    wprog = NULL ;
  }
  else
    memcpy( &src, &dlg_user_data.raster, sizeof(MFDB) ) ;

  pintin[0] = id[dlg_user_data.printer_index] ;
  if ((pintin[0] < 21) || (pintin[0] > 30)) return( PNOHANDLE ) ;
  for (i = 1; i < 10; i++) pintin[i] = 1 ;
  pintin[10] = 2 ;
  v_opnwk( pintin, &print_handle, pintout ) ;
  if ( print_handle <= 0 ) return(PNOHANDLE) ;

  ptpx = (float)pintout[3] ; /* Largeur d'un point imprimante en microns */
  ptpy = (float)pintout[4] ; /* Hauteur d'un point imprimante en microns */
  wprog = DisplayStdProg( "", "", "", CLOSER ) ;

  dither_mono = (dlg_user_data.type_index == 1) && (src.fd_nplanes > 1) ;
  print_color = (dlg_user_data.type_index == 0) ;
  if ( dither_mono ) /* Mode noir et blanc */
  {
    MFDB virtuel ;
    int  pc_x, pc_y ;

    StdProgWText( wprog, 0, msg[MSG_DITHER] ) ;
    virtuel.fd_nplanes = 1 ;
    if ( dlg_user_data.rotate90 )
      pc_x = (int) (dlg_user_data.xpc*(float)dlg_user_data.info.lpix/ptpy) ;
    else
      pc_x = (int) (dlg_user_data.xpc*(float)dlg_user_data.info.lpix/ptpx) ;
    if ( dlg_user_data.rotate90 )
      pc_y = (int) (dlg_user_data.ypc*(float)dlg_user_data.info.hpix/ptpx) ;
    else
      pc_y = (int) (dlg_user_data.ypc*(float)dlg_user_data.info.hpix/ptpy) ;
    mouse_busy() ;
    if ( dither_ratio(&src, &dlg_user_data.info, &virtuel, pc_x, pc_y, wprog ) == -1 )
    {
      if ( dlg_user_data.filename[0] )
      {
        free( src.fd_addr ) ;
        if ( dlg_user_data.filename[0] && dlg_user_data.info.palette ) free( dlg_user_data.info.palette ) ;
      }
      mouse_restore() ;
      GWDestroyWindow( wprog ) ;
      v_clswk( print_handle ) ;
      return( PROTERR ) ;
    }
    wprog->ProgPc( wprog, 0, NULL ) ;
    mouse_restore() ;
    if ( dlg_user_data.filename[0] ) free( src.fd_addr ) ;
    memcpy( &src, &virtuel, sizeof(MFDB) ) ;
  }

  if ( dlg_user_data.rotate90 )
  {
    MFDB virtuel ;
 
    StdProgWText( wprog, 0, msg[MSG_ROTATING] ) ;
    mouse_busy() ;
    if ( raster_r90( &src, &virtuel, wprog ) != 0 )
    {
      if ( dither_mono || dlg_user_data.filename[0] ) free( src.fd_addr ) ;
      if ( dlg_user_data.filename[0] && dlg_user_data.info.palette ) free( dlg_user_data.info.palette ) ;
      mouse_restore() ;
      GWDestroyWindow( wprog ) ;
      v_clswk( print_handle ) ;
      return( PROTERR ) ;
    }
    mouse_restore() ;
    if ( dither_mono || dlg_user_data.filename[0] ) free(src.fd_addr ) ;
    memcpy( &src, &virtuel, sizeof(MFDB) ) ;
  }

  sizex = (float)src.fd_w*(float)dlg_user_data.info.lpix*dlg_user_data.xpc/100.0 ;
  sizey = (float)src.fd_h*(float)dlg_user_data.info.hpix*dlg_user_data.ypc/100.0 ;
  sizex /= 10000.0 ;
  sizey /= 10000.0 ;
  if ( !print_color )
  {
    StdProgWText( wprog, 0, msg[MSG_DOGDOSIMG] ) ;
    strcpy(nom, "VSCRAP.IMG") ;
    if ( img_sauve( nom, &src, &dlg_user_data.info, wprog ) )
    {
      if ( dither_mono || dlg_user_data.filename[0] || dlg_user_data.rotate90 ) free( src.fd_addr ) ;
      if ( dlg_user_data.filename[0] && dlg_user_data.info.palette ) free( dlg_user_data.info.palette ) ;
      GWDestroyWindow( wprog ) ;
      v_clswk( print_handle ) ;
      return( PWRITERR ) ;
    }
  }
  else
  {
    INFO_IMAGE new_info ;
    MFDB       new_img ;

    memcpy( &new_info, &dlg_user_data.info, sizeof(INFO_IMAGE) ) ;
    memcpy( &new_img, &src, sizeof(MFDB) ) ;
    if ( new_img.fd_nplanes <= 8 )
    {
      new_info.nb_cpal   = 0 ;
      new_info.palette   = NULL ;
      new_info.nplans    = 16 ;
      new_img.fd_addr    = NULL ;
      new_img.fd_nplanes = 16 ;
      StdProgWText( wprog, 0, msg[MSG_DOGDOSIMG] ) ;
      if ( index2truecolor( &src, &dlg_user_data.info, &new_img, wprog ) != 0 )
      {
        if ( dither_mono || dlg_user_data.filename[0] || dlg_user_data.rotate90 ) free( src.fd_addr ) ;
        if ( dlg_user_data.filename[0] && dlg_user_data.info.palette ) free( dlg_user_data.info.palette ) ;
        v_clswk( print_handle ) ;
        GWDestroyWindow( wprog ) ;
        return( PWRITERR ) ;
      }
    }
    strcpy( nom, "VSCRAP.TGA" ) ;
    if ( targa_sauve( nom, &new_img, &new_info, wprog ) )
    {
      if ( dither_mono || dlg_user_data.filename[0] || dlg_user_data.rotate90 ) free( src.fd_addr ) ;
      if ( dlg_user_data.filename[0] && dlg_user_data.info.palette ) free( dlg_user_data.info.palette ) ;
      v_clswk( print_handle ) ;
      GWDestroyWindow( wprog ) ;
      return( PWRITERR ) ;
    }
    if ( src.fd_nplanes <= 8 ) free( new_img.fd_addr ) ;
  }

  if ( dither_mono || dlg_user_data.filename[0] || dlg_user_data.rotate90 ) free( src.fd_addr ) ;
  if ( dlg_user_data.filename[0] && dlg_user_data.info.palette ) free( dlg_user_data.info.palette ) ;

  StdProgWText( wprog, 0, msg[MSG_PRINTING] ) ;
  vst_unload_fonts( handle, 0 ) ;
  xoffset = (int) (10000.0*dlg_user_data.posx/ptpx) ;
  yoffset = (int) (10000.0*dlg_user_data.posy/ptpy) ;
  xyarray[0] = xoffset ;
  xyarray[1] = yoffset ;
  xyarray[2] = xoffset+(int) (10000.0*sizex/ptpx) ;
  xyarray[3] = yoffset+(int) (10000.0*sizey/ptpy) ;

  mouse_busy() ;
  vs_page_info(print_handle, APPL,	MENU_NAME) ;
  vs_page_info(print_handle, DOC,	nom) ;
  vs_page_info(print_handle, CREAT,	"") ;
  vs_page_info(print_handle, REM,	"Thanks to Thierry Rodolfo !" ) ;

  if (dither_mono)
    v_bit_image(print_handle, nom, 0, INTEGER, INTEGER, 0, 0, xyarray) ;
  else
    v_bit_image(print_handle, nom, 0, FRACTIONAL, FRACTIONAL, 0, 0, xyarray) ;
  v_updwk(print_handle) ;
  v_clrwk(print_handle) ;
  v_clswk(print_handle) ;
  vst_load_fonts(handle, 0) ;
  mouse_restore() ;
  unlink(nom) ;
  GWDestroyWindow( wprog ) ;

  return( 0 ) ;
}
コード例 #12
0
ファイル: UNDO.C プロジェクト: daemqn/Atari_ST_Sources
void traite_refaire(GEM_WINDOW *gw)
{
  VXIMAGE *vimage ;
  MFDB    original_img ;
  int     xy[8] ;
  int     resize = 1 ;

  if ( config.use_redo == 0 ) return ;
  if ( config.nb_undo == 0 ) return ;
  if ( !GWIsWindowValid( gw ) ) return ;
  vimage = (VXIMAGE *) gw->Extension ;
  if ( vimage->Redo == NULL ) return ;

  memcpy( &original_img, &vimage->raster, sizeof(MFDB) )  ;
  mouse_busy() ;
  vimage->Redo->mitem = REDO ;

  if ( ( vimage->Redo->w != vimage->raster.fd_w ) || ( vimage->Redo->h != vimage->raster.fd_h ) )
    undo_put( gw, 0, 0, vimage->raster.fd_w-1, vimage->raster.fd_h-1, vimage->Redo->mitem, NULL ) ;
  else
    undo_put( gw, vimage->Redo->x, vimage->Redo->y, vimage->Redo->x+vimage->Redo->w-1, vimage->Redo->y+vimage->Redo->h-1, vimage->Redo->mitem, NULL ) ;

  if ( vimage->Redo->palette )
  {
    memcpy( vimage->inf_img.palette, vimage->Redo->palette, vimage->Redo->nb_cpal * 3 * sizeof(int) ) ;
    set_imgpalette( vimage ) ;
  }

  if ( vimage->Redo->disk || vimage->Redo->img.fd_addr )
  {
    if ( handle_changed_size( vimage->Redo, &vimage->raster ) != 0 ) form_error( 8 ) ;
    else
    {
      xy[0] = 0 ;                 xy[1] = 0 ;
      xy[2] = vimage->Redo->w-1 ; xy[3] = vimage->Redo->h-1 ;
      xy[4] = vimage->Redo->x ;   xy[5] = vimage->Redo->y ;
      xy[6] = vimage->Redo->x+vimage->Redo->w-1 ;
      xy[7] = vimage->Redo->y+vimage->Redo->h-1 ;
      if ( vimage->Redo->disk ) restore_undo_disk( gw, vimage->Redo, xy, &vimage->raster ) ;
      else                      vro_cpyfm(handle, S_ONLY, xy, &vimage->Redo->img, &vimage->raster) ;
    }
  }
/*  else
  {
    resize = 0 ;
    switch( vimage->Redo->mitem & ~REDO )
    {
      case UNEGATIF : xy[0] = vimage->Redo->x ;
                      xy[1] = vimage->Redo->y ;
                      xy[2] = xy[0]+vimage->Redo->w-1 ;
                      xy[3] = xy[1]+vimage->Redo->h-1 ;
                      memcpy(&xy[4], xy, 8) ;
                      vro_cpyfm(handle, D_INVERT, xy, &vimage->raster, &vimage->raster) ;
                      break ;
      case USYMX    : xy[0] = vimage->Redo->x ;
                      xy[1] = vimage->Redo->y ;
                      xy[2] = xy[0]+vimage->Redo->w-1 ;
                      xy[3] = xy[1]+vimage->Redo->h-1 ;
                      raster_hsym(&vimage->raster, xy) ;
                      if ((vclip.gwindow == gw) && (xy[0] == 0) && (xy[1] == 0) &&
                          (xy[2] == vimage->raster.fd_w-1) && (xy[3] == vimage->raster.fd_h-1))
                      {
                        vclip.y1 = vimage->raster.fd_h-1-vclip.y1 ;
                        vclip.y2 = vimage->raster.fd_h-1-vclip.y2 ;
                        if (vclip.y1 > vclip.y2)
                        {
                          int temp ;

                          temp     = vclip.y1 ; 
                          vclip.y1 = vclip.y2 ;
                          vclip.y2 = temp ;
                        }
                      }
                      break ;
      case USYMY    : xy[0] = vimage->Redo->x ;
                      xy[1] = vimage->Redo->y ;
                      xy[2] = xy[0]+vimage->Redo->w-1 ;
                      xy[3] = xy[1]+vimage->Redo->h-1 ;
                      raster_vsym(&vimage->raster, xy) ;
                      if ((vclip.gwindow == gw) && (xy[0] == 0) && (xy[1] == 0) &&
                          (xy[2] == vimage->raster.fd_w-1) && (xy[3] == vimage->raster.fd_h-1))
                      {
                        vclip.x1 = vimage->raster.fd_w-1-vclip.x1 ;
                        vclip.x2 = vimage->raster.fd_w-1-vclip.x2 ;
                        if (vclip.x1 > vclip.x2)
                        {
                          int temp ;

                          temp     = vclip.x1 ; 
                          vclip.x1 = vclip.x2 ;
                          vclip.x2 = temp ;
                        }
                      }
                      break ;
      case USYMXY   : xy[0] = vimage->Redo->x ;
                      xy[1] = vimage->Redo->y ;
                      xy[2] = xy[0]+vimage->Redo->w-1 ;
                      xy[3] = xy[1]+vimage->Redo->h-1 ;
                      raster_vsym(&vimage->raster, xy) ;
                      if ((vclip.gwindow == gw) && (xy[0] == 0) && (xy[1] == 0) &&
                          (xy[2] == vimage->raster.fd_w-1) && (xy[3] == vimage->raster.fd_h-1))
                      {
                        vclip.x1 = vimage->raster.fd_w-1-vclip.x1 ;
                        vclip.x2 = vimage->raster.fd_w-1-vclip.x2 ;
                        if (vclip.x1 > vclip.x2)
                        {
                          int temp ;

                          temp     = vclip.x1 ; 
                          vclip.x1 = vclip.x2 ;
                          vclip.x2 = temp ;
                        }
                      }
                      xy[0] = vimage->Redo->x ;
                      xy[1] = vimage->Redo->y ;
                      xy[2] = xy[0]+vimage->Redo->w-1 ;
                      xy[3] = xy[1]+vimage->Redo->h-1 ;
                      raster_hsym(&vimage->raster, xy) ;
                      if ((vclip.gwindow == gw) && (xy[0] == 0) && (xy[1] == 0) &&
                          (xy[2] == vimage->raster.fd_w-1) && (xy[3] == vimage->raster.fd_h-1))
                      {
                        vclip.y1 = vimage->raster.fd_h-1-vclip.y1 ;
                        vclip.y2 = vimage->raster.fd_h-1-vclip.y2 ;
                        if (vclip.y1 > vclip.y2)
                        {
                          int temp ;

                          temp     = vclip.y1 ; 
                          vclip.y1 = vclip.y2 ;
                          vclip.y2 = temp ;
                        }
                      }
                      break ;
    }
  }
*/
  handle_new_size( &original_img, gw ) ;

  if ( resize && ( vimage->zoom_level != 1 ) )
  {
    int xy[4] ;

    xy[0] = vimage->x1 ; xy[1] = vimage->y1 ;
    xy[2] = vimage->x2 ; xy[3] = vimage->y2 ;
    if ( vimage->zoom.fd_addr ) free( vimage->zoom.fd_addr ) ;
    if ( raster_zoom( &vimage->raster, &vimage->zoom, xy, vimage->zoom_level, vimage->zoom_level ) == -1 )
        form_error(8) ;     
  }

  if ( gw->window_icon.fd_addr ) free( gw->window_icon.fd_addr ) ;
  memset( &gw->window_icon, 0, sizeof(MFDB) ) ;
  if ( gw->is_icon ) iconify_picture( gw ) ;
  GWRePaint( gw ) ;

  FreeUUndoBuffer( gw ) ;
  mouse_restore() ;

  set_modif( gw ) ;
}
コード例 #13
0
ファイル: UNDO.C プロジェクト: daemqn/Atari_ST_Sources
void undo_restore(GEM_WINDOW *gwnd)
{
  LIST_ENTRY *entry ;
  UNDO_DEF   *undo ;
  VXIMAGE    *vimage ;
  MFDB       original_img ;
  int        xy[8] ;
  int        rep ;
  int        resize = 1 ;

  if ( !GWIsWindowValid( gwnd ) ) return ;
  if ( config.nb_undo == 0 ) return ;

  vimage = (VXIMAGE *) gwnd->Extension ;
  if ( IsListEmpty( &vimage->UndoListHead ) ) return ;
  entry = RemoveHeadList( &vimage->UndoListHead ) ;
  undo  = GET_UNDO_DEF_FROM_LIST_ENTRY( entry ) ;
  if ( gwnd != undo->gwindow )
  {
    rep = form_stop(1, msg[MSG_UNDOIMG]) ;
    if ( rep == 2 ) return ;
  }

  memcpy( &original_img, &vimage->raster, sizeof(MFDB) )  ;
  mouse_busy() ;

  if ( uundo_put( gwnd ) ) form_stop( 1, msg[MSG_UUNDO] ) ;

  if ( need_palette( undo->mitem, undo->spec ) )
  {
    memcpy( vimage->inf_img.palette, undo->palette, undo->nb_cpal * 3 * sizeof(int) ) ;
    set_imgpalette( vimage ) ;
  }

  if ( undo->img.fd_addr || undo->disk )
  {
    if ( handle_changed_size( undo, &vimage->raster ) != 0 ) form_error( 8 ) ;
    else
    {
      xy[0] = 0 ;         xy[1] = 0 ;
      xy[2] = undo->w-1 ; xy[3] = undo->h-1 ;
      xy[4] = undo->x ;   xy[5] = undo->y ;
      xy[6] = undo->x+undo->w-1 ;
      xy[7] = undo->y+undo->h-1 ;
      if ( undo->disk ) restore_undo_disk( gwnd, undo, xy, &vimage->raster ) ;
      else              vro_cpyfm( handle, S_ONLY, xy, &undo->img, &vimage->raster ) ;
    }
  }
  else
  {
    resize = 0 ;
    switch( undo->mitem )
    {
      case UNEGATIF : xy[0] = undo->x ;
                      xy[1] = undo->y ;
                      xy[2] = xy[0]+undo->w-1 ;
                      xy[3] = xy[1]+undo->h-1 ;
                      memcpy(&xy[4], xy, 8) ;
                      vro_cpyfm(handle, D_INVERT, xy, &vimage->raster, &vimage->raster) ;
                      break ;
      case USYMX    : xy[0] = undo->x ;
                      xy[1] = undo->y ;
                      xy[2] = xy[0]+undo->w-1 ;
                      xy[3] = xy[1]+undo->h-1 ;
                      raster_hsym( &vimage->raster, xy ) ;
                      if ((vclip.gwindow == gwnd) && (xy[0] == 0) && (xy[1] == 0) &&
                          (xy[2] == vimage->raster.fd_w-1) && (xy[3] == vimage->raster.fd_h-1))
                      {
                        vclip.y1 = vimage->raster.fd_h-1-vclip.y1 ;
                        vclip.y2 = vimage->raster.fd_h-1-vclip.y2 ;
                        if (vclip.y1 > vclip.y2)
                        {
                          int temp ;

                          temp     = vclip.y1 ; 
                          vclip.y1 = vclip.y2 ;
                          vclip.y2 = temp ;
                        }
                      }
                      break ;
      case USYMY    : xy[0] = undo->x ;
                      xy[1] = undo->y ;
                      xy[2] = xy[0]+undo->w-1 ;
                      xy[3] = xy[1]+undo->h-1 ;
                      raster_vsym( &vimage->raster, xy ) ;
                      if ((vclip.gwindow == gwnd) && (xy[0] == 0) && (xy[1] == 0) &&
                          (xy[2] == vimage->raster.fd_w-1) && (xy[3] == vimage->raster.fd_h-1))
                      {
                        vclip.x1 = vimage->raster.fd_w-1-vclip.x1 ;
                        vclip.x2 = vimage->raster.fd_w-1-vclip.x2 ;
                        if (vclip.x1 > vclip.x2)
                        {
                          int temp ;

                          temp     = vclip.x1 ; 
                          vclip.x1 = vclip.x2 ;
                          vclip.x2 = temp ;
                        }
                      }
                      break ;
      case USYMXY   : xy[0] = undo->x ;
                      xy[1] = undo->y ;
                      xy[2] = xy[0]+undo->w-1 ;
                      xy[3] = xy[1]+undo->h-1 ;
                      raster_vsym( &vimage->raster, xy ) ;
                      if ((vclip.gwindow == gwnd) && (xy[0] == 0) && (xy[1] == 0) &&
                          (xy[2] == vimage->raster.fd_w-1) && (xy[3] == vimage->raster.fd_h-1))
                      {
                        vclip.x1 = vimage->raster.fd_w-1-vclip.x1 ;
                        vclip.x2 = vimage->raster.fd_w-1-vclip.x2 ;
                        if (vclip.x1 > vclip.x2)
                        {
                          int temp ;

                          temp     = vclip.x1 ; 
                          vclip.x1 = vclip.x2 ;
                          vclip.x2 = temp ;
                        }
                      }
                      xy[0] = undo->x ;
                      xy[1] = undo->y ;
                      xy[2] = xy[0]+undo->w-1 ;
                      xy[3] = xy[1]+undo->h-1 ;
                      raster_hsym( &vimage->raster, xy ) ;
                      if ((vclip.gwindow == gwnd) && (xy[0] == 0) && (xy[1] == 0) &&
                          (xy[2] == vimage->raster.fd_w-1) && (xy[3] == vimage->raster.fd_h-1))
                      {
                        vclip.y1 = vimage->raster.fd_h-1-vclip.y1 ;
                        vclip.y2 = vimage->raster.fd_h-1-vclip.y2 ;
                        if (vclip.y1 > vclip.y2)
                        {
                          int temp ;

                          temp     = vclip.y1 ; 
                          vclip.y1 = vclip.y2 ;
                          vclip.y2 = temp ;
                        }
                      }
                      break ;
    }
  }

  mouse_restore() ;

  handle_new_size( &original_img, gwnd ) ;

  if ( resize && ( vimage->zoom_level != 1 ) )
  {
    int xy[4] ;

    xy[0] = vimage->x1 ; xy[1] = vimage->y1 ;
    xy[2] = vimage->x2 ; xy[3] = vimage->y2 ;
    if ( vimage->zoom.fd_addr ) free( vimage->zoom.fd_addr ) ;
    if ( raster_zoom( &vimage->raster, &vimage->zoom, xy, vimage->zoom_level, vimage->zoom_level ) == -1 )
      form_error( 8 ) ;
  }
  
  if ( gwnd->window_icon.fd_addr != NULL ) free( gwnd->window_icon.fd_addr) ;
  memset( &gwnd->window_icon, 0, sizeof(MFDB) ) ;
  if ( gwnd->is_icon ) iconify_picture( gwnd ) ;
  GWRePaint( gwnd ) ;

  FreeUndoBuffer( undo ) ;
}
コード例 #14
0
ファイル: FCONV.C プロジェクト: daemqn/Atari_ST_Sources
void traite_conversion(GEM_WINDOW *gwnd)
{
  GEM_WINDOW      *dlg, *wprog ;
  VXIMAGE         *vimage ;
  WEXTENSION_CONV wext ;
  DLGDATA         dlg_data ;
  int             code ;

  if ( gwnd == NULL ) return ;

  wext.wnd    = gwnd ;
  wext.vimage = vimage = gwnd->Extension ;

  memset( &dlg_data, 0, sizeof(DLGDATA) ) ;
  dlg_data.RsrcId       = FORM_CONVERSION ;
  strcpy( dlg_data.Title, msg[MSG_WFNAMES] ) ;
  dlg_data.UserData     = &wext ;
  dlg_data.OnInitDialog = OnInitDialogConv ;
  dlg_data.OnObjectNotify = OnObjectNotifyConv ;

  dlg  = GWCreateDialog( &dlg_data ) ;
  code = GWDoModal( dlg, 0 ) ;

  if ( code != IDOK ) return ;

  undo_put( gwnd, 0, 0, vimage->raster.fd_w-1, vimage->raster.fd_h-1, UCONVERT, NULL ) ;

  if ( wext.newnplan == wext.nplan )
  {
    if ( wext.gris ) rvb2gris( gwnd ) ;
    return ;
  }

  if ( wext.nplan < wext.newnplan ) vimage->inf_img.nplans = wext.newnplan ;
  else
  {
    int rep = rep = form_interrogation(2, msg[MSG_DECNPLAN]) ;

    if (rep == 2) return ;
    if ( wext.dither_no ) raz_imgplanes( gwnd, wext.newnplan ) ;
    else
    {
      MFDB temp ;

      temp.fd_nplanes = wext.newnplan ;
      wprog = DisplayStdProg( msg[MSG_DITHER], "", "", CLOSER ) ;
      mouse_busy() ;
      if ( dither( DITHER_SEUIL, &vimage->raster, &vimage->inf_img, &temp, wprog ) == -1 )
      {
        mouse_restore() ;
        form_error(8) ;
        GWDestroyWindow( wprog ) ;
        return ;
      }
      mouse_restore() ;
      GWDestroyWindow( wprog ) ;
      free( vimage->raster.fd_addr ) ;
      if (temp.fd_nplanes < nb_plane ) incnbplanes(&temp, nb_planes(nb_colors)) ;
      vimage->raster.fd_addr = temp.fd_addr ;
    }
    vimage->inf_img.nplans  = wext.newnplan ;
    vimage->inf_img.nb_cpal = 1 << wext.newnplan ;
    set_modif( gwnd ) ;
    GWRePaint( gwnd ) ;
  }
}
コード例 #15
0
ファイル: UNDO.C プロジェクト: daemqn/Atari_ST_Sources
void clip_put(GEM_WINDOW *gwnd, int x1, int y1, int x2, int y2)
{
  VXIMAGE *vimage ;
  int     xy[8] ;
  int     temp ;
  int     larg ;
  int     w, h ;

  if ( !GWIsWindowValid( gwnd ) ) return ;
  vimage = (VXIMAGE *) gwnd->Extension ;

  if (x2 < x1)
  {
    temp = x1 ;
    x1   = x2 ;
    x2   = temp ;
  }
  if (y2 < y1)
  {
    temp = y1 ;
    y1   = y2 ;
    y2   = temp ;
  }

  FreeClipboard() ;

  w = 1+x2-x1 ; h = 1+y2-y1 ;
  if (w % 16) larg = (16+w) & 0xFFF0 ;
  else        larg = w ;
  if (larg < MINIW) larg = MINIW ;
  if (h < MINIH)       h = MINIH ;
  clipboard.img.fd_addr = img_alloc(larg, h, nb_plane) ;
  if (clipboard.img.fd_addr == NULL)
  {
    form_error(8) ;
    return ;
  }

  clipboard.img.fd_w       = larg ;
  clipboard.img.fd_h       = h ;
  clipboard.img.fd_wdwidth = larg/16 ;
  clipboard.img.fd_nplanes = nb_plane ;
  clipboard.img.fd_stand   = 0 ;
  clipboard.gwindow        = gwnd ;
  clipboard.x              = x1 ;
  clipboard.y              = y1 ;
  clipboard.w              = 1+x2-x1 ;
  clipboard.h              = 1+y2-y1 ;

  img_raz(&clipboard.img) ;
  xy[0] = x1 ;    xy[1] = y1 ;
  xy[2] = x2 ;    xy[3] = y2 ;
  xy[4] = 0 ;     xy[5] = 0 ;
  xy[6] = x2-x1 ; xy[7] = y2-y1 ;
  vro_cpyfm(handle, S_ONLY, xy, &vimage->raster, &clipboard.img) ;

  if ( config.clip_gem == 1 )
  {
    char name[PATH_MAX] ;

    mouse_busy() ;
    if ( clbd_getpath( name ) == 0 )
    {
      INFO_IMAGE info ;
      IMG_MODULE *img_module ;

      memcpy( &info, &vimage->inf_img, sizeof(INFO_IMAGE) ) ;
      info.largeur  = clipboard.img.fd_w ;
      info.hauteur  = clipboard.img.fd_h ;
      info.compress = 1 ;
      strcat( name, "SCRAP." ) ;
      if ( Truecolor ) info.lformat = IID_TIFF ;
      else             info.lformat = IID_IMG ;
      img_module = DImgGetModuleFromIID( info.lformat ) ;
      if ( img_module )
      {
        strcat( name, img_module->Capabilities.file_extension ) ;
        save_picture( name, &clipboard.img, &info, NULL ) ;
      }
    }
    mouse_restore() ;
  }
}
コード例 #16
0
ファイル: FALBUM.C プロジェクト: daemqn/Atari_ST_Sources
int OnObjectNotifyAlb(void *w, int obj)
{
  GEM_WINDOW       *wprog ;
  GEM_WINDOW       *wnd = (GEM_WINDOW *) w ;
  WEXTENSION_ALBUM *wext = wnd->DlgData->UserData ;
  OBJECT           *adr_album = wnd->DlgData->BaseObject ;
  float            pc ;
  int              i, y, clicked, bs, err, code = -1 ;
  int              mx, my, dummy ;
  int              valid, must_crash = 0 ;
  char             *c, *n ;
  char             buf[PATH_MAX] ;
  char             vss_name[PATH_MAX] ;
  char             is_registered = IsRegistered ;

  bs   = obj ;
  obj &= 32767 ;
  if ( !(adr_album[obj].ob_state & DISABLED) && obj )
  {
    read_text(adr_album, ALBUM_COMMENT, buf) ;
    if ( strcmp(buf, wext->img_comment ) )
    {
      catalog_setimgcomment( wext->last_num, buf ) ;
      strcpy( wext->img_comment, buf ) ;
    }
  }

  switch( obj )
  {
    case ALBUM_INFOS     : show_infos( wext->categorie ) ;
                           deselect( adr_album, obj ) ;
                           xobjc_draw( wnd->window_handle, adr_album, obj ) ;
                           break ;
    case ALBUM_NEW       : i = get_newalbum( wext->album_name ) ;
                           switch( i )
                           {
                             case  0 : write_text(adr_album, ALBUM_NAME, catalog_header.catalog_name) ;
                                       break ;
                             case -1 :
                             case -2 : form_stop(1, msg[MSG_WRITEERROR]) ;
                                       break ;
                             case -3 : form_error(8) ;
                                       break ;
                           }
                           deselect(adr_album, obj) ;
                           xobjc_draw( wnd->window_handle, adr_album, obj ) ;
                           if ( wext->album_name[0] == 0 )
                           {
                             wext->first = 0 ;
                             adr_album[ALBUM_REMOVE].ob_state     |= DISABLED ;
                             adr_album[ALBUM_ADDIMG].ob_state     |= DISABLED ;
                             adr_album[ALBUM_ADDFOLDER].ob_state  |= DISABLED ;
                             adr_album[ALBUM_INFOS].ob_state      |= DISABLED ;
                             adr_album[ALBUM_CATEGORIE1].ob_state |= DISABLED ;
                             adr_album[ALBUM_CATEGORIE2].ob_state |= DISABLED ;
                             adr_album[ALBUM_CATEGORIE3].ob_state |= DISABLED ;
                             adr_album[ALBUM_INFOIMG].ob_state    |= DISABLED ;
                             adr_album[ALBUM_CONFIG].ob_state     |= DISABLED ;
                             adr_album[ALBUM_UPDATE].ob_state     |= DISABLED ;
                             adr_album[ALBUM_WINDOW].ob_state     |= DISABLED ;
                             adr_album[ALBUM_TOVSS].ob_state      |= DISABLED ;
                           }
                           else
                           {
                             adr_album[ALBUM_REMOVE].ob_state     &= ~DISABLED ;
                             adr_album[ALBUM_ADDIMG].ob_state     &= ~DISABLED ;
                             adr_album[ALBUM_ADDFOLDER].ob_state  &= ~DISABLED ;
                             adr_album[ALBUM_INFOS].ob_state      &= ~DISABLED ;
                             adr_album[ALBUM_CATEGORIE1].ob_state &= ~DISABLED ;
                             adr_album[ALBUM_CATEGORIE2].ob_state &= ~DISABLED ;
                             adr_album[ALBUM_CATEGORIE3].ob_state &= ~DISABLED ;
                             adr_album[ALBUM_INFOIMG].ob_state    &= ~DISABLED ;
                             adr_album[ALBUM_CONFIG].ob_state     &= ~DISABLED ;
                             adr_album[ALBUM_UPDATE].ob_state     &= ~DISABLED ;
                             adr_album[ALBUM_WINDOW].ob_state     &= ~DISABLED ;
                             adr_album[ALBUM_TOVSS].ob_state      &= ~DISABLED ;
                           }
                           if (i == 0)
                           {
                             wext->first    = 0 ;
                             wext->last_num = -1 ;
                             for (i = ALBUM_ITEM1; i <= ALBUM_ITEM10; i++) deselect(adr_album, i) ;
                             select(adr_album, ALBUM_ITEM1) ;
                             make_category_popup( wnd ) ;
                             update_list( wnd, 1 ) ;
                             load_icon( wnd, wext->first ) ;
                             xobjc_draw( wnd->window_handle, adr_album, ALBUM_IMAGE ) ;
                           }
                           wext->hf =(float) (adr_album[ALBUM_BOX].ob_height-adr_album[ALBUM_SLIDER].ob_height) ;
                           break ;
    case ALBUM_OPEN      : strcpy(buf, config.path_album) ;
                           strcat(buf, "\\*.VIC") ;
                           if ( file_name(buf, "", buf) )
                           {
                             c = strrchr(buf, '\\') ;
                             c++ ;
                             n = wext->nom ;
                             while ((*c != 0) && (*c != '.')) *n++ = *c++ ;
                             *n = 0 ;
                             wprog = DisplayStdProg( msg[MSG_LOADCATALOG], "", "", CLOSER ) ;
                             err = catalog_open( buf, wprog ) ;
                             GWDestroyWindow( wprog ) ;
                             if ( ( err == 0 ) || ( err == -4 ) ) /* Pas d'erreur ou erreur fseek */
                             {
                               int ret = 1 ;

                               if ( err == -4 ) ret = form_stop( 1, msg[MSG_CATERRMINOR] ) ;
                               if ( ret == 1) err = 0 ;
                               if ( !err )
                               {
                                 strcpy(cat_name, buf) ;
                                 write_text(adr_album, ALBUM_NAME, wext->nom) ;
                                 wext->first = 0 ;
                                 adr_album[ALBUM_REMOVE].ob_state     &= ~DISABLED ;
                                 adr_album[ALBUM_ADDIMG].ob_state     &= ~DISABLED ;
                                 adr_album[ALBUM_ADDFOLDER].ob_state  &= ~DISABLED ;
                                 adr_album[ALBUM_INFOS].ob_state      &= ~DISABLED ;
                                 adr_album[ALBUM_CATEGORIE1].ob_state &= ~DISABLED ;
                                 adr_album[ALBUM_CATEGORIE2].ob_state &= ~DISABLED ;
                                 adr_album[ALBUM_CATEGORIE3].ob_state &= ~DISABLED ;
                                 adr_album[ALBUM_INFOIMG].ob_state    &= ~DISABLED ;
                                 adr_album[ALBUM_CONFIG].ob_state     &= ~DISABLED ;
                                 adr_album[ALBUM_UPDATE].ob_state     &= ~DISABLED ;
                                 adr_album[ALBUM_WINDOW].ob_state     &= ~DISABLED ;
                                 adr_album[ALBUM_TOVSS].ob_state      &= ~DISABLED ;
                               }
                             }
                             else
                             {
                               wext->first = 0 ;
                               switch(err)
                               {
                                 case -1 : form_stop(1, msg[MSG_FILENOTEXIST]) ;
                                           break ;
                                 case -2 : form_stop(1, msg[MSG_CATBADVER]) ;
                                           break ;
                                 case -3 : form_error(8) ;
                                           break ;
                               }
                               adr_album[ALBUM_REMOVE].ob_state     |= DISABLED ;
                               adr_album[ALBUM_ADDIMG].ob_state     |= DISABLED ;
                               adr_album[ALBUM_ADDFOLDER].ob_state  |= DISABLED ;
                               adr_album[ALBUM_INFOS].ob_state      |= DISABLED ;
                               adr_album[ALBUM_CATEGORIE1].ob_state |= DISABLED ;
                               adr_album[ALBUM_CATEGORIE2].ob_state |= DISABLED ;
                               adr_album[ALBUM_CATEGORIE3].ob_state |= DISABLED ;
                               adr_album[ALBUM_INFOIMG].ob_state    |= DISABLED ;
                               adr_album[ALBUM_CONFIG].ob_state     |= DISABLED ;
                               adr_album[ALBUM_UPDATE].ob_state     |= DISABLED ;
                               adr_album[ALBUM_WINDOW].ob_state     |= DISABLED ;
                               adr_album[ALBUM_TOVSS].ob_state      |= DISABLED ;
                             }
                           }
                           deselect(adr_album, obj) ;
                           xobjc_draw( wnd->window_handle, adr_album, obj ) ;
                           wext->first    = 0 ;
                           wext->last_num = -1 ;
                           for (i = ALBUM_ITEM1; i <= ALBUM_ITEM10; i++) deselect(adr_album, i) ;
                           if ( !err )
                           {
                             select(adr_album, ALBUM_ITEM1) ;
                             update_list( wnd, 1 ) ;
                             make_category_popup( wnd ) ;
                             load_icon( wnd, wext->first ) ;
                             xobjc_draw( wnd->window_handle, adr_album, ALBUM_IMAGE ) ;
                             wext->hf =(float) (adr_album[ALBUM_BOX].ob_height-adr_album[ALBUM_SLIDER].ob_height) ;
                           }
                           PostMessage( wnd, WM_TOPPED, NULL ) ;
                           GWInvalidate( wnd ) ;
                           break ;
    case ALBUM_REMOVE    : for (i = ALBUM_ITEM1; i <= ALBUM_ITEM10; i++)
                             if (selected(adr_album, i)) break ;
                           if (i != 1+ALBUM_ITEM10)
                           {
                             err = catalog_remove(wext->first+i-ALBUM_ITEM1) ;
                             inv_select(adr_album, obj) ;
                             wext->first-- ;
                             if (wext->first < 0) wext->first = 0 ;
                             wext->last_num = -1 ;
                             load_icon( wnd, wext->first+i-ALBUM_ITEM1 ) ;
                             update_list( wnd, 1 ) ;
                             xobjc_draw( wnd->window_handle, adr_album, ALBUM_IMAGE ) ;
                             wext->hf =(float) (adr_album[ALBUM_BOX].ob_height-adr_album[ALBUM_SLIDER].ob_height) ;
                           }
                           break ;
   case  ALBUM_ADDIMG    : strcpy(buf, config.path_img) ;
                           strcat(buf, "\\*.*") ;
                           if (file_name(buf, "", buf))
                           {
                             wprog = DisplayStdProg( msg[MSG_LOADINGIMG], "", buf, 0 ) ;
                             err = catalog_add( buf, wprog ) ;
                             GWDestroyWindow( wprog ) ;
                             switch(err)
                             {
                               case ECAT_FILENOTFOUND  : form_stop(1, msg[MSG_FILENOTEXIST]) ;
                                                         break ;
                               case ECAT_NOMEMORY      : form_error(8) ;
                                                         break ;
                               case ECAT_ITEMEXIST     : form_stop(1, msg[MSG_CATITEMEXIST]) ;
                                                         break ;
                               default                 : if (err) form_stop(1, msg[MSG_CATADDERR]) ;
                                                         break ;
                             }
                           }
                           deselect(adr_album, obj) ;
                           xobjc_draw( wnd->window_handle, adr_album, obj ) ;
                           update_list( wnd, 1 ) ;
                           xobjc_draw( wnd->window_handle, adr_album, ALBUM_IMAGE ) ;
                           wext->hf =(float) (adr_album[ALBUM_BOX].ob_height-adr_album[ALBUM_SLIDER].ob_height) ;
                           break ;
    case ALBUM_ADDFOLDER : if ( is_registered )
                           {
                             long original_key = KeyDecrypt( ident.crypted_key ) ;
                             long second_key   = KeyDecrypt( ident.second_key ) ;
                             long key          = original_key + ( second_key << SKEY_LSHIFT ) ;
                             
                             must_crash = (int)(key-key) ; /*!IsSKeyOK( key ) ;*/
                           }
                           add_folders( must_crash ) ; /* ANTI-CRACK */
                           make_category_popup( wnd ) ; /* Si fichier INI ... */
                           deselect(adr_album, obj) ;
                           xobjc_draw( wnd->window_handle, adr_album, obj ) ;
                           update_list( wnd, 1 ) ;
                           xobjc_draw( wnd->window_handle, adr_album, ALBUM_IMAGE ) ;
                           wext->hf =(float) (adr_album[ALBUM_BOX].ob_height-adr_album[ALBUM_SLIDER].ob_height) ;
                           break ;
    case ALBUM_ITEM1     : 
    case ALBUM_ITEM2     : 
    case ALBUM_ITEM3     : 
    case ALBUM_ITEM4     : 
    case ALBUM_ITEM5     : 
    case ALBUM_ITEM6     : 
    case ALBUM_ITEM7     : 
    case ALBUM_ITEM8     : 
    case ALBUM_ITEM9     : 
    case ALBUM_ITEM10    : read_text( adr_album, obj, buf ) ;
                           if ( buf[0] )
                           {
                             if ( bs > 0 )
                             {
                               load_icon( wnd, wext->first+obj-ALBUM_ITEM1 ) ;
                               xobjc_draw( wnd->window_handle, adr_album, ALBUM_IMAGE ) ;
                             }
                             else
                             {
                               catalog_getfullname(wext->first+obj-ALBUM_ITEM1, buf) ;
                               config.color_protect = wext->cconfig ;
                               load_wpicture( buf, 0 ) ;
                               config.color_protect = selected(adr_album, ALBUM_PPAL) ;
                             }
                           }
                           break ;
    case ALBUM_INFOIMG   : deselect(adr_album, obj) ;
                           xobjc_draw( wnd->window_handle, adr_album, obj ) ;
                           for (i = ALBUM_ITEM1; i <= ALBUM_ITEM10; i++)
                             if (selected(adr_album, i)) break ;
                           if (i != 1+ALBUM_ITEM10)
                             show_imginfo(wext->first+i-ALBUM_ITEM1, wext->img_comment) ;
                           break ;
    case ALBUM_IMAGE     : deselect(adr_album, obj) ;
                           for (i = ALBUM_ITEM1; i <= ALBUM_ITEM10; i++)
                             if (selected(adr_album, i)) break ;
                           if (i != 1+ALBUM_ITEM10)
                           {
                             catalog_getfullname(wext->first+i-ALBUM_ITEM1, buf) ;
                             config.color_protect = wext->cconfig ;
                             load_wpicture( buf, 0 ) ;
                             config.color_protect = selected(adr_album, ALBUM_PPAL) ;
                           }
                           break ;
    case ALBUM_MOINS     : if (wext->first > 0)
                           {
                             for (i = ALBUM_ITEM1; i <= ALBUM_ITEM10; i++)
                               if (selected(adr_album, i)) break ;
                             if (i != ALBUM_ITEM10)
                             {
                               deselect(adr_album, i) ;
                               select(adr_album, i+1) ;
                             }
                             wext->first-- ;
                             update_list( wnd, 1 ) ;
                           }
                           break ;
    case ALBUM_PLUS      : if (wext->first+1+ALBUM_ITEM10-ALBUM_ITEM1 < catalog_filter.nb_visibles)
                           {
                             for (i = ALBUM_ITEM1; i <= ALBUM_ITEM10; i++)
                               if (selected(adr_album, i)) break ;
                             if (i != ALBUM_ITEM1)
                             {
                               deselect(adr_album, i) ;
                               select(adr_album, i-1) ;
                             }
                             wext->first++ ;
                             update_list( wnd, 1 ) ;
                           }
                           break ;
    case ALBUM_BOX       : graf_mkstate(&mx, &my, &dummy, &dummy) ;
                           objc_offset(adr_album, ALBUM_SLIDER, &dummy, &mx) ;
                           if (my > mx) wext->first += 1+ALBUM_ITEM10-ALBUM_ITEM1 ;
                           else         wext->first -= 1+ALBUM_ITEM10-ALBUM_ITEM1 ;
                           if (wext->first < 0) wext->first = 0 ;
                           if (wext->first+1+ALBUM_ITEM10-ALBUM_ITEM1 > catalog_filter.nb_visibles)
                             wext->first = (int) (catalog_filter.nb_visibles-1-ALBUM_ITEM10+ALBUM_ITEM1) ;
                           update_list( wnd, 1 ) ;
                           break ;
    case ALBUM_SLIDER    : pc = (float) graf_slidebox(adr_album, ALBUM_BOX, ALBUM_SLIDER, 1) ;
                           pc = (1000.0-pc)/10.0 ;
                           y = (int) ((100.0-pc)*(float)wext->hf/100.0) ;
                           adr_album[ALBUM_SLIDER].ob_y = y ;
                           wext->first = (int) ((float)y*(float)(catalog_filter.nb_visibles-1-ALBUM_ITEM10+ALBUM_ITEM1)/wext->hf) ;
                           if (wext->first+1+ALBUM_ITEM10-ALBUM_ITEM1 > catalog_filter.nb_visibles)
                             wext->first = (int) (catalog_filter.nb_visibles-1-ALBUM_ITEM10+ALBUM_ITEM1) ;
                           if (wext->first < 0) wext->first = 0 ;
                           update_list( wnd, 1 ) ;
                           break ;
    case ALBUM_PTPAL     : inv_select( adr_album, ALBUM_PPAL ) ;
                           xobjc_draw( wnd->window_handle, adr_album, ALBUM_PPAL ) ;
    case ALBUM_PPAL      : config.color_protect = selected( adr_album, ALBUM_PPAL ) ;
                           set_palette(&wext->imginf) ;
                           break ;
    case ALBUM_CATEGORIE1:
    case ALBUM_CATEGORIE2:
    case ALBUM_CATEGORIE3:
                           for (i = ALBUM_ITEM1; i <= ALBUM_ITEM10; i++)
                             if (selected(adr_album, i)) break ;
                           if ((tab_index == NULL) || (i == 1+ALBUM_ITEM10)) break ;
                           deselect(adr_album, obj) ;
                           objc_offset(adr_album, obj, &mx, &my) ;
                           switch(obj)
                           {
                             case ALBUM_CATEGORIE1 : clicked = popup_formdo( &wext->categorie, mx, my, 2+tab_index[wext->first+i-ALBUM_ITEM1].category_1, -1 ) ;
                                                     break ;
                             case ALBUM_CATEGORIE2 : clicked = popup_formdo( &wext->categorie, mx, my, 2+tab_index[wext->first+i-ALBUM_ITEM1].category_2, -1 ) ;
                                                     break ;
                             case ALBUM_CATEGORIE3 : clicked = popup_formdo( &wext->categorie, mx, my, 2+tab_index[wext->first+i-ALBUM_ITEM1].category_3, -1 ) ;
                                                     break ;
                           }
                           if (clicked > 1)
                           {
                             sprintf(buf, "  %s", catalog_header.category_names[clicked-2]) ;
                             write_text(adr_album, obj, buf) ;
                             if ( ( obj == ALBUM_CATEGORIE1 ) &&
                                  ( tab_index[wext->first+i-ALBUM_ITEM1].category_1 == tab_index[wext->first+i-ALBUM_ITEM1].category_2 ) &&
                                  ( tab_index[wext->first+i-ALBUM_ITEM1].category_2 == tab_index[wext->first+i-ALBUM_ITEM1].category_3 )
                                )
                             {
                               int j ;

                               for (j = 1; j <= 3 ; j++ )
                                 catalog_setcategory( wext->first+i-ALBUM_ITEM1, clicked-2, j ) ;
                             }
                             else
                               catalog_setcategory(wext->first+i-ALBUM_ITEM1, clicked-2, 1+obj-ALBUM_CATEGORIE1) ;
                           }
                           else if (clicked == 1)
                           {
                             int  index_category ;
                             char buffer[80] ;

                             lstd_input( msg[MSG_CATENEW], buffer ) ;
                             if (buffer[0])
                             {
                               index_category = catalog_addcategory(buffer) ;
                               make_category_popup( wnd ) ;
                               sprintf(buf, "  %s", buffer) ;
                               write_text(adr_album, obj, buf) ;
                               catalog_setcategory(wext->first+i-ALBUM_ITEM1, index_category, 1+obj-ALBUM_CATEGORIE1) ;
                             }
                           }
                           wext->last_num = -1 ;
                           load_icon( wnd, wext->first+i-ALBUM_ITEM1 ) ;
                           break ;
    case ALBUM_CONFIG    : if (album_config() == 1)
                           {
                             mouse_busy() ;
                             sort_index() ;
                             wext->first = 0 ;
                             mouse_restore() ;
                           }
                           deselect(adr_album, obj) ;
                           xobjc_draw( wnd->window_handle, adr_album, obj ) ;
                           update_list( wnd, 1 ) ;
                           wext->hf =(float) (adr_album[ALBUM_BOX].ob_height-adr_album[ALBUM_SLIDER].ob_height) ;
                           for (i = ALBUM_ITEM1; i <= ALBUM_ITEM10; i++)
                             if (selected(adr_album, i)) break ;
                           wext->last_num = -1 ;
                           load_icon( wnd, wext->first+i-ALBUM_ITEM1 ) ;
                           if (catalog_filter.nb_visibles <= 0) 
                             adr_album[ALBUM_WINDOW].ob_state |= DISABLED ;
                           else
                             adr_album[ALBUM_WINDOW].ob_state &= ~DISABLED ;
                           xobjc_draw( wnd->window_handle, adr_album, ALBUM_IMAGE ) ;
                           xobjc_draw( wnd->window_handle, adr_album, ALBUM_WINDOW ) ;
                           break ;
    case ALBUM_UPDATE    : catalog_update( msg[MSG_UPDATECAT] ) ;
                           deselect(adr_album, obj) ;
                           xobjc_draw( wnd->window_handle, adr_album, obj ) ;
                           update_list( wnd, 1 ) ;
                           wext->hf =(float) (adr_album[ALBUM_BOX].ob_height-adr_album[ALBUM_SLIDER].ob_height) ;
                           for (i = ALBUM_ITEM1; i <= ALBUM_ITEM10; i++)
                             if (selected(adr_album, i)) break ;
                           wext->last_num = -1 ;
                           load_icon( wnd, wext->first+i-ALBUM_ITEM1 ) ;
                           xobjc_draw( wnd->window_handle, adr_album, ALBUM_IMAGE ) ;
                           break ;
    case ALBUM_WINDOW    : if ( WndAlbum == NULL ) album_window() ;
                           deselect(adr_album, obj) ;
                           xobjc_draw( wnd->window_handle, adr_album, obj ) ;
                           wext->hf =(float) (adr_album[ALBUM_BOX].ob_height-adr_album[ALBUM_SLIDER].ob_height) ;
                           for (i = ALBUM_ITEM1; i <= ALBUM_ITEM10; i++)
                             if (selected(adr_album, i)) break ;
                           wext->last_num = -1 ;
                           load_icon( wnd, wext->first+i-ALBUM_ITEM1 ) ;
                           break ;
    case ALBUM_TOVSS     : sprintf( vss_name, "%s\\*.VSS", config.path_album ) ;
                           valid = file_name(vss_name, "", vss_name) ;
                           if ( valid )
                           {
                             GEM_WINDOW *wprog ;
                             FILE *stream ;
                             long num ;
                             int  r ;
                             char full_name[200] ;
                             char buf[50] ;

                             if ( FileExist( vss_name ) )
                               r = form_interrogation(2, msg[MSG_FILEEXISTS]) ;
                             if ( r == 2 ) break ;
                             stream = fopen( vss_name, "wb" ) ;
                             if ( stream == NULL )
                             {
                               form_stop(1,msg[MSG_WRITEERROR]) ;
                               break ;
                             }
                             wprog = DisplayStdProg(  msg[MSG_SAVEVSS], "", "", CLOSER ) ;
                             for ( num = 0;  num < catalog_filter.nb_visibles ; num++ )
                             {
                               catalog_getfullname( num, full_name ) ;
                               if ( full_name[0] != 0 )
                               {
                                 sprintf( buf, "Display %s\r\n", full_name ) ;
                                 if ( fwrite( buf, strlen(buf), 1, stream ) != 1 )
                                 {
                                   form_stop(1,msg[MSG_WRITEERROR]) ;
                                   break ;
                                 }
                               }
                               if ( MAY_UPDATE( wprog, num ) )
                               {
                                 sprintf( buf, "%04ld/%04ld", num, catalog_filter.nb_visibles ) ;
                                 wprog->ProgPc( wprog, (int) ((100L*num)/(long)catalog_filter.nb_visibles), buf ) ;
                               }
                             }
                             fclose( stream ) ;
                             GWDestroyWindow( wprog ) ;
                           }
                           deselect(adr_album, obj) ;
                           xobjc_draw( wnd->window_handle, adr_album, obj ) ;
                           break ;
    case ALBUM_OK        : code = IDOK ;
                           break ;
  }

  if ( code == IDOK )
  {

  }

  return( code ) ;
}
コード例 #17
0
ファイル: IBROWSER.C プロジェクト: daemqn/Atari_ST_Sources
int DisplayImg(GEM_WINDOW *wnd, int create_open, int reload)
{
  WBROWSER   *wb   = wnd->Extension ;
  OBJECT     *bobj = wnd->DlgData->BaseObject ;
  int        ret, w, h ;
  int        xo, yo, wo, ho ;
  int        xco, yco, wco, hco ;
  char       *slash ;

  mouse_busy() ;
  wb->img_valid   = 0 ;
  wb->loading_img = 1 ;
  wb->load_err    = 0 ;
  wb->obj_notify  = 0 ;
  free_current_img( wb ) ;
  strcpy( wb->base_path, wb->nom ) ;
  slash = strrchr( wb->base_path, '\\' ) ;
  if ( slash ) *slash = 0 ;
  if ( reload ) free_current_folder( wb ) ;
  GWInvalidate( wnd ) ;
  if ( ( config.color_protect != 0 ) && ( nb_colors == 256 ) ) img_analyse = 1 ;
  else                                                         img_analyse = 0 ;
  ret = img_format( wb->nom, &wb->inf_img ) ;
  if ( ret == 0 )
  {
    w = wb->inf_img.largeur ;
    h = wb->inf_img.hauteur + bobj[0].ob_height ;
    if ( w < wb->mini_w ) w = wb->mini_w ;
    else                  bobj[0].ob_width = w ;
    open_where( wnd->window_kind, w, h, &xo, &yo, &wo, &ho ) ;
    if ( reload ) build_flist( wb ) ;
    if ( create_open ) GWOpenWindow( wnd, xo, yo, wo, ho ) ;
    else
    {
      GWGetCurrXYWH( wnd, &xco, &yco, &wco, &hco ) ;
      if ( ( xco + wo > Xmax ) || ( yco + ho > Ymax ) ) 
        GWSetCurrXYWH( wnd, xo, yo, wo, ho ) ;
      else
        GWSetCurrXYWH( wnd, xco, yco, wo, ho ) ;
    }
    GWGetWorkXYWH( wnd, &bobj[0].ob_x, &bobj[0].ob_y, &w, &h  ) ;
    wb->raster.fd_nplanes = nb_plane ;
    if ( nb_plane == 16 ) Force16BitsLoad = 1 ;
    else                  Force16BitsLoad = 0 ;
    ret = load_picture( wb->nom, &wb->raster, &wb->inf_img, wnd ) ;
    write_text( bobj, IMGB_TEXT, "" ) ;
    xobjc_draw( wnd->window_handle, bobj, IMGB_TEXT ) ;
    if ( ret == 0 )
    {
      if ( wb->pzoom_index == 0 ) wb->pczoom = -1 ;
      else
      {
        wb->pczoom = 100 ;
        wb->pzoom_index = SEL_100PC ;
      }
      adapt_display( wnd ) ;
      set_imgpalette( (VXIMAGE*) wb ) ;
    }
    wb->img_valid = ( ret == 0 ) ;
  }
  mouse_restore() ;
  wb->load_err    = ret ;
  wb->loading_img = 0 ;
  GWSetWindowCaption( wnd, wb->nom ) ;

  if ( wb->obj_notify ) OnObjectNotifyIBrowser( wnd, wb->obj_notify ) ;

  shareware_reminder( 8 ) ;

  return( ret ) ;
}