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 ) ; }
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 ) ; }
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; }
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 ) ; }
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() ; }
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() ; } }
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 ) ; }
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; }
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; }
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 ) ; }
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 ) ; }
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 ) ; }
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 ) ; }
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 ) ; } }
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() ; } }
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 ) ; }
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 ) ; }