int half_img(MFDB *s, MFDB *d) { int pxy[8], i, j; MFDB tmp; mfdb(&tmp,NULL,s->fd_w/2,s->fd_h,s->fd_stand,s->fd_nplanes); tmp.fd_w=s->fd_w/2; tmp.fd_addr=calloc(1,mfdb_size(&tmp)); if(!tmp.fd_addr) return(FALSE); pxy[1]=pxy[5]=0; pxy[3]=pxy[7]=s->fd_h-1; for(i=0; i<s->fd_w/2; i++) { pxy[0]=pxy[2]=2*i; pxy[4]=pxy[6]=i; vro_cpyfm(x_handle,S_ONLY,pxy,s,&tmp); } pxy[0]=pxy[4]=0; pxy[2]=pxy[6]=s->fd_w/2-1; for(j=0; j<s->fd_h/2; j++) { pxy[1]=pxy[3]=2*j; pxy[5]=pxy[7]=j; vro_cpyfm(x_handle,S_ONLY,pxy,&tmp,d); } free(tmp.fd_addr); return(TRUE); }
LDV_STATUS cdecl Run(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) { int xy[8] ; if ( VDIHandle == -1 ) VDIHandle = vdihandle() ; #ifndef NOTOPINPLACE { /* Recopie le raster source vers la destination */ xy[0] = xy[4] = 0 ; xy[1] = xy[5] = 0 ; xy[2] = xy[6] = in->Raster.fd_w - 1 ; xy[3] = xy[7] = in->Raster.fd_h - 1 ; vro_cpyfm( VDIHandle, S_ONLY, xy, &in->Raster, &out->Raster ) ; } #endif xy[0] = params->x1 ; xy[1] = params->y1 ; xy[2] = params->x2 ; xy[3] = params->y2 ; memcpy( &xy[4], xy, 4*sizeof(int) ) ; vro_cpyfm( VDIHandle, D_INVERT, xy, &out->Raster, &out->Raster ) ; return( ELDV_NOERROR ) ; }
void update_raster(GEM_WINDOW *gwnd, int xmin, int ymin, int xmax, int ymax) { VXIMAGE *vimage ; MFDB zoom ; int xy[8] ; int cxy[4] ; int xi, yi, wx, wy ; int posx, posy ; int zoom_level ; if ( gwnd == NULL ) return ; vimage = (VXIMAGE *) gwnd->Extension ; gwnd->GetWorkXYWH( gwnd, &xi, &yi, &wx, &wy ) ; posx = vimage->x1 ; posy = vimage->y1 ; if (xmax > Xmax) xmax = Xmax ; if (ymax > Ymax) ymax = Ymax ; zoom_level = vimage->zoom_level ; xy[0] = xmin ; xy[1] = ymin ; xy[2] = xmax ; xy[3] = ymax ; xy[4] = posx+(xmin-xi) ; xy[5] = posy+(ymin-yi) ; xy[6] = xy[4]+(1+xmax-xmin)/zoom_level-1 ; xy[7] = xy[5]+(1+ymax-ymin)/zoom_level-1 ; cxy[0] = xdesk ; cxy[1] = ydesk ; cxy[2] = xdesk+wdesk-1 ; cxy[3] = ydesk+hdesk-1 ; vs_clip( handle, 1, cxy ) ; v_hide_c( handle ) ; if ( zoom_level == 1 ) vro_cpyfm( handle, S_ONLY, xy, &screen, &vimage->raster ) ; else { int xyarray[8] ; memcpy(xyarray, xy, 8) ; xyarray[4] = xmin-xi ; xyarray[5] = ymin-yi ; xyarray[6] = xmax-xi ; xyarray[7] = ymax-yi ; vro_cpyfm(handle, S_ONLY, xyarray, &screen, &vimage->zoom) ; if (raster_zoom(&screen, &zoom, xy, -zoom_level, -zoom_level) == 0) { xy[0] = 0 ; xy[1] = 0 ; xy[2] = (1+xmax-xmin)/zoom_level-1 ; xy[3] = (1+ymax-ymin)/zoom_level-1 ; vro_cpyfm(handle, S_ONLY, xy, &zoom, &vimage->raster) ; free(zoom.fd_addr) ; } } v_show_c(handle, 0) ; vs_clip(handle, 0, cxy) ; }
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 ) ; }
global void *form_save(int d, RECT r, void *area) { MFDB Mscreen={0}; MFDB Mpreserve; G_i pnt[8]; r.x-=d, r.y-=d, r.w+=2*d, r.h+=2*d; rtopxy(pnt, &r); ritopxy(pnt+4,0,0,r.w,r.h); DIAG((D_menu,nil,"form_save %d/%d,%d/%d\n",r.x,r.y,r.w,r.h)); Mpreserve.fd_w = r.w; Mpreserve.fd_h = r.h; Mpreserve.fd_wdwidth = (r.w + 15) / 16; Mpreserve.fd_nplanes = screen.planes; Mpreserve.fd_stand = 0; if (area == nil) area = xmalloc(calc_back(&r,screen.planes),210); if (area) { Mpreserve.fd_addr = area; vro_cpyfm(C.vh, S_ONLY, pnt, &Mscreen, &Mpreserve); } return area; }
int cdecl draw_albumimg(PARMBLK *paramblk) { WEXTENSION_ALBUM *wext = (WEXTENSION_ALBUM *) paramblk->pb_parm ; int cxy[4] ; int xy[8] ; if (wext->albumimg.fd_addr != NULL) { xy[0] = 0 ; xy[1] = 0 ; xy[2] = wext->albumimg.fd_w-1 ; xy[3] = wext->albumimg.fd_h-1 ; xy[4] = paramblk->pb_x ; xy[5] = paramblk->pb_y ; xy[6] = xy[4]+wext->albumimg.fd_w-1 ; xy[7] = xy[5]+wext->albumimg.fd_h-1 ; cxy[0] = paramblk->pb_xc ; cxy[1] = paramblk->pb_yc ; cxy[2] = paramblk->pb_xc+paramblk->pb_wc-1 ; cxy[3] = paramblk->pb_yc+paramblk->pb_hc-1 ; vs_clip(handle, 1, cxy) ; v_hide_c(handle) ; vro_cpyfm(handle, S_ONLY, xy, &wext->albumimg, &screen) ; v_show_c(handle, 1) ; vs_clip(handle, 0, cxy) ; } return(0) ; }
void new_edit_vximage(WBROWSER *wb) { GEM_WINDOW *new_wnd ; VXIMAGE *new_vimage ; MFDB *raster ; int xy[8] ; int w, h ; int tpmx, tpmy ; char name[50] ; if ( wb->pczoom == 100 ) raster = &wb->raster ; else raster = &wb->zoom ; w = raster->fd_w ; h = raster->fd_h ; tpmx = (int) (27070.0/(double)wb->inf_img.lpix) ; tpmy = (int) (27070.0/(double)wb->inf_img.hpix) ; if ( Truecolor ) strcpy( name, "NEW.TIF" ) ; else strcpy( name, "NEW.IMG" ) ; new_wnd = nouvelle_wimage( name, w, h, 1 << wb->inf_img.nplans, tpmx, tpmy ) ; if ( new_wnd ) { new_vimage = (VXIMAGE *) new_wnd->Extension ; xy[0] = 0 ; xy[1] = 0 ; xy[2] = w - 1 ; xy[3] = h - 1 ; xy[4] = 0 ; xy[5] = 0 ; xy[6] = w-1 ; xy[7] = h-1 ; vro_cpyfm( handle, S_ONLY, xy, raster, &new_vimage->raster ) ; } else form_error( 8 ) ; }
void scrollup(int hand, short howmany) { GRECT box; GRECT area; int xy[8],temp; area.g_x=wn[hand].wwa.g_x; area.g_y=wn[hand].wwa.g_y; area.g_w=wn[hand].wwa.g_w-NLW; area.g_h=wn[hand].wwa.g_h-ith*2-VT+3; if(wn[hand].stat==WMDONTWRITE)return; startupdate(); wind_get(wn[hand].hand,WF_FIRSTXYWH,&box.g_x,&box.g_y,&box.g_w,&box.g_h); while (box.g_w && box.g_h){ if(rc_intersect(&area,&box)){ temp=th*howmany; if(temp>box.g_h)temp=box.g_h; xy[0]=box.g_x;xy[1]=box.g_y+temp; xy[2]=box.g_x+box.g_w-1;xy[3]=box.g_y+box.g_h-1; xy[4]=box.g_x;xy[5]=box.g_y; xy[6]=box.g_x+box.g_w-1;xy[7]=box.g_y+box.g_h-temp; vro_cpyfm(ws.handle,S_ONLY,xy,&scr,&scr); box.g_y=box.g_y+box.g_h-temp; box.g_h=temp+1; dodirty(hand,box); } wind_get(wn[hand].hand,WF_NEXTXYWH,&box.g_x,&box.g_y,&box.g_w,&box.g_h); } finishupdate(); return; }
static void GEM_LockScreen(_THIS) { if (!GEM_locked) { /* Lock AES */ wind_update(BEG_UPDATE); wind_update(BEG_MCTRL); /* Reserve memory space, used to be sure of compatibility */ form_dial( FMD_START, 0,0,0,0, 0,0,VDI_w,VDI_h); /* Save menu bar */ if (GEM_menubar) { MFDB mfdb_src; short blitcoords[8]; mfdb_src.fd_addr=GEM_menubar; mfdb_src.fd_w=GEM_desk_w; mfdb_src.fd_h=GEM_desk_y; mfdb_src.fd_wdwidth=GEM_desk_w>>4; mfdb_src.fd_nplanes=VDI_bpp; mfdb_src.fd_stand= mfdb_src.fd_r1= mfdb_src.fd_r2= mfdb_src.fd_r3= 0; blitcoords[0] = blitcoords[4] = 0; blitcoords[1] = blitcoords[5] = 0; blitcoords[2] = blitcoords[6] = GEM_desk_w-1; blitcoords[3] = blitcoords[7] = GEM_desk_y-1; vro_cpyfm(VDI_handle, S_ONLY, blitcoords, &VDI_dst_mfdb, &mfdb_src); } GEM_locked=SDL_TRUE; }
LOCAL VOID bb_set(REG WORD sx, REG WORD sy, REG WORD sw, REG WORD sh, REG WORD *pts1, REG WORD *pts2, MFDB *pfd, MFDB *psrc, MFDB *pdst) { WORD oldsx; /* get on word boundary */ oldsx = sx; sx = (sx / 16) * 16; sw = ( ((oldsx - sx) + (sw + 15)) / 16 ) * 16; gl_tmp.fd_stand = TRUE; gl_tmp.fd_wdwidth = sw / 16; gl_tmp.fd_w = sw; gl_tmp.fd_h = sh; graf_mouse(M_OFF, NULL); pts1[0] = sx; pts1[1] = sy; pts1[2] = sx + sw - 1; pts1[3] = sy + sh - 1; pts2[0] = 0; pts2[1] = 0; pts2[2] = sw - 1; pts2[3] = sh - 1 ; gsx_fix(pfd, 0x0L, 0, 0); vro_cpyfm( gl_handle, S_ONLY, &ptsin[0], psrc, pdst ); graf_mouse(M_ON, NULL); }
VOID rast_op(WORD mode, GRECT *s_area, MFDB *s_mfdb, GRECT *d_area, MFDB *d_mfdb) { WORD pxy[8]; grect_to_array(s_area, pxy); grect_to_array(d_area, &pxy[4]); vro_cpyfm( gl_handle, mode, pxy, s_mfdb, d_mfdb); }
void OnImgDraw(GEM_WINDOW *wnd, int xywh[4]) { WBROWSER *wb = wnd->Extension ; MFDB *raster ; int w, h ; int off_x, off_y, xi, yi, wi, hi ; int xy[8] ; int posx, posy ; /* Bug si mauvaise cle */ if ( IsRegistered && KeyDecrypt( ident.crypted_key ) > KEY_MAX ) wnd = NULL ; /* ANTI-CRACK */ wnd->GetWorkXYWH( wnd, &xi, &yi, &wi, &hi ) ; if ( !wb->img_valid || wb->load_err ) { GWOnDraw( wnd, xywh ) ; if ( wb->load_err ) { vsl_ends( handle, 0, 0 ) ; vsl_width( handle, 3 ) ; vsl_color( handle, 1 ) ; line( xi + wi -1, yi, xi, yi + hi - 1 ) ; line( xi, yi, xi + wi -1, yi + hi - 1 ) ; } return ; } posx = wb->x1 ; posy = wb->y1 ; if ( wb->pczoom == 100 ) raster = &wb->raster ; else raster = &wb->zoom ; off_x = xywh[0] - xi ; off_y = xywh[1] - yi ; w = xywh[2] ; if ( off_x + posx + w > raster->fd_w ) w -= off_x + posx + w - raster->fd_w ; h = xywh[3] ; xy[4] = xywh[0] ; xy[5] = xywh[1] ; xy[6] = xywh[0] + w - 1 ; xy[7] = xywh[1] + h - 1 ; xy[0] = off_x + posx ; xy[1] = off_y + posy ; xy[2] = xy[0] + w - 1 ; xy[3] = xy[1] + h - 1 ; vro_cpyfm( handle, S_ONLY, xy, raster, &screen ) ; if ( w != xywh[2] ) { xy[0] = 1 + xy[6] ; xy[2] = xywh[2] - w ; xy[1] = xywh[1] ; xy[3] = xywh[3] ; GWOnDraw( wnd, xy ) ; } }
void invert(RECT *r) { int pxy[8]; MFDB mfdb; xd_rect2pxy(r, pxy); xd_rect2pxy(r, &pxy[4]); mfdb.fd_addr = NULL; vro_cpyfm(vdi_handle, D_INVERT, pxy, &mfdb, &mfdb); }
void clear(RECT *r) { int pxy[8]; MFDB mfdb; xd_rect2pxy(r, pxy); xd_rect2pxy(r, &pxy[4]); mfdb.fd_addr = NULL; vro_cpyfm(vdi_handle, ALL_WHITE, pxy, &mfdb, &mfdb); }
void v_gtext(int handle, int ox, int oy, const char *text) { /*This routine prints a string in the default font. A few effects are available and may be combined. NORMAL 0 No effects THICKENED 1 The text is 1 pixel thicker, giving a bolder look SHADED 2 Only odd pixels are printed, giving a feint look SLANTED 4 The top of the text is displaced to the right UNDERLINED 8 The text is underlined, apart from spaces DOUBLED 16 The text is twice as thick, at the original height*/ char *whole, *mover, *lose=(char *)text, *m; int i, j, k, l, n=0, z=ox, length, start, letter, bits, thisdot, lastdot, thick=(_texteff&THICKENED), shade=(_texteff&SHADED), uline=(_texteff&UNDERLINED), slant=(_texteff&SLANTED), twice=(_texteff&DOUBLED); short px[8]; FDB gtextfdb; gtextfdb.fd_h=_font->form_height; gtextfdb.fd_w=_clipx2-ox; gtextfdb.fd_addr=alloca(gtextfdb.fd_h*gtextfdb.fd_w); memset(gtextfdb.fd_addr, _fillcol, gtextfdb.fd_h*gtextfdb.fd_w); oy-=_font->top; if(oy<0) { n=-oy; oy=0; } px[0]=px[1]=0; px[3]=gtextfdb.fd_h-1-n; px[4]=ox; px[5]=oy; px[7]=oy+px[3]; while(*lose&&z<_clipx2) { letter=*lose-_font->first_ade; if(letter>_font->last_ade||letter<0) break; start=_font->coff_base[letter]; length=_font->coff_base[letter+1]-start; bits=7-(start&7); whole=(char *)_font->form_base+(start>>3)+n*_font->form_width; m=gtextfdb.fd_addr+(z-ox); i=n; while(i<_font->form_height-(uline==UNDERLINED)) { mover=whole; k=bits; l=0; if(slant) l=(_font->form_height-i)>>1; thisdot=j=0; while(j<length&&z+l<_clipx2) { lastdot=thisdot; thisdot=(*mover&(1<<k))?1:0; if((thick&&lastdot)||(thisdot&&(!(((j+i)&1)&&shade)))) m[l]=_textcol; if(twice&&z+l<_clipx2) { l++; if(thisdot) m[l]=_textcol; } if((--k)<0) { k=7; mover++; } j++; l++; } i++; m+=gtextfdb.fd_w; whole+=_font->form_width; } if(uline&&letter!=' ') memset(m, _textcol, l); z+=l; lose++; } if(slant) z+=((_font->form_height>>(twice!=DOUBLED))+(thick==THICKENED)); px[2]=z-1-ox; px[6]=z-1; vro_cpyfm(handle, S_ONLY, px, >extfdb, &_screen); }
global void form_copy(RECT *fr, RECT *to) { G_i pnt[8]; MFDB Mscreen={0}; rtopxy(pnt,fr); rtopxy(pnt+4,to); hidem(); vro_cpyfm(C.vh, S_ONLY, pnt, &Mscreen, &Mscreen); showm(); }
void move_screen(RECT *dest, RECT *src) { MFDB mfdb; int pxy[8]; mfdb.fd_addr = NULL; xd_rect2pxy(src, pxy); xd_rect2pxy(dest, &pxy[4]); vro_cpyfm(vdi_handle, S_ONLY, pxy, &mfdb, &mfdb); }
/* because this is an on-screen plotter, this is an screen to screen copy. */ static int copy_rect( GEM_PLOTTER self, GRECT src, GRECT dst ) { MFDB devmf; MFDB scrmf; short pxy[8]; GRECT vis; /* clip to visible rect, only needed for onscreen renderer: */ plotter_get_visible_grect( self, &vis ); if( !rc_intersect(&vis, &src) ) return 1; if( !rc_intersect(&vis, &dst) ) return 1; src.g_x = VIEW(self).x + src.g_x; src.g_y = VIEW(self).y + src.g_y; dst.g_x = VIEW(self).x + dst.g_x; dst.g_y = VIEW(self).y + dst.g_y; devmf.fd_addr = NULL; devmf.fd_w = src.g_w; devmf.fd_h = src.g_h; devmf.fd_wdwidth = 0; devmf.fd_stand = 0; devmf.fd_nplanes = 0; devmf.fd_r1 = devmf.fd_r2 = devmf.fd_r3 = 0; scrmf.fd_addr = NULL; scrmf.fd_w = dst.g_w; scrmf.fd_h = dst.g_h; scrmf.fd_wdwidth = 0 ; scrmf.fd_stand = 0; scrmf.fd_nplanes = 0; scrmf.fd_r1 = scrmf.fd_r2 = scrmf.fd_r3 = 0; pxy[0] = src.g_x; pxy[1] = src.g_y; pxy[2] = pxy[0] + src.g_w-1; pxy[3] = pxy[1] + src.g_h-1; pxy[4] = dst.g_x; pxy[5] = dst.g_y; pxy[6] = pxy[4] + dst.g_w-1; pxy[7] = pxy[5] + dst.g_h-1; self->lock( self ); vro_cpyfm( self->vdi_handle, S_ONLY, (short*)&pxy, &devmf, &scrmf); self->unlock( self ); return( 1 ); }
void scrolldown(void) { short xy[8]; startupdate(); xy[0]=wn[cwin].wwa.g_x;xy[1]=wn[cwin].wwa.g_y; xy[2]=wn[cwin].wwa.g_x+wn[cwin].wwa.g_w-1;xy[3]=wn[cwin].wwa.g_y+wn[cwin].wwa.g_h-ith*2-VT-th; xy[4]=wn[cwin].wwa.g_x;xy[5]=wn[cwin].wwa.g_y+th; xy[6]=wn[cwin].wwa.g_x+wn[cwin].wwa.g_w-1;xy[7]=wn[cwin].wwa.g_y+wn[cwin].wwa.g_h-ith*2-VT; vro_cpyfm(ws.handle,S_ONLY,xy,&scr,&scr); xy[0]=wn[cwin].wwa.g_x;xy[1]=wn[cwin].wwa.g_y; xy[2]=wn[cwin].wwa.g_x+wn[cwin].wwa.g_w-1;xy[3]=wn[cwin].wwa.g_y; xy[6]=wn[cwin].wwa.g_x;xy[7]=wn[cwin].wwa.g_y+th; xy[4]=wn[cwin].wwa.g_x+wn[cwin].wwa.g_w-1;xy[5]=wn[cwin].wwa.g_y+th; v_fillarea(ws.handle,4,xy); finishupdate(); }
void display_bitmap(short x, short y) { MFDB screen; short p[8]; screen.fd_addr = NULL; p[0] = p[1] = 0; p[2] = LOGO_W-1; p[3] = LOGO_H - 1; p[4] = x; p[5] = y; p[6] = x + LOGO_W - 1; p[7] = y + LOGO_H - 1; vro_cpyfm(my_handle, S_ONLY, p, &logo_bm, &screen); }
void OnDrawRTZoom(void *wnd, int xycoords[4]) { int xy[8] ; int index ; int must_fill = ( rtoffx > 0 ) || ( rtoffy > 0 ) ; if ( must_fill ) { if ( !Truecolor ) index = 0 ; else { int rgb[3] = { 1000, 1000, 1000 } ; index = 19 ; vs_color( handle, index, rgb ) ; } vswr_mode( handle, MD_REPLACE ) ; vsf_color( handle, index ) ; vsf_interior( handle, FIS_SOLID ) ; vsf_perimeter( handle, 0 ) ; } if ( intersect( rtx + rtoffx, rty + rtoffy, rtw - rtoffx, rth - rtoffy, xycoords[0], xycoords[1], xycoords[2], xycoords[3], &xy[4] ) ) { xy[0] = smart_offx + xy[4] - rtx - rtoffx ; xy[1] = xy[5] - rty - rtoffy ; xy[2] = smart_offx + xy[6] - rtx - rtoffx ; xy[3] = xy[7] - rty - rtoffy ; vro_cpyfm( handle, S_ONLY, xy, &RTZoomDst, &screen ) ; if ( must_fill ) { if ( intersect( rtx, rty, rtoffx, rth, xycoords[0], xycoords[1], xycoords[2], xycoords[3], xy ) ) vr_recfl( handle, xy ) ; if ( intersect( rtx, rty, rtw, rtoffy, xycoords[0], xycoords[1], xycoords[2], xycoords[3], xy ) ) vr_recfl( handle, xy ) ; } } }
static void ShowCursor(GEM_WINDOW *gwnd, char show) { HEX_DUMP *hex_dump = (HEX_DUMP *) gwnd->Extension ; if ( hex_dump->sel_is_xor != show ) { int xy[8] ; int x, y, w, h, htline ; htline = hex_dump->h_char + hex_dump->interline ; GWGetWorkXYWH( gwnd, &x, &y, &w, &h ) ; xy[0] = xy[4] = x + ( hex_dump->nb_digits + 2 + (int)hex_dump->xcursor ) * hex_dump->w_char ; xy[1] = xy[5] = y + (int)(hex_dump->ycursor - hex_dump->ystart)* htline ; xy[2] = xy[6] = xy[0] + hex_dump->w_char - 1 ; xy[3] = xy[7] = xy[1] + hex_dump->h_char - 1 ; v_hide_c( handle ) ; vro_cpyfm( handle, D_INVERT, xy, &screen, &screen ) ; v_show_c( handle, 1 ) ; hex_dump->sel_is_xor = show ; } }
global void form_restore(int d, RECT r, void *area) { MFDB Mscreen={0}; MFDB Mpreserve; G_i pnt[8]; if (!area) return; r.x-=d, r.y-=d, r.w+=2*d, r.h+=2*d; rtopxy(pnt+4, &r); ritopxy(pnt,0,0,r.w,r.h); DIAG((D_menu,nil,"form_restore %d/%d,%d/%d\n",r.x,r.y,r.w,r.h)); Mpreserve.fd_w = r.w; Mpreserve.fd_h = r.h; Mpreserve.fd_wdwidth = (r.w + 15) / 16; Mpreserve.fd_nplanes = screen.planes; Mpreserve.fd_stand = 0; Mpreserve.fd_addr = area; vro_cpyfm(C.vh, S_ONLY, pnt, &Mpreserve, &Mscreen); free(area); }
cz1pars() { FDB savefdb; int mousex,mousey,mstate,i,kstate; int done=0; int mbefore=0; int key,event; /* grab mouse control off of AES */ wind_update(3); /* turn clipping off during all of module 7 */ vs_clip(gl_hand,0,&dummy); /* save screen which will lie under cz1pars window */ savefdb.fd_addr= saveptr; savefdb.fd_w= 640; savefdb.fd_h= 200*rez; savefdb.fd_wdwidth= 40; savefdb.fd_stand= 0; if (rez==1) savefdb.fd_nplanes= 2; else savefdb.fd_nplanes= 1; xyarray[0]= cz1_xy[0]; xyarray[1]= rez*cz1_xy[1]; xyarray[2]= cz1_xy[2]; xyarray[3]= rez*cz1_xy[7]; xyarray[4]= 0; xyarray[5]= 0; xyarray[6]= cz1_xy[2]-cz1_xy[0]; xyarray[7]= rez*(cz1_xy[7]-cz1_xy[1]); v_hide_c(gl_hand); if (saveptr) vro_cpyfm(gl_hand,3,xyarray,&scrfdb,&savefdb); v_show_c(gl_hand,0); graf_growbox((cz1_xy[0]+cz1_xy[2])/2,rez*(cz1_xy[1]+cz1_xy[5])/2,1,1, cz1_xy[0],cz1_xy[1], cz1_xy[2]-cz1_xy[0]+1,rez*(cz1_xy[7]-cz1_xy[1])+1); cz1_wind(); /* put up cz1pars window */ /* executive loop */ while (!done) { vq_mouse(gl_hand,&mstate,&mousex,&mousey); kstate=Kbshift(0xffff); if ((mstate&3)&&!mbefore) done= do_cz1(mousex,mousey,mstate,kstate); event= evnt_multi(MU_TIMER|MU_KEYBD,0,0,0,0,0,0,0,0,0,0,0,0,0, &dummy,1,0,&mousex,&mousey,&dummy,&dummy,&key,&dummy); if ((event & MU_KEYBD)&&(key==0x6100)) cz1_undo(mousex,mousey); mbefore=mstate; } vs_clip(gl_hand,0,&dummy); /* turn clipping off (clobbered by redraw */ /* restore the screen */ xyarray[0]= 0; xyarray[1]= 0; xyarray[2]= cz1_xy[2]-cz1_xy[0]; xyarray[3]= rez*(cz1_xy[7]-cz1_xy[1]); xyarray[4]= cz1_xy[0]; xyarray[5]= rez*cz1_xy[1]; xyarray[6]= cz1_xy[2]; xyarray[7]= rez*cz1_xy[7]; if (saveptr) { v_hide_c(gl_hand); vro_cpyfm(gl_hand,3,xyarray,&savefdb,&scrfdb); v_show_c(gl_hand,0); } else redraw(ws_hand,cz1_xy[0],rez*cz1_xy[1], cz1_xy[2]-cz1_xy[0]+1,rez*(cz1_xy[7]-cz1_xy[1])+1); graf_shrinkbox((cz1_xy[0]+cz1_xy[2])/2,rez*(cz1_xy[1]+cz1_xy[5])/2,1,1, cz1_xy[0],cz1_xy[1], cz1_xy[2]-cz1_xy[0]+1,rez*(cz1_xy[7]-cz1_xy[1])+1); /* return mouse control to AES */ wind_update(2); } /* end cz1pars() */
void pleine_page(GEM_WINDOW *gwnd) { VXIMAGE *vimage ; EVENT evnt ; int xyarray[8] ; int largeur, hauteur ; int posx, posy ; int which ; int unit ; char xscroll, yscroll ; char fin = 0 ; char cp ; if ( gwnd == NULL ) return ; vimage = (VXIMAGE *) gwnd->Extension ; memset( &evnt, 0, sizeof(EVENT) ) ; evnt.ev_mflags = MU_KEYBD | MU_BUTTON | MU_TIMER ; evnt.ev_mbclicks = 258 ; evnt.ev_bmask = 3 ; cls_gemscreen() ; wind_update(BEG_UPDATE) ; cp = config.color_protect ; config.color_protect = 0 ; set_imgpalette( vimage ) ; v_hide_c(handle) ; largeur = vimage->raster.fd_w ; hauteur = vimage->raster.fd_h ; posx = (1+Xmax-largeur)/2 ; if (posx < 0) posx = 0 ; posy = (1+Ymax-hauteur)/2 ; if (posy < 0) posy = 0 ; xscroll = 0 ; yscroll = 0 ; if (posx == 0) { xyarray[0] = 0 ; xyarray[2] = Xmax ; xscroll = 1 ; } else { xyarray[0] = 0 ; xyarray[2] = largeur-1 ; } if (posy == 0) { xyarray[1] = 0 ; xyarray[3] = Ymax ; yscroll = 1 ; } else { xyarray[1] = 0 ; xyarray[3] = hauteur-1 ; } xyarray[4] = posx ; xyarray[5] = posy ; xyarray[6] = posx+xyarray[2]-xyarray[0] ; xyarray[7] = posy+xyarray[3]-xyarray[1] ; vro_cpyfm(handle, S_ONLY, xyarray, &vimage->raster, &screen) ; do { which = EvntMulti( &evnt ) ; if ( which & MU_KEYBD ) { unit = 4 ; switch( evnt.ev_mkreturn ) { case CURSOR_SUP: unit = 32 ; case CURSOR_UP : if ( yscroll ) { xyarray[1] -= unit ; xyarray[3] -= unit ; if (xyarray[1] < 0) { xyarray[1] = 0 ; xyarray[3] = Ymax ; } vro_cpyfm(handle, S_ONLY, xyarray, &vimage->raster, &screen) ; } break ; case CURSOR_SDN: unit = 32 ; case CURSOR_DN : if (yscroll) { xyarray[1] += unit ; xyarray[3] += unit ; if (xyarray[3] > hauteur-1) { xyarray[3] = hauteur-1 ; xyarray[1] = hauteur-Ymax-1 ; } vro_cpyfm(handle, S_ONLY, xyarray, &vimage->raster, &screen) ; } break ; case CURSOR_SLT: unit = 32 ; case CURSOR_LT : if (xscroll) { xyarray[0] -= unit ; xyarray[2] -= unit ; if (xyarray[0] < 0) { xyarray[0] = 0 ; xyarray[2] = Xmax ; } vro_cpyfm(handle, S_ONLY, xyarray, &vimage->raster, &screen) ; } break ; case CURSOR_SRT: unit = 32 ; case CURSOR_RT : if (xscroll) { xyarray[0] += unit ; xyarray[2] += unit ; if (xyarray[2] > largeur-1) { xyarray[2] = largeur-1 ; xyarray[0] = largeur-Xmax-1 ; } vro_cpyfm(handle, S_ONLY, xyarray, &vimage->raster, &screen) ; } break ; case QUITTER : fin = 1 ; break ; default : fin = 1 ; break ; } } if ( which & MU_BUTTON ) fin = 1 ; } while ( !fin ) ; restore_gemscreen(GemApp.Menu) ; v_show_c(handle, 1) ; config.color_protect = cp ; set_imgpalette( vimage ) ; wind_update(END_UPDATE) ; }
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 ) ; }
int uundo_put(GEM_WINDOW *gwnd) { VXIMAGE *vimage ; long taille ; int xy[8] ; int type_alloc ; if ( gwnd == NULL) return( -1 ) ; if ( config.use_redo == 0 ) return( 0 ) ; vimage = (VXIMAGE *) gwnd->Extension ; FreeUUndoBuffer( gwnd ) ; vimage->Redo = AllocateUUndoBuffer( gwnd ) ; if ( vimage->Redo == NULL ) return( -3 ) ; vimage->Redo->w = vimage->raster.fd_w ; vimage->Redo->h = vimage->raster.fd_h ; vimage->Redo->mitem = REDO ; if ( !Truecolor && vimage->inf_img.nb_cpal && vimage->inf_img.palette ) { size_t size ; vimage->Redo->nb_cpal = (int) vimage->inf_img.nb_cpal ; size = vimage->Redo->nb_cpal * 3 * sizeof(int) ; vimage->Redo->palette = (int *) malloc( size ) ; if ( vimage->Redo->palette == NULL ) { FreeUndoBuffer( vimage->Redo ) ; vimage->Redo = NULL ; return( -1 ) ; } memcpy( vimage->Redo->palette, vimage->inf_img.palette, size ) ; } taille = img_size( vimage->Redo->w, vimage->Redo->h, nb_plane ) ; vimage->Redo->original_width = vimage->raster.fd_w ; vimage->Redo->original_height = vimage->raster.fd_h ; type_alloc = must_alloc( vimage->Redo->mitem, taille, vimage->Redo->spec ) ; if ( type_alloc ) { xy[0] = vimage->Redo->x ; xy[1] = vimage->Redo->y ; xy[2] = vimage->Redo->x + vimage->Redo->w-1 ; xy[3] = vimage->Redo->y + vimage->Redo->h-1 ; xy[4] = 0 ; xy[5] = 0 ; xy[6] = vimage->Redo->w-1 ; xy[7] = vimage->Redo->h-1 ; if ( type_alloc == 1 ) { vimage->Redo->img.fd_w = vimage->Redo->w ; vimage->Redo->img.fd_w = vimage->Redo->h ; vimage->Redo->img.fd_wdwidth = vimage->Redo->w / 16 ; if ( vimage->Redo->w % 16 ) vimage->Redo->img.fd_wdwidth++ ; vimage->Redo->img.fd_nplanes = nb_plane ; vimage->Redo->img.fd_addr = malloc( taille ) ; if ( vimage->Redo->img.fd_addr == NULL ) return( -1 ) ; vro_cpyfm( handle, S_ONLY, xy, &vimage->raster, &vimage->Redo->img ) ; } else undo_disk( gwnd, vimage->Redo, xy, &vimage->raster ) ; } return( 0 ) ; }
int undo_put(GEM_WINDOW *gwnd, int x1, int y1, int x2, int y2, int type_modif, XUNDO *xundo) { VXIMAGE *vimage ; UNDO_DEF *undo_buf ; void *spec = NULL ; long taille = 0 ; int xy[8] ; int wx, wy ; int larg, temp ; int type_alloc ; /* int redo = 0 ;*/ int err = 0 ; if ( config.nb_undo == 0 ) return( -1 ) ; if ( !GWIsWindowValid( gwnd ) ) return( -1 ) ; undo_buf = AllocateNewUndoBuffer( gwnd ) ; if ( undo_buf == NULL ) return( -3 ) ; vimage = (VXIMAGE *) gwnd->Extension ; /* if ( type_modif & REDO ) redo = 1 ; type_modif &= ~REDO ; */ if ( xundo ) { if ( xundo->nb_bytes_to_allocate_and_copy > 0 ) { spec = malloc( xundo->nb_bytes_to_allocate_and_copy ) ; if ( spec ) memcpy( spec, xundo->spec, xundo->nb_bytes_to_allocate_and_copy ) ; else return( -3 ) ; } } if ( x1 > x2 ) { temp = x1 ; x1 = x2 ; x2 = temp ; } if ( y1 > y2 ) { temp = y1 ; y1 = y2 ; y2 = temp ; } wx = x2 - x1 + 1 ; wy = y2 - y1 + 1 ; larg = ALIGN16( wx ) ; if ( need_palette( type_modif, spec ) ) { size_t size ; undo_buf->nb_cpal = (int) vimage->inf_img.nb_cpal ; size = undo_buf->nb_cpal * 3 * sizeof(int) ; undo_buf->palette = (int *) malloc( size ) ; if ( undo_buf->palette == NULL ) return( -3 ) ; else memcpy( undo_buf->palette, vimage->inf_img.palette, size ) ; } if ( x1 < 0 ) taille = 0 ; /* Pas de modif sur l'image (palette sans doute) */ else taille = img_size( larg, wy, nb_plane ) ; undo_buf->original_width = vimage->raster.fd_w ; undo_buf->original_height = vimage->raster.fd_h ; type_alloc = must_alloc( type_modif, taille, spec ) ; if ( type_alloc == 0 ) /* Est-il n‚cessaire d'allouer de la m‚moire ? */ { undo_buf->img.fd_addr = NULL ; undo_buf->x = x1 ; undo_buf->y = y1 ; undo_buf->w = wx ; undo_buf->h = wy ; undo_buf->mitem = type_modif ; undo_buf->spec = spec ; } else { if ( type_alloc == 2 ) undo_buf->disk = 1 ; else undo_buf->img.fd_addr = malloc( taille ) ; if ( undo_buf->disk || ( undo_buf->img.fd_addr != NULL ) ) { undo_buf->img.fd_w = larg ; /* Si possible, on m‚morise */ undo_buf->img.fd_h = wy ; /* Les nouvelles donn‚es */ undo_buf->img.fd_wdwidth = larg/16 ; undo_buf->img.fd_nplanes = nb_plane ; undo_buf->img.fd_stand = 0 ; undo_buf->gwindow = gwnd ; undo_buf->x = x1 ; undo_buf->y = y1 ; undo_buf->w = wx ; undo_buf->h = wy ; undo_buf->mitem = type_modif ; undo_buf->spec = spec ; xy[0] = x1 ; xy[1] = y1 ; xy[2] = x2 ; xy[3] = y2 ; xy[4] = 0 ; xy[5] = 0 ; xy[6] = wx-1 ; xy[7] = wy-1 ; if ( undo_buf->disk ) undo_disk( gwnd, undo_buf, xy, &vimage->raster ) ; else vro_cpyfm( handle, S_ONLY, xy, &vimage->raster, &undo_buf->img ) ; } } if ( !err ) { LIST_ENTRY* entry = GET_LIST_ENTRY_FROM_UNDO_DEF( undo_buf ) ; InsertHeadList( &vimage->UndoListHead, entry ) ; if ( type_modif != REDO ) FreeUUndoBuffer( gwnd ) ; } else { FreeUndoBuffer( undo_buf ) ; form_stop( 1, msg[MSG_UNDOERROR] ) ; } return( err ) ; }
static void SmartRePaint(GEM_WINDOW *gwnd, long old_ystart) { HEX_DUMP *hex_dump = (HEX_DUMP *) gwnd->Extension ; long i, dy, line_size ; int xy[8], xyr[8], xyc[4] ; int rx, ry, rw, rh, x, y, w, h ; int htline ; int smart_possible = 0 ; unsigned char *fmt_txt = (unsigned char*)hex_dump->formatted_txt + hex_dump->nb_max_lines_on_window * sizeof(char*) ; wind_get( gwnd->window_handle, WF_FIRSTXYWH, &rx, &ry, &rw, &rh ) ; GWGetWorkXYWH( gwnd, &x, &y, &w, &h ) ; if ( ( rx == x ) && ( ry == y ) && ( rw == w ) && ( rh == h ) ) smart_possible = 1 ; hex_dump->ystart_fmt = hex_dump->ystart ; if ( smart_possible ) { line_size = 1L + hex_dump->total_nb_char_on_line ; htline = hex_dump->h_char + hex_dump->interline ; dy = hex_dump->ystart - old_ystart ; if ( labs( dy ) < hex_dump->nb_lines_on_window ) { xy[0] = xy[4] = xyr[0] = x ; xy[2] = xy[6] = xyr[2] = x + w - 1 ; if ( dy > 0 ) { xy[1] = y + (int)dy * htline ; xy[3] = y + (int)hex_dump->nb_lines_on_window * htline - 1 ; xy[5] = y ; xy[7] = y + (int)( hex_dump->nb_lines_on_window - dy ) * htline - 1 ; xyr[1] = 1 + xy[7] ; xyr[3] = (int)dy * htline - 1 ; memmove( fmt_txt, fmt_txt + dy * line_size, ( hex_dump->nb_lines_on_window - dy ) * line_size ) ; for ( i = dy; i > 0; i-- ) FormatLine( hex_dump, old_ystart + hex_dump->nb_lines_on_window + i - 1 ) ; } else { xy[1] = y ; xy[3] = y + (int)( hex_dump->nb_lines_on_window + dy ) * htline - 1 ; xy[5] = y - (int)dy * htline ; xy[7] = y + (int)hex_dump->nb_lines_on_window * htline - 1 ; xyr[1] = xy[1] ; xyr[3] = (int)( hex_dump->nb_lines_on_window + dy ) * htline - 1 ; memmove( fmt_txt - dy * line_size, fmt_txt, ( hex_dump->nb_lines_on_window + dy ) * line_size ) ; for ( i = dy; i < 0; i++ ) FormatLine( hex_dump, old_ystart + i ) ; } v_hide_c( handle ) ; vro_cpyfm( handle, S_ONLY, xy, &screen, &screen ) ; xyc[0] = x ; xyc[1] = y ; xyc[2] = x + w - 1 ; xyc[3] = y + h - 1 ; vs_clip( handle, 1, xyc ) ; OnDraw( gwnd, xyr ) ; vs_clip( handle, 0, xyc ) ; v_show_c( handle, 1 ) ; } else smart_possible = 0 ; } if ( !smart_possible ) { for ( i = hex_dump->ystart_fmt; i < hex_dump->ystart_fmt + hex_dump->nb_lines_on_window; i++ ) FormatLine( hex_dump, i ) ; GWRePaint( gwnd ) ; } UpdateVSlider( gwnd ) ; }
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 ) ; }