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); }
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); }
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 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); }
/******************************************************************************* 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; }
/* 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); }
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); } } }
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); }
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 ); }
/* 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); } }
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 ) ; }
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; }
/* 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); } }
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; } }
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); } }