2 #include <Xw_Extension.h>
4 /* ifdef then trace on */
6 #define TRACE_SET_MARKER_ATTRIB
10 XW_ATTRIB Xw_set_marker_attrib (awindow,color,type,width,mode):
11 XW_EXT_WINDOW *awindow
12 int color ; Color index to used 0 >= x < MAXCOLOR
13 int type ; Type can be TRUE if marker must be filled with the
14 set_poly_attrib attributes
15 int width ; Width index to used 0 >= x < MAXWIDTH
16 DRAWMODE mode ; Draw Mode must be one of DRAWMODE enum
18 Set Marker Color,Type and Marker current graphic attrib .
20 Returns Selected Marker Attribute Index if successful
21 Returns 0 if Bad Color,Type or Marker Index
26 XW_ATTRIB Xw_set_marker_attrib (void *awindow,int color,int type,int width,XW_DRAWMODE mode)
28 XW_ATTRIB Xw_set_marker_attrib (awindow,color,type,width,mode)
33 #endif /*XW_PROTOTYPE*/
35 XW_EXT_WINDOW *pwindow = (XW_EXT_WINDOW*)awindow;
38 int i,j,k,function,mask = 0;
39 unsigned long planemask,hcolor ;
41 if( !Xw_isdefine_window(pwindow) ) {
42 /*ERROR*Bad EXT_WINDOW Address*/
43 Xw_set_error(24,"Xw_set_marker_attrib",pwindow) ;
47 if( _BINDEX > 0 ) return (1) ;
49 if ( !Xw_isdefine_color(_COLORMAP,color) ) {
50 /*ERROR*Bad Defined Color*/
51 Xw_set_error(41,"Xw_set_marker_attrib",&color) ;
55 if ( !Xw_isdefine_width(_WIDTHMAP,width) ) {
56 /*WARNING*Bad Defined Width*/
57 Xw_set_error(52,"Xw_set_marker_attrib",&width) ;
61 if( !_WIDTHMAP || (_WIDTHMAP->widths[width] <= 1) ) width = 0 ;
63 code = QGCODE(color,type,width,mode) ;
64 if( code == pwindow->qgmark[pwindow->markindex].code ) {
65 /* The last index computed is already set*/
66 pwindow->qgmark[pwindow->markindex].count++ ;
67 return (pwindow->markindex+1) ;
70 for( i=j=0,k=MAXQG ; i<MAXQG ; i++ ) {
71 if( code == pwindow->qgmark[i].code ) k = i ;
72 if( pwindow->qgmark[i].count < pwindow->qgmark[j].count ) j = i;
76 /* A GC index already exist,use it */
77 pwindow->markindex = k ;
78 pwindow->qgmark[k].count++ ;
82 pwindow->markindex = j ;
83 pwindow->qgmark[j].count = 1 ;
85 Xw_get_color_attrib(pwindow,mode,color,&hcolor,&function,&planemask);
86 if( mode != QGMODE(pwindow->qgmark[j].code) ) {
87 mask |= GCFunction | GCPlaneMask | GCForeground ;
88 gc_values.function = function ;
89 gc_values.plane_mask = planemask ;
90 gc_values.foreground = hcolor ;
91 } else if( color != QGCOLOR(pwindow->qgmark[j].code) ) {
93 gc_values.foreground = hcolor ;
96 if( width != QGWIDTH(pwindow->qgmark[j].code) ) {
99 gc_values.line_width = _WIDTHMAP->widths[width] ;
101 gc_values.line_width = 0 ;
108 XChangeGC(_DISPLAY,pwindow->qgmark[j].gc,mask,&gc_values) ;
109 pwindow->qgmark[j].code = code ;
111 #ifdef TRACE_SET_MARKER_ATTRIB
112 if( Xw_get_trace() > 1 ) {
113 printf(" %d = Xw_set_marker_attrib(%lx,%d,%d,%d,%d)\n",
114 k,(long ) pwindow,color,type,width,mode) ;