Exemplo n.º 1
0
void
iw_xdraw(ICONWIND iw)
{
	WORD	xy[4], bxy[10];

	wind_update(BEG_UPDATE);
	graf_mouse(M_OFF, NULL);

	rc_getpts(&iw->w.rwind, xy);
	vs_clip(iw->w.wsid, 1, xy);
	vswr_mode(iw->w.wsid, MD_XOR);

	vsl_color(iw->w.wsid, BLACK);
	vsl_ends(iw->w.wsid, 0, 0);
	vsl_type(iw->w.wsid, 1);
	vsl_width(iw->w.wsid, 1);
	rc_boxpts(&iw->w.rwind, bxy);
	bxy[9]--;
	v_pline(iw->w.wsid, 5, bxy);

	vsf_color(iw->w.wsid, BLACK);
	vsf_interior(iw->w.wsid, FIS_SOLID);
	vsf_perimeter(iw->w.wsid, 0);
	xy[0]++, xy[2]--;
	xy[3] = xy[1]++ + 7;
	v_bar(iw->w.wsid, xy);

	graf_mouse(M_ON, NULL);
	wind_update(END_UPDATE);
}
Exemplo n.º 2
0
static void draw_icns(ICND *icns, int n, int mx, int my, int *clip)
{
	int i, j, c[18], x, y;

	clip_coords(clip, mx, my, &x, &y);

	vswr_mode(vdi_handle, MD_XOR);

	vsl_color(vdi_handle, 1);
	vsl_ends(vdi_handle, 0, 0);
	vsl_type(vdi_handle, 7);
	vsl_udsty(vdi_handle, 0xCCCC);
	vsl_width(vdi_handle, 1);

	graf_mouse(M_OFF, NULL);

	for (i = 0; i < n; i++)
	{
		for (j = 0; j < icns[i].np; j++)
		{
			c[j * 2] = icns[i].coords[j * 2] + x;
			c[j * 2 + 1] = icns[i].coords[j * 2 + 1] + y;
		}
		v_pline(vdi_handle, icns[i].np, c);
	}

	graf_mouse(M_ON, NULL);
}
Exemplo n.º 3
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 ) ;
  }
}
Exemplo n.º 4
0
void set_rect_default(void)
{
	vswr_mode(vdi_handle, MD_XOR);

	vsl_color(vdi_handle, 1);
	vsl_ends(vdi_handle, 0, 0);
	vsl_type(vdi_handle, 7);
	vsl_udsty(vdi_handle, 0xCCCC);
	vsl_width(vdi_handle, 1);
}
Exemplo n.º 5
0
/*******************************************************************************
	G_LINE in popup menu
*******************************************************************************/
int cdecl _drawNiceLine(PARMBLK *parm)
{
   vqf_attributes(glb.vdi.ha,fattr);
	vql_attributes(glb.vdi.ha,lattr);
	my1.g_x=parm->pb_x;
	my1.g_y=parm->pb_y;
	my1.g_w=parm->pb_w;
	my1.g_h=parm->pb_h;
	my2.g_x=parm->pb_xc;
	my2.g_y=parm->pb_yc;
	my2.g_w=parm->pb_wc;
	my2.g_h=parm->pb_hc;
	_rcIntersect(&my1,&my2);
	tab_clip[0]=my2.g_x;
	tab_clip[1]=my2.g_y;
	tab_clip[2]=tab_clip[0]+my2.g_w-1;
	tab_clip[3]=tab_clip[1]+my2.g_h-1;
	vs_clip(glb.vdi.ha,TRUE,tab_clip);
	bar[0]=my1.g_x;
	bar[1]=my1.g_y;
	bar[2]=bar[0]+my1.g_w-1;
	bar[3]=bar[1]+my1.g_h-1;

	vswr_mode(glb.vdi.ha,MD_REPLACE);
	vsf_perimeter(glb.vdi.ha,FALSE);
	vsf_interior(glb.vdi.ha,FIS_SOLID);
	vsf_style(glb.vdi.ha,0);
	vsf_color(glb.vdi.ha,WHITE);
	v_bar(glb.vdi.ha,bar);

	vsl_type(glb.vdi.ha,USERLINE);
	vsl_width(glb.vdi.ha,1);
	vsl_udsty(glb.vdi.ha,(int)0x5555);
	x=parm->pb_x;
	y=parm->pb_y+parm->pb_h/2;
	bar[0]=x;
	bar[1]=y;
	bar[2]=x+parm->pb_w;
	bar[3]=y;
	v_pline(glb.vdi.ha,2,bar);
	bar[1]+=1;
	bar[3]+=1;
	vsl_udsty(glb.vdi.ha,(int)0xAAAA);
	v_pline(glb.vdi.ha,2,bar);

	vs_clip(glb.vdi.ha,FALSE,tab_clip);
	vsl_type(glb.vdi.ha,lattr[0]);
	vsl_color(glb.vdi.ha,lattr[1]);
	vsf_interior(glb.vdi.ha,fattr[2]);
	vsf_style(glb.vdi.ha,fattr[0]);
	vsf_perimeter(glb.vdi.ha,fattr[4]);
	return parm->pb_currstate&~DISABLED;
}
Exemplo n.º 6
0
/* Draw the two lines for the axes */
void draw_axes_lines (int app_handle, int x, int y, int w, int h) {
	int axes[6];

	vsl_color (app_handle, BLACK);
	vsl_type (app_handle, SOLID);
	vsl_width (app_handle, 1);

	axes[0] = x; axes[1] = y-h;
	axes[2] = x; axes[3] = y;
	axes[4] = x+w; axes[5] = y;

	v_pline (app_handle, 3, axes);
}
Exemplo n.º 7
0
static void xw_redraw_menu(WINDOW *w, int object, RECT *r)
{
	RECT r1, r2, in;
	OBJECT *menu = w->xw_menu;
	int pxy[4];

	if (menu != NULL)
	{
/*		xw_bar_rect(w,&r1);*/

		xd_objrect(w->xw_menu, object, &r1);
		if (object == w->xw_bar)
			r1.h += 1;

		/* Begin en eind coordinaten van lijn onder de menubalk. */

		pxy[0] = w->xw_work.x;
		pxy[1] = pxy[3] = w->xw_work.y + r1.h - 1;
		pxy[2] = w->xw_work.x + w->xw_work.w - 1;

		if (xd_rcintersect(r, &r1, &r1) == TRUE)
		{
			xd_wdupdate(BEG_UPDATE);
			xd_mouse_off();

			vswr_mode(xd_vhandle, MD_REPLACE);

			vsl_color(xd_vhandle, 1);
			vsl_ends(xd_vhandle, 0, 0);
			vsl_type(xd_vhandle, 1);
			vsl_width(xd_vhandle, 1);

			xw_get(w, WF_FIRSTXYWH, &r2);

			while ((r2.w != 0) && (r2.h != 0))
			{
				if (xd_rcintersect(&r1, &r2, &in) == TRUE)
				{
					objc_draw(menu, w->xw_bar, MAX_DEPTH, in.x, in.y, in.w, in.h);
					xd_clip_on(&in);
					v_pline(xd_vhandle, 2, pxy);
					xd_clip_off();
				}
				xw_get(w, WF_NEXTXYWH, &r2);
			}
			xd_mouse_on();
			xd_wdupdate(END_UPDATE);
		}
	}
}
Exemplo n.º 8
0
WORD gsx_start(VOID)
{
	WORD		char_height, nc, attrib[10];

	gl_xclip = 0;
	gl_yclip = 0;
	gl_width = gl_wclip = gl_ws.ws_xres + 1;
	gl_height = gl_hclip = gl_ws.ws_yres + 1;

	nc = gl_ws.ws_ncolors;
	gl_nplanes = 0;
	while (nc != 1)
	{
		nc >>= 1;
		gl_nplanes++;
	}
	vqt_attributes( gl_handle, &attrib[0] );
	gl_ws.ws_chmaxh = attrib[7];
	gl_ws.ws_pts2 = attrib[6];
	char_height = gl_ws.ws_chminh;
	vst_height( gl_handle, char_height,
				&gl_wsptschar, &gl_hsptschar, 
				&gl_wschar, &gl_hschar );
	char_height = gl_ws.ws_chmaxh;
	vst_height( gl_handle, char_height,
				&gl_wptschar, &gl_hptschar, 
				&gl_wchar, &gl_hchar );
	gl_ncols = gl_width / gl_wchar;
	gl_nrows = gl_height / gl_hchar;
	gl_hbox = gl_hchar + 3;
	gl_wbox = (gl_hbox * gl_ws.ws_hpixel) / gl_ws.ws_wpixel;
	vsl_type( gl_handle, 7 );
	vsl_width( gl_handle, 1 );
	vsl_udsty( gl_handle, 0xffff );
	rc_set(&gl_rscreen, 0, 0, gl_width, gl_height);
	rc_set(&gl_rfull, 0, gl_hbox, gl_width, (gl_height - gl_hbox));
	rc_set(&gl_rzero, 0, 0, 0, 0);
	rc_set(&gl_rcenter, (gl_width-gl_wbox)/2, (gl_height-(2*gl_hbox))/2, 
			gl_wbox, gl_hbox);
	rc_set(&gl_rmenu, 0, 0, gl_width, gl_hbox);
	ad_intin = (LONG)ADDR(&intin[0]);
	return (TRUE);
}
Exemplo n.º 9
0
static int arc(GEM_PLOTTER self,int x, int y, int radius, int angle1, int angle2, const plot_style_t * pstyle)
{
	//plotter_vdi_clip( self, 1);
	vswr_mode( self->vdi_handle, MD_REPLACE );
	if( pstyle->fill_type == PLOT_OP_TYPE_NONE )
		return 1;
	if( pstyle->fill_type != PLOT_OP_TYPE_SOLID) {
		vsl_rgbcolor( self->vdi_handle, pstyle->stroke_colour);
		vsf_perimeter( self->vdi_handle, 1);
		vsf_interior( self->vdi_handle, 1 );
		v_arc( self->vdi_handle, VIEW(self).x + x, VIEW(self).y + y, radius, angle1*10, angle2*10 );
	} else {
		vsf_rgbcolor( self->vdi_handle, pstyle->fill_colour);
		vsl_width( self->vdi_handle, 1 );
		vsf_perimeter( self->vdi_handle, 1);
		v_arc( self->vdi_handle, VIEW(self).x + x, VIEW(self).y + y, radius, angle1*10, angle2*10 );
	}
	//plotter_vdi_clip( self, 0);
	return ( 1 );
}
Exemplo n.º 10
0
/* display numeric range and tick marks of y-axis */
void draw_y_axis_labels (int app_handle, int min_y, int max_y, int x, int y, int h) {
	char str[20];
	int pxy[4];
	int i;
	int char_w, char_h, cell_w, cell_h;
	int range = max_y - min_y;

	vsf_color (app_handle, BLACK);
	vst_point (app_handle, AXES_LABEL_FONT, &char_w, &char_h, &cell_w, &cell_h);
	vsl_width (app_handle, 1);

	/* print 2,3,5 or 9 values on y-axis, depending on space available */
	if (h > 3 * cell_h) { /* print lower and top values in most cases */
		pxy[0] = x;
		pxy[1] = y;
		pxy[2] = x-5;
		pxy[3] = y;

		v_pline (app_handle, 2, pxy);
		sprintf (str, "%d", min_y);
		v_gtext (app_handle, pxy[2]-strlen(str)*cell_w, pxy[3]+cell_h/2, str);

		pxy[0] = x;
		pxy[1] = y-h;
		pxy[2] = x-5;
		pxy[3] = pxy[1];

		sprintf (str, "%d", max_y);
		v_pline (app_handle, 2, pxy);
		v_gtext (app_handle, pxy[2]-strlen(str)*cell_w, pxy[3]+cell_h/2, str);
	}

	if (h > 10 * cell_h) { /* print remaining labels depending on space available */
		draw_intermediate_y_labels (app_handle, 8, min_y, max_y, x, y, h, cell_w, cell_h);
	} else if (h > 6 * cell_h) {
		draw_intermediate_y_labels (app_handle, 4, min_y, max_y, x, y, h, cell_w, cell_h);
	} else if (h > 4 * cell_h) {
		draw_intermediate_y_labels (app_handle, 2, min_y, max_y, x, y, h, cell_w, cell_h);
	}
}
Exemplo n.º 11
0
int OnObjectNotifyPal(void *w, int obj)
{
  GEM_WINDOW     *wnd = (GEM_WINDOW *) w ;
  WEXTENSION_PAL *wext = wnd->DlgData->UserData ;
  OBJECT         *adr_mkpal = wnd->DlgData->BaseObject ;
  int            off_x, off_y ;
  int            xm, ym, dummy ;
  int            pb_x, pb_y ;
  int            x1, y1, x2, y2 ;
  int            code = -1 ;
  char           buf[15] ;

  graf_mkstate( &xm, &ym, &dummy, &dummy ) ;

  switch( obj )
  {
    case MKPAL_MRED      :
    case MKPAL_PRED      : if ( obj == MKPAL_PRED ) wext->curr_rgb[0]++ ;
                           else                     wext->curr_rgb[0]-- ;
                           if (wext->curr_rgb[0] < 1)    wext->curr_rgb[0] = 1 ;
                           if (wext->curr_rgb[0] > 1000) wext->curr_rgb[0] = 1000 ;
                           off_y = (int) ((1000-wext->curr_rgb[0])*(float)wext->hf/1000.0) ;
                           adr_mkpal[MKPAL_RED].ob_y = off_y ;
                           xobjc_draw( wnd->window_handle,adr_mkpal, MKPAL_REDBOX ) ;
                           sprintf(buf, "%.4d", wext->curr_rgb[0]) ;
                           write_text(adr_mkpal, MKPAL_TRED, buf) ;
                           xobjc_draw( wnd->window_handle,adr_mkpal, MKPAL_TRED ) ;
                           vs_color(handle, wext->index, wext->curr_rgb) ;
                           break ;
    case MKPAL_MGREEN    :
    case MKPAL_PGREEN    : if ( obj == MKPAL_PGREEN ) wext->curr_rgb[1]++ ;
                           else                       wext->curr_rgb[1]-- ;
                           if (wext->curr_rgb[1] < 1)    wext->curr_rgb[1] = 1 ;
                           if (wext->curr_rgb[1] > 1000) wext->curr_rgb[1] = 1000 ;
                           off_y = (int) ((1000-wext->curr_rgb[1])*(float)wext->hf/1000.0) ;
                           adr_mkpal[MKPAL_GREEN].ob_y = off_y ;
                           xobjc_draw( wnd->window_handle,adr_mkpal, MKPAL_GREENBOX ) ;
                           sprintf(buf, "%.4d", wext->curr_rgb[1]) ;
                           write_text(adr_mkpal, MKPAL_TGREEN, buf) ;
                           xobjc_draw( wnd->window_handle,adr_mkpal, MKPAL_TGREEN ) ;
                           vs_color(handle, wext->index, wext->curr_rgb) ;
                           break ;
    case MKPAL_MBLUE     :
    case MKPAL_PBLUE     : if ( obj == MKPAL_PBLUE ) wext->curr_rgb[2]++ ;
                           else                      wext->curr_rgb[2]-- ;
                           if (wext->curr_rgb[2] < 1)    wext->curr_rgb[2] = 1 ;
                           if (wext->curr_rgb[2] > 1000) wext->curr_rgb[2] = 1000 ;
                           off_y = (int) ((1000-wext->curr_rgb[2])*(float)wext->hf/1000.0) ;
                           adr_mkpal[MKPAL_BLUE].ob_y = off_y ;
                           xobjc_draw( wnd->window_handle,adr_mkpal, MKPAL_BLUEBOX ) ;
                           sprintf(buf, "%.4d", wext->curr_rgb[2]) ;
                           write_text(adr_mkpal, MKPAL_TBLUE, buf) ;
                           xobjc_draw( wnd->window_handle,adr_mkpal, MKPAL_TBLUE ) ;
                           vs_color(handle, wext->index, wext->curr_rgb) ;
                           break ;
    case MKPAL_REDBOX    : 
                           objc_offset(adr_mkpal, MKPAL_RED, &off_x, &off_y) ;
                           if (ym > off_y) wext->curr_rgb[0] = wext->curr_rgb[0]-20 ;
                           else            wext->curr_rgb[0] = wext->curr_rgb[0]+20 ;
                           if (wext->curr_rgb[0] < 1)    wext->curr_rgb[0] = 1 ;
                           if (wext->curr_rgb[0] > 1000) wext->curr_rgb[0] = 1000 ;
                           off_y = (int) ((1000-wext->curr_rgb[0])*(float)wext->hf/1000.0) ;
                           adr_mkpal[MKPAL_RED].ob_y = off_y ;
                           xobjc_draw( wnd->window_handle,adr_mkpal, MKPAL_REDBOX ) ;
                           sprintf(buf, "%.4d", wext->curr_rgb[0]) ;
                           write_text(adr_mkpal, MKPAL_TRED, buf) ;
                           xobjc_draw( wnd->window_handle,adr_mkpal, MKPAL_TRED ) ;
                           vs_color(handle, wext->index, wext->curr_rgb) ;
                           break ;
    case MKPAL_GREENBOX  : 
                           objc_offset(adr_mkpal, MKPAL_GREEN, &off_x, &off_y) ;
                           if (ym > off_y) wext->curr_rgb[1] = wext->curr_rgb[1]-20 ;
                           else            wext->curr_rgb[1] = wext->curr_rgb[1]+20 ;
                           if (wext->curr_rgb[1] < 1)  wext->curr_rgb[1] = 1 ;
                           if (wext->curr_rgb[1] > 1000) wext->curr_rgb[1] = 1000 ;
                           off_y = (int) ((1000-wext->curr_rgb[1])*(float)wext->hf/1000.0) ;
                           adr_mkpal[MKPAL_GREEN].ob_y = off_y ;
                           xobjc_draw( wnd->window_handle,adr_mkpal, MKPAL_GREENBOX ) ;
                           sprintf(buf, "%.4d", wext->curr_rgb[1]) ;
                           write_text(adr_mkpal, MKPAL_TGREEN, buf) ;
                           xobjc_draw( wnd->window_handle,adr_mkpal, MKPAL_TGREEN ) ;
                           vs_color(handle, wext->index, wext->curr_rgb) ;
                           break ;
    case MKPAL_BLUEBOX   : 
                           objc_offset(adr_mkpal, MKPAL_BLUE, &off_x, &off_y) ;
                           if (ym > off_y) wext->curr_rgb[2] = wext->curr_rgb[2]-20 ;
                           else            wext->curr_rgb[2] = wext->curr_rgb[2]+20 ;
                           if (wext->curr_rgb[2] < 1)    wext->curr_rgb[2] = 1 ;
                           if (wext->curr_rgb[2] > 1000) wext->curr_rgb[2] = 1000 ;
                           off_y = (int) ((1000-wext->curr_rgb[2])*(float)wext->hf/1000.0) ;
                           adr_mkpal[MKPAL_BLUE].ob_y = off_y ;
                           xobjc_draw( wnd->window_handle,adr_mkpal, MKPAL_BLUEBOX ) ;
                           sprintf(buf, "%.4d", wext->curr_rgb[2]) ;
                           write_text(adr_mkpal, MKPAL_TBLUE, buf) ;
                           xobjc_draw( wnd->window_handle,adr_mkpal, MKPAL_TBLUE ) ;
                           vs_color(handle, wext->index, wext->curr_rgb) ;
                           break ;
    case MKPAL_RED       : wext->curr_rgb[0] = (float) graf_slidebox(adr_mkpal, MKPAL_REDBOX, MKPAL_RED, 1) ;
                           off_y = (int) (wext->curr_rgb[0]*(float)wext->hf/1000.0) ;
                           adr_mkpal[MKPAL_RED].ob_y = off_y ;
                           xobjc_draw( wnd->window_handle,adr_mkpal, MKPAL_REDBOX ) ;
                           wext->curr_rgb[0] = 1000-wext->curr_rgb[0] ;
                           sprintf(buf, "%.4d", wext->curr_rgb[0]) ;
                           write_text(adr_mkpal, MKPAL_TRED, buf) ;
                           xobjc_draw( wnd->window_handle,adr_mkpal, MKPAL_TRED ) ;
                           vs_color(handle, wext->index, wext->curr_rgb) ;
                           break ;
     case MKPAL_GREEN    : wext->curr_rgb[1] = (float) graf_slidebox(adr_mkpal, MKPAL_GREENBOX, MKPAL_GREEN, 1) ;
                           off_y = (int) (wext->curr_rgb[1]*(float)wext->hf/1000.0) ;
                           adr_mkpal[MKPAL_GREEN].ob_y = off_y ;
                           xobjc_draw( wnd->window_handle,adr_mkpal, MKPAL_GREENBOX ) ;
                           wext->curr_rgb[1] = 1000-wext->curr_rgb[1] ;
                           sprintf(buf, "%.4d", wext->curr_rgb[1]) ;
                           write_text(adr_mkpal, MKPAL_TGREEN, buf) ;
                           xobjc_draw( wnd->window_handle,adr_mkpal, MKPAL_TGREEN ) ;
                           vs_color(handle, wext->index, wext->curr_rgb) ;
                           break ;
    case MKPAL_BLUE      : wext->curr_rgb[2] = (float) graf_slidebox(adr_mkpal, MKPAL_BLUEBOX, MKPAL_BLUE, 1) ;
                           off_y = (int) (wext->curr_rgb[2]*(float)wext->hf/1000.0) ;
                           adr_mkpal[MKPAL_BLUE].ob_y = off_y ;
                           xobjc_draw( wnd->window_handle,adr_mkpal, MKPAL_BLUEBOX ) ;
                           wext->curr_rgb[2] = 1000-wext->curr_rgb[2] ;
                           sprintf(buf, "%.4d", wext->curr_rgb[2]) ;
                           write_text(adr_mkpal, MKPAL_TBLUE, buf) ;
                           xobjc_draw( wnd->window_handle,adr_mkpal, MKPAL_TBLUE ) ;
                           vs_color(handle, wext->index, wext->curr_rgb) ;
                           break ;
    case MKPAL_LOAD     : charge_palette() ;
                          deselect(adr_mkpal, obj) ;
                          xobjc_draw( wnd->window_handle,adr_mkpal, obj ) ;
                          wext->flag_aff = 0 ;
                          break ;
    case MKPAL_SAVE     : sauve_palette() ;
                          deselect(adr_mkpal, obj) ;
                          xobjc_draw( wnd->window_handle,adr_mkpal, obj ) ;
                          wext->flag_aff = 0 ;
                          break ;
    case MKPAL_START    :
    case MKPAL_END      : if ( obj == MKPAL_START ) wext->stdeg  = wext->index ;
                          else                      wext->enddeg = wext->index ;
                          if (selected(adr_mkpal, MKPAL_START) && selected(adr_mkpal, MKPAL_END))
                          {
                            deselect(adr_mkpal, MKPAL_START) ;
                            deselect(adr_mkpal, MKPAL_END) ;
                            xobjc_draw( wnd->window_handle,adr_mkpal, MKPAL_START ) ;
                            xobjc_draw( wnd->window_handle,adr_mkpal, MKPAL_END ) ;
                            cree_degrade(wext->stdeg, wext->enddeg) ;
                            wext->stdeg = wext->enddeg = 500 ;
                          }
                          break ;
    case MKPAL_APPLIQUE : read_text(adr_mkpal, MKPAL_TRED, buf) ;
                          wext->rgb[0] = atoi(buf) ;
                          off_y = (int) ((1000-wext->rgb[0])*(float)wext->hf/1000.0) ;
                          adr_mkpal[MKPAL_RED].ob_y = off_y ;
                          xobjc_draw( wnd->window_handle,adr_mkpal, MKPAL_REDBOX ) ;
                          read_text(adr_mkpal, MKPAL_TGREEN, buf) ;
                          wext->rgb[1] = atoi(buf) ;
                          off_y = (int) ((1000-wext->rgb[1])*(float)wext->hf/1000.0) ;
                          adr_mkpal[MKPAL_GREEN].ob_y = off_y ;
                          xobjc_draw( wnd->window_handle,adr_mkpal, MKPAL_GREENBOX ) ;
                          read_text(adr_mkpal, MKPAL_TBLUE, buf) ;
                          wext->rgb[2] = atoi(buf) ;
                          off_y = (int) ((1000-wext->rgb[2])*(float)wext->hf/1000.0) ;
                          adr_mkpal[MKPAL_BLUE].ob_y = off_y ;
                          xobjc_draw( wnd->window_handle,adr_mkpal, MKPAL_BLUEBOX ) ;
                          vs_color(handle, wext->index, wext->rgb) ;
                          deselect(adr_mkpal, obj) ;
                          xobjc_draw( wnd->window_handle,adr_mkpal, obj ) ;
                          break ;
    case MKPAL_BOX      : objc_offset(adr_mkpal, obj, &pb_x, &pb_y) ;
                          if (wext->flag_aff)
                          {
                            x1 = pb_x+(wext->index % wext->nb_col_x)*wext->ww ;
                            y1 = pb_y+(wext->index / wext->nb_col_x)*wext->hh ;
                            x2 = x1+wext->ww-1 ;
                            y2 = y1+wext->hh-1 ;
                            vsf_color(handle, 1) ;
                            vswr_mode(handle, MD_XOR) ;
                            vsl_width(handle, 3) ;
                            v_hide_c(handle) ;
                            rectangle(x1, y1, x2, y2) ;
                            v_show_c(handle, 1) ;
                          }
                          else wext->flag_aff = 1 ;
                          graf_mkstate(&xm, &ym, &dummy, &dummy) ;
                          wext->index = (xm-pb_x)/wext->ww+ wext->nb_col_x*((ym-pb_y)/wext->hh) ;
                          vq_color(handle, wext->index, 0, wext->rgb) ;
                          sprintf(buf, "%.4d", wext->rgb[0]) ;
                          write_text(adr_mkpal, MKPAL_TRED, buf) ;
                          sprintf(buf, "%.4d", wext->rgb[1]) ;
                          write_text(adr_mkpal, MKPAL_TGREEN, buf) ;
                          sprintf(buf, "%.4d", wext->rgb[2]) ;
                          write_text(adr_mkpal, MKPAL_TBLUE, buf) ;
                          xobjc_draw( wnd->window_handle,adr_mkpal, MKPAL_RGB ) ;
                          x1 = pb_x+wext->ww*((xm-pb_x)/wext->ww) ;
                          y1 = pb_y+wext->hh*((ym-pb_y)/wext->hh) ;
                          x2 = x1+wext->ww-1 ;
                          y2 = y1+wext->hh-1 ;
                          vsf_color(handle, 1) ;
                          v_hide_c(handle) ;
                          vswr_mode(handle, MD_XOR) ;
                          vsl_width(handle, 3) ;
                          rectangle(x1, y1, x2, y2) ;
                          v_show_c(handle, 1) ;
                          xobjc_draw( wnd->window_handle,adr_mkpal, MKPAL_CURRCOL ) ;
                          off_y = (int) ((1000-wext->rgb[0])*(float)wext->hf/1000.0) ;
                          adr_mkpal[MKPAL_RED].ob_y = off_y ;
                          xobjc_draw( wnd->window_handle,adr_mkpal, MKPAL_REDBOX ) ;
                          off_y = (int) ((1000-wext->rgb[1])*(float)wext->hf/1000.0) ;
                          adr_mkpal[MKPAL_GREEN].ob_y = off_y ;
                          xobjc_draw( wnd->window_handle,adr_mkpal, MKPAL_GREENBOX ) ;
                          off_y = (int) ((1000-wext->rgb[2])*(float)wext->hf/1000.0) ;
                          adr_mkpal[MKPAL_BLUE].ob_y = off_y ;
                          xobjc_draw( wnd->window_handle,adr_mkpal, MKPAL_BLUEBOX ) ;
                          break ;
     case MKPAL_OK      : code = IDOK ;
                          break ;
     case MKPAL_CANCEL  : code = IDCANCEL ;
                          break ;
  }

  if ( code == IDOK )
  {

  }

  return( code ) ;
}
Exemplo n.º 12
0
static
void __CDECL evnt_sb_redraw( COMPONENT *c, long buff[8] )
{
	size_t i;
	struct gui_window * gw = (struct gui_window *)mt_CompDataSearch(&app, c, CDT_OWNER);
	assert(gw != NULL);
	CMP_STATUSBAR sb = gw->root->statusbar;
	assert( sb != NULL );
	if( sb == NULL )
		return;

	if( sb->attached == false )
		return;

	LGRECT work, lclip;
	short pxy[8], d, pxyclip[4];

	mt_CompGetLGrect(&app, sb->comp, WF_WORKXYWH, &work);
	lclip = work;
	if ( !rc_lintersect( (LGRECT*)&buff[4], &lclip ) ) {
		return;
	}
	vsf_interior(atari_plot_vdi_handle, FIS_SOLID );
	vsl_color(atari_plot_vdi_handle, BLACK );
	vsl_type(atari_plot_vdi_handle, 1);
	vsl_width(atari_plot_vdi_handle, 1 );
	vst_color(atari_plot_vdi_handle, BLACK);

	vst_height(atari_plot_vdi_handle, atari_sysinfo.medium_sfont_pxh, &pxy[0], &pxy[1], &pxy[2], &pxy[3] );
	vst_alignment(atari_plot_vdi_handle, 0, 5, &d, &d );
	vst_effects(atari_plot_vdi_handle, 0 );
	pxyclip[0] = lclip.g_x;
	pxyclip[1] = lclip.g_y;
	pxyclip[2] = lclip.g_x + lclip.g_w-1;
	pxyclip[3] = lclip.g_y + lclip.g_h-1;

	vs_clip(atari_plot_vdi_handle, 1, (short*)&pxyclip );
	vswr_mode(atari_plot_vdi_handle, MD_REPLACE );

	if( lclip.g_y <= work.g_y ) {
		pxy[0] = work.g_x;
		pxy[1] = work.g_y;
		pxy[2] = MIN( work.g_x + work.g_w, lclip.g_x + lclip.g_w );
		pxy[3] = work.g_y;
		v_pline(atari_plot_vdi_handle, 2, (short*)&pxy );
	}

	if(app.nplanes > 2) {
		vsf_color(atari_plot_vdi_handle, LWHITE);
	} else {
		vsf_color(atari_plot_vdi_handle, WHITE );
	}

	pxy[0] = work.g_x;
	pxy[1] = work.g_y+1;
	pxy[2] = work.g_x + work.g_w-1;
	pxy[3] = work.g_y + work.g_h-1;
	v_bar(atari_plot_vdi_handle, pxy );


	if( sb->textlen > 0 ) {
		short curx;
		short vqw[4];
		char t[2];
		short cw = 8;
		t[1]=0;
		if( atari_sysinfo.sfont_monospaced ) {
			t[0]='A';
			int r = vqt_width(atari_plot_vdi_handle, t[0], &vqw[0], &vqw[1], &vqw[2] );
			cw = vqw[0];
		}
		vswr_mode(atari_plot_vdi_handle, MD_TRANS );
		for( curx = work.g_x + 2, i=0 ; (curx+cw < work.g_x+work.g_w ) && i < sb->textlen; i++ ){
			t[0] = sb->text[i];
			if( !atari_sysinfo.sfont_monospaced ) {
				vqt_width(atari_plot_vdi_handle, t[0], &vqw[0], &vqw[1], &vqw[2] );
				cw = vqw[0];
			}
			if( curx >= lclip.g_x - cw ) {
				v_gtext(atari_plot_vdi_handle, curx, work.g_y + 5, (char*)&t );
			}
			curx += cw;
			if( curx >= lclip.g_x + lclip.g_w )
				break;
		}
	}
	vswr_mode(atari_plot_vdi_handle, MD_REPLACE );
	pxy[0] = work.g_x + work.g_w;
	pxy[1] = work.g_y + work.g_h;
	pxy[2] = work.g_x + work.g_w;
	pxy[3] = work.g_y + work.g_h-work.g_h;
	v_pline(atari_plot_vdi_handle, 2, (short*)&pxy );

	vs_clip(atari_plot_vdi_handle, 0, (short*)&pxyclip );
	return;
}
Exemplo n.º 13
0
/* display numeric range and tick marks of x-axis */
void draw_x_axis_labels (int app_handle, int min_x, int max_x, int x, int y, int w) {
	char str[20];
	int pxy[4];
	int i;
	int char_w, char_h, cell_w, cell_h;
	int range = max_x - min_x;
	int largest_val;

	sprintf (str, "%d", min_x);
	largest_val = strlen (str);
	sprintf (str, "%d", max_x);
	if (strlen(str) > largest_val) largest_val = strlen(str);

	vsf_color (app_handle, BLACK);
	vst_point (app_handle, AXES_LABEL_FONT, &char_w, &char_h, &cell_w, &cell_h);
	vsl_width (app_handle, 1);

	/* print values on x-axis, depending on space available */
	if (w > largest_val * 2 * cell_w) { /* print left and right values in most cases */
		pxy[0] = x;
		pxy[1] = y;
		pxy[2] = pxy[0];
		pxy[3] = y+5;

		v_pline (app_handle, 2, pxy);
		sprintf (str, "%d", min_x);
		v_gtext (app_handle, pxy[2]-strlen(str)*cell_w/2, pxy[3]+cell_h*1.5, str);

		pxy[0] = x+w;
		pxy[1] = y;
		pxy[2] = pxy[0];
		pxy[3] = y+5;

		v_pline (app_handle, 2, pxy);
		sprintf (str, "%d", max_x);
		v_gtext (app_handle, pxy[2]-strlen(str)*cell_w/2, pxy[3]+cell_h*1.5, str);
	}

	if (w > largest_val * 10 * cell_w) { /* print remaining depending on space available */
		int i;

		for (i=1; i<=8; i += 1) {
			int val = min_x + range * i / 8; /* do eighths */

			pxy[0] = x + rescale (val, min_x, max_x, w);
			pxy[1] = y;
			pxy[2] = pxy[0];
			pxy[3] = y+5;

			sprintf (str, "%d", val);
			v_pline (app_handle, 2, pxy);
			v_gtext (app_handle, pxy[2]-strlen(str)*cell_w/2, pxy[3]+cell_h*1.5, str);
		}
	} else if (w > largest_val * 6 * cell_w) {
		int i;

		for (i=1; i<=3; i += 1) {
			int val = min_x + range * i / 4; /* do quarters */

			pxy[0] = x + rescale (val, min_x, max_x, w);
			pxy[1] = y;
			pxy[2] = pxy[0];
			pxy[3] = y+5;

			sprintf (str, "%d", val);
			v_pline (app_handle, 2, pxy);
			v_gtext (app_handle, pxy[2]-strlen(str)*cell_w/2, pxy[3]+cell_h*1.5, str);
		}
	} else if (w > largest_val * 4 * cell_w) {
		int val = min_x + range / 2; /* find nearest int to half-way */

		pxy[0] = x + rescale (val, min_x, max_x, w);
		pxy[1] = y;
		pxy[2] = pxy[0];
		pxy[3] = y+5;

		sprintf (str, "%d", val);
		v_pline (app_handle, 2, pxy);
		v_gtext (app_handle, pxy[2]-strlen(str)*cell_w/2, pxy[3]+cell_h*1.5, str);
	}
}
Exemplo n.º 14
0
void chart_draw_line (struct line_chart * lc, int app_handle,
	int x, int y, int w, int h) {

	int lx, ly, lw, lh; /* dimensions of area in which to draw the line chart */
	int max_y_value, min_y_value, max_value_width;
	int min_x_value, max_x_value;
	int i;
	int dum, key_char_w, key_char_h;
	int kx, ky; /* position of key */

	clear_area (app_handle, x, y, w, h);
	if ((w < 50) || (h < 50)) return; /* too small to draw anything */
	if (lc->lines[0] == NULL) return; /* no line, so don't draw anything */

	max_y_value = find_max (lc->lines[0]->ys, lc->lines[0]->num_points);
	min_y_value = find_min (lc->lines[0]->ys, lc->lines[0]->num_points);
	for (i = 1; i < lc->num_lines; i += 1) {
		int t = find_max (lc->lines[i]->ys, lc->lines[i]->num_points);
		if (t > max_y_value) max_y_value = t;
		t = find_min (lc->lines[i]->ys, lc->lines[i]->num_points);
		if (t < min_y_value) min_y_value = t;
	}
	max_x_value = find_max (lc->lines[0]->xs, lc->lines[0]->num_points);
	min_x_value = find_min (lc->lines[0]->xs, lc->lines[0]->num_points);
	for (i = 1; i < lc->num_lines; i += 1) {
		int t = find_max (lc->lines[i]->xs, lc->lines[i]->num_points);
		if (t > max_x_value) max_x_value = t;
		t = find_min (lc->lines[i]->xs, lc->lines[i]->num_points);
		if (t < min_x_value) min_x_value = t;
	}

	/* Find dimensions for display of chart */
	find_chart_dimensions (app_handle, min_y_value, max_y_value, x, y, w, h,
				&max_value_width, &lx, &ly, &lw, &lh);

	vst_point (app_handle, AXES_TITLE_FONT, &dum, &dum, &key_char_w, &key_char_h);

	/* adjust dimensions to fit in a key */
	if (w > h) {
		/* wide area, so key on right */
		int max_width, i;

		max_width = strlen(lc->lines[0]->label);
		for (i=1; i<lc->num_lines; i+=1) {
			if (strlen(lc->lines[i]->label) > max_width) {
				max_width = strlen(lc->lines[i]->label);
			}
		}

		kx = x + w - key_char_w*(4 + max_width);
		ky = y + 2*key_char_h;
		lw = kx - lx - key_char_w;
	} else {
		/* tall area, so key below */
		int diff_y = key_char_h*(2+2+lc->num_lines);
		kx = x+5*key_char_w;
		ly -= diff_y;
		lh -= diff_y;
		ky = ly + 4*key_char_h; /* remember gap for labels */
	}

	draw_axes_lines (app_handle, lx, ly, lw, lh);
	draw_main_labels (app_handle, lc->title, lc->x_label, lc->y_label,
		lx, ly, lw, lh, max_value_width);
	draw_x_axis_labels (app_handle, min_x_value, max_x_value, lx, ly, lw);
	draw_y_axis_labels (app_handle, min_y_value, max_y_value, lx, ly, lh);

	/* draw points and lines */
	for (i = 0; i < lc->num_lines; i += 1) {
		int p;
		int * pts;
		pts = malloc(sizeof(int)*lc->lines[i]->num_points*2);

		for (p = 0; p < lc->lines[i]->num_points; p += 1) {
			pts[2*p] = lx + rescale (lc->lines[i]->xs[p], min_x_value, max_x_value, lw);
			pts[2*p+1] = ly - rescale (lc->lines[i]->ys[p], min_y_value, max_y_value, lh);
		}

		/* set colour/styles */
		vsl_width (app_handle, 1);
		vsl_color (app_handle, lc->lines[i]->colour);
		vsm_color (app_handle, lc->lines[i]->colour);
	#ifdef PMARKS /* use own pmarker code */
		vsf_color (app_handle, lc->lines[i]->colour);
		my_pmarker (app_handle, lc->lines[i]->point_style, lc->lines[i]->num_points, pts);
	#else /* use builtin pmarker code */
		vsm_type (app_handle, lc->lines[i]->point_style);
		/* call v_pmarker to draw points */
		v_pmarker (app_handle, lc->lines[i]->num_points, pts);
	#endif
		vsl_type (app_handle, lc->lines[i]->line_style);
		/* call v_pline to draw lines */
		v_pline (app_handle, lc->lines[i]->num_points, pts);

		free (pts);
	}

	/* draw key */
	vsf_color (app_handle, BLACK);
	vst_point (app_handle, AXES_TITLE_FONT, &dum, &dum, &dum, &dum);
	v_gtext (app_handle, kx, ky, "  KEY");
	ky += 2*key_char_h;

	for (i = 0; i < lc->num_lines; i += 1) {
		int pxy[4];

		pxy[0]=kx;
		pxy[1]=ky;
		pxy[2]=kx+2.5*key_char_w;
		pxy[3]=pxy[1];

		vsl_color (app_handle, lc->lines[i]->colour);
		vsl_width (app_handle, 1);
		vsm_color (app_handle, lc->lines[i]->colour);
	#ifdef PMARKS /* use own pmarker code */
		vsf_color (app_handle, lc->lines[i]->colour);
		my_pmarker (app_handle, lc->lines[i]->point_style, 2, pxy);
	#else /* use builtin pmarker code */
		vsm_type (app_handle, lc->lines[i]->point_style);
		v_pmarker (app_handle, 2, pxy);
	#endif
		vsl_type (app_handle, lc->lines[i]->line_style);
		v_pline (app_handle, 2, pxy);

		v_gtext (app_handle, kx+3.5*key_char_w, ky, lc->lines[i]->label);
		ky += key_char_h;
	}
}
Exemplo n.º 15
0
void chart_draw_bar (struct bar_chart * bc, int app_handle, int x, int y, int w, int h) {
	int pxy[4];
	int i, curr_x, curr_y;
	int scale_x_num, scale_x_den, scale_y_num, scale_y_den;
	int max_value, max_value_width, bar_chars, offset;
	char str[20]; /* numbers won't be larger than 20 */
	int bx, by, bw, bh; /* dimensions for bar chart */
	int char_w, char_h, cell_w, cell_h;

	clear_area (app_handle, x, y, w, h);
	if ((w < 50) || (h < 50)) return; /* too small to draw anything */

	max_value = find_max (bc->values, bc->num_bars);

	/* Find dimensions for display of bar chart */
	find_chart_dimensions (app_handle, 0, max_value, x, y, w, h, &max_value_width, &bx, &by, &bw, &bh);

	scale_x_num = bw/bc->num_bars;
	scale_x_den = bw%bc->num_bars;
	scale_y_num = bh/max_value;
	scale_y_den = bh%max_value;

	draw_axes_lines (app_handle, bx, by, bw, bh);
	draw_main_labels (app_handle, bc->title, bc->x_label, bc->y_label,
		bx, by, bw, bh, max_value_width);

	vsf_color (app_handle, BLACK);
	vst_point (app_handle, AXES_LABEL_FONT, &char_w, &char_h, &cell_w, &cell_h);
	vsl_width (app_handle, 1);
	bar_chars = scale_x_num / cell_w; /* the number of chars that will fit in a bar */

	for (i = 0; i < bc->num_bars; i += 1) {
		pxy[0] = bx + i*scale_x_num+(i*scale_x_den)/bc->num_bars + scale_x_num/2;
		pxy[1] = by;
		pxy[2] = pxy[0];
		pxy[3] = by+5;

		v_pline (app_handle, 2, pxy);

		if (strlen (bc->labels[i]) < bar_chars) {
			/* label fits, so center and display */
			int offset = cell_w * (bar_chars - strlen (bc->labels[i]))/2;
			v_gtext (app_handle, pxy[0]-scale_x_num/2+cell_w/2+offset, pxy[3]+1.5*cell_h, bc->labels[i]);
		} else {
			/* label will not fit, so take only first part */
			int j;

			for (j=0; j<bar_chars; j+=1) {
				str[j] = bc->labels[i][j];
			}
			str[bar_chars]=0;
			v_gtext (app_handle, pxy[0]-scale_x_num/2+cell_w/2, pxy[3]+1.5*cell_h, str);
		}
	}
	draw_y_axis_labels (app_handle, 0, max_value, bx, by, bh);

	/* draw the bars */
	for (i = 0; i < bc->num_bars; i += 1) {
		vsf_color (app_handle, bc->colours[i]);
		vsf_interior (app_handle, bc->interior[i]);
		vsf_style (app_handle, bc->style[i]);

		pxy[0] = bx + i*scale_x_num + (i*scale_x_den)/bc->num_bars + 1;
		pxy[1] = by-1;
		pxy[2] = bx + (i+1)*scale_x_num+((i+1)*scale_x_den)/bc->num_bars;
		pxy[3] = by - bc->values[i]*scale_y_num-(bc->values[i]*scale_y_den)/max_value;

		v_bar (app_handle, pxy);
	}

}