Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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 ) ;
}
Ejemplo n.º 3
0
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) ;
}
Ejemplo n.º 4
0
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 ) ;
}
Ejemplo n.º 5
0
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;
}
Ejemplo n.º 6
0
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) ;
}
Ejemplo n.º 7
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 ) ;
}
Ejemplo n.º 8
0
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;
}
Ejemplo n.º 9
0
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;
	}
Ejemplo n.º 10
0
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);
}
Ejemplo n.º 11
0
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);
}
Ejemplo n.º 12
0
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 ) ;
  }
}
Ejemplo n.º 13
0
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);
}
Ejemplo n.º 14
0
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);
}
Ejemplo n.º 15
0
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, &gtextfdb, &_screen);
}
Ejemplo n.º 16
0
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();
}
Ejemplo n.º 17
0
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);
}
Ejemplo n.º 18
0
/* 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 );
}
Ejemplo n.º 19
0
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();
}
Ejemplo n.º 20
0
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);
}
Ejemplo n.º 21
0
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 ) ;
    }
  }
}
Ejemplo n.º 22
0
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 ;
  }
}
Ejemplo n.º 23
0
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);
}
Ejemplo n.º 24
0
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() */
Ejemplo n.º 25
0
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) ;
}
Ejemplo n.º 26
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 ) ;
}
Ejemplo n.º 27
0
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 ) ;
}
Ejemplo n.º 28
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 ) ;
}
Ejemplo n.º 29
0
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 ) ;
}
Ejemplo n.º 30
0
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 ) ;
}