0022792: Globally defined symbol PI conflicts with VTK definition (Intel compiler)
[occt.git] / src / Xw / Xw_Extension.h
1
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <unistd.h>
5 #include <math.h>
6 #include <string.h>
7 #include <limits.h>
8
9 #ifndef TRACE
10 //#define TRACE
11 #endif
12
13 #include <Xw_Cextern.hxx>
14
15 #include <X11/Xlib.h>
16 #include <X11/Xutil.h>
17 #include <X11/Xatom.h>
18 #include <X11/keysym.h>
19 #include <X11/XWDFile.h>
20
21 #ifndef min
22 #define min(a,b)        (a>b ? b : a)
23 #endif
24
25 #ifdef HAVE_CONFIG_H
26 # include <config.h>
27 #endif
28
29 #ifdef HAVE_X11_EXTENSIONS_TRANSOLV_H
30 #include <X11/extensions/transovl.h>
31 #endif
32
33 #ifndef max
34 #define max(a,b)        (a<b ? b : a)
35 #endif
36
37 #define DRAD (M_PI/180.)
38
39 #define MAXLINES 256
40 #define MAXPOLYS 256
41 #define MAXPOINTS 1024
42 #define MAXSEGMENTS 1024
43 #define MAXARCS 1024
44 #define MAXLTEXTS 256
45 #define MAXPTEXTS 256
46 #define MAXCHARS 1024
47 #define MAXIMAGES 8
48 #define MAXLMARKERS 256
49 #define MAXPMARKERS 256
50 #define MAXBUFFERS 8
51
52 #define MAXQG 32
53
54 #define MAXTYPE 256
55 #define MAXCOLOR 512
56 #define MINCOLOR 32
57 #define FRECOLOR 14
58 #define MAXWIDTH 256
59 #define MAXFONT 256
60 #define MAXTILE 256
61 #define MAXMARKER 256
62 #define MAXEVENT XW_ALLEVENT+1
63 #define MAXCURSOR 200
64 #define MAXANGLE     23040
65 #define MINTEXTSIZE 8
66
67 #define _ATTRIBUTES     pwindow->attributes
68 #define _WINDOW         pwindow->window
69 #define _PIXMAP         pwindow->pixmap
70 #define _NWBUFFER       pwindow->nwbuffer
71 #define _FWBUFFER       pwindow->wbuffers[0]
72 #define _BWBUFFER       pwindow->wbuffers[1]
73 #define _DRAWABLE       pwindow->drawable
74 #define _COLORMAP       (pwindow->pcolormap)
75 #define _WIDTHMAP       (pwindow->pwidthmap)
76 #define _TYPEMAP        (pwindow->ptypemap)
77 #define _FONTMAP        (pwindow->pfontmap)
78 #define _TILEMAP        (pwindow->ptilemap)
79 #define _MARKMAP        (pwindow->pmarkmap)
80 #define _ROOT           (_ATTRIBUTES.root)
81 #define _SCREEN         (_ATTRIBUTES.screen)
82 #define _VISUAL         (_ATTRIBUTES.visual)
83 #if defined(__cplusplus) || defined(c_plusplus)
84 #define _CLASS          (_VISUAL->c_class)
85 #else
86 #define _CLASS          (_VISUAL->class)
87 #endif
88 #ifdef _X
89 #undef _X
90 #endif
91 #define _X              (_ATTRIBUTES.x)
92 #ifdef _Y
93 #undef _Y
94 #endif
95 #define _Y              (_ATTRIBUTES.y)
96 #define _WIDTH          (_ATTRIBUTES.width)
97 #define _HEIGHT         (_ATTRIBUTES.height)
98 #define _STATE          (_ATTRIBUTES.map_state)
99 #define _DEPTH          (_ATTRIBUTES.depth)
100 #define _EVENT_MASK     (_ATTRIBUTES.your_event_mask)
101
102 #define QGCODE(color,type,width,mode) ((color<<20)|(type<<12)|(width<<4)|mode) 
103 #define QGCOLOR(code) ((code>>20)&0xFFF)
104 #define QGSETCOLOR(code,color)  ((code&0x000FFFFF)|(color<<20))
105 #define QGTYPE(code)  ((code>>12)&0xFF)
106 #define QGSETTYPE(code,type)    ((code&0xFFF00FFF)|(type<<12))
107 #define QGWIDTH(code) ((code>> 4)&0xFF)
108 #define QGSETWIDTH(code,width)  ((code&0xFFFFF00F)|(width<<4))
109 #define QGTILE(code) ((code>> 4)&0xFF)
110 #define QGSETTILE(code,mark)    ((code&0xFFFFF00F)|(mark<<4))
111 #define QGFONT(code) ((code>> 4)&0xFF)
112 #define QGSETFONT(code,font)    ((code&0xFFFFF00F)|(font<<4))
113 #define QGMODE(code)  (code&0xF)
114 #define QGSETMODE(code,mode)  ((code&0xFFFFFFF0)|mode)
115
116 #define ROUND(v) ( ((v) > 0.) ? ((v) < (float)(INT_MAX-1)) ? \
117                  (int)((v)+.5) : INT_MAX : ((v) > (float)(INT_MIN+1)) ? \
118                  (int)((v)-.5) : INT_MIN )
119 #ifdef OLD      /*S3593 OPTIMISATION*/
120 #define PXPOINT(x) (ROUND((x) / pwindow->xratio))
121 #define PYPOINT(y) (ROUND(_HEIGHT - ((y) / pwindow->yratio)))
122 #define PVALUE(v) (ROUND((v) / ((pwindow->xratio+pwindow->yratio)/2.)))
123 #define UVALUE(v) ((float)(v) * (pwindow->xratio+pwindow->yratio)/2.)
124 #else
125 #define PXPOINT(x) ((int)((x) / pwindow->xratio))
126 #define PYPOINT(y) ((int)(_HEIGHT - ((y) / pwindow->yratio)))
127 #define PVALUE(v) ((int)((v) / ((pwindow->xratio+pwindow->yratio)/2.)))
128 #define UVALUE(v) ((float)(v) * (pwindow->xratio+pwindow->yratio)/2.)
129 #endif
130
131 //OCC186
132 #undef PXPOINT
133 #undef PYPOINT
134 #undef PVALUE
135 //OCC186
136
137 #define UXPOINT(x) ((float)(x) * pwindow->xratio)
138 #define UYPOINT(y) ((float)(_HEIGHT - (y)) * pwindow->yratio)
139
140 /* DISPLAY */
141
142 #define DISPLAY_TYPE   0
143 #ifdef XW_EXT_DISPLAY
144 #undef XW_EXT_DISPLAY
145 #endif
146 #define _DDISPLAY       pdisplay->display
147 #define _DSCREEN        (pdisplay->screen)
148 #define _DVISUAL        (pdisplay->visual)
149
150 #if defined(__cplusplus) || defined(c_plusplus)
151 #define _DCLASS         (pdisplay->visual->c_class)
152 #else
153 #define _DCLASS         (pdisplay->visual->class)
154 #endif
155 #define _DCOLORMAP      pdisplay->colormap
156 #define _DGC            pdisplay->gc
157 #define _DROOT          pdisplay->rootwindow
158 #define _DGRAB          pdisplay->grabwindow
159 #define _DWIDTH         pdisplay->width
160 #define _DHEIGHT        pdisplay->height
161 #define MMPXVALUE(v) ((float)((v)*WidthMMOfScreen(_DSCREEN))/(float)_DWIDTH)
162 #define MMPYVALUE(v) ((float)((v)*HeightMMOfScreen(_DSCREEN))/(float)_DHEIGHT)
163 #define PMMXVALUE(v) ((int)((v)*_DWIDTH/(float)WidthMMOfScreen(_DSCREEN)))
164 #define PMMYVALUE(v) ((int)((v)*_DHEIGHT/(float)HeightMMOfScreen(_DSCREEN)))
165 typedef enum {
166         XW_SERVER_IS_UNKNOWN,XW_SERVER_IS_DEC,XW_SERVER_IS_SUN,
167         XW_SERVER_IS_SGI,XW_SERVER_IS_NEC,XW_SERVER_IS_HP
168 } XW_SERVER_TYPE ;
169
170 typedef struct {
171     /* Avoid 64-bit portability problems by being careful to use
172        longs due to the way XGetWindowProperty is specified. Note
173        that these parameters are passed as CARD32s over X
174        protocol. */
175    
176     long overlay_visual;
177     long transparent_type;
178     long value;
179     long layer;
180 } XOverlayVisualInfo ;
181
182 typedef struct {
183         void    *link ;                  
184         int      type ;                         /* DISPLAY_TYPE */
185         XW_SERVER_TYPE   server ;
186         Display  *display ;
187         Screen   *screen ;
188         Visual   *visual ;
189         GC       gc ;
190         int      width ;
191         int      height ;
192         Colormap colormap ;
193         Window   rootwindow ;
194         Window   grabwindow ;
195         float    gamma ;
196         char*    gname ;
197 } XW_EXT_DISPLAY;
198 /* COLORMAP */
199
200 #ifdef XW_EXT_COLORMAP
201 #undef XW_EXT_COLORMAP
202 #endif
203
204 #define COLORMAP_TYPE   2
205 #define _CDISPLAY       (pcolormap->connexion->display)
206 #define _CSCREEN        (pcolormap->connexion->screen)
207 #define _CCOLORMAP      (pcolormap->connexion->colormap)
208 #define _CROOT          (pcolormap->connexion->rootwindow)
209 #define _CVISUAL        (pcolormap->visual)
210 #if defined(__cplusplus) || defined(c_plusplus)
211 #define _CCLASS         (pcolormap->visual->c_class)
212 #else
213 #define _CCLASS         (pcolormap->visual->class)
214 #endif
215 #define _CINFO          (pcolormap->info)
216 #define _CGINFO         (pcolormap->ginfo)
217 #define FREECOLOR 0             /* Free color Index if define[] = 0 */
218 #define USERCOLOR  1            /* User color Index if define[] = 1 */ 
219 #define IMAGECOLOR 2            /* Image color Index if define[] = 2 */
220 #define HIGHCOLOR 3             /* HighLight color Index if define[] = 3 */
221 #define BACKCOLOR 4             /* Background color Index if define[] = 4 */
222 #define SYSTEMCOLOR 5           /* System color Index if define[] = 5 */
223
224 typedef struct {
225         void     *link ;
226         int      type ;                         /* COLORMAP_TYPE */
227         XW_EXT_DISPLAY* connexion ;
228         Visual   *visual ;
229         XStandardColormap info,ginfo ;
230         int      maxhcolor ;                    /* Colormap Hard Length */
231         int      maxucolor ;                    /* Colormap User Length */
232         int      maxcolor ;                     /* Colormap Length */
233         int      maxwindow ;                    /* Number of reference Window*/
234         Xw_TypeOfMapping mapping ;              /* Colormap mapping */
235         unsigned char define[MAXCOLOR] ;        /* 0 if FREE color */
236         unsigned long highpixel ;               /* HighLightPixel Value */
237         unsigned long backpixel ;               /* TransparentPixel Value */
238         unsigned long pixels[MAXCOLOR] ;
239 } XW_EXT_COLORMAP ;
240
241 /* WIDTHMAP */
242
243 #define WIDTHMAP_TYPE   3
244 #ifdef XW_EXT_WIDTHMAP
245 #undef XW_EXT_WIDTHMAP
246 #endif
247
248 #define _WDISPLAY       (pwidthmap->connexion->display)
249
250 typedef struct {
251         void     *link ;
252         int      type ;                         /* WIDTHMAP_TYPE */
253         XW_EXT_DISPLAY* connexion ;
254         int      maxwidth ;                     /* Widthmap Length */
255         int      maxwindow ;                    /* Number of reference Window */
256         unsigned char widths[MAXWIDTH] ;        /* Pixel width > 0 if defined*/
257 } XW_EXT_WIDTHMAP ;
258
259 /* TYPEMAP */
260
261 #define TYPEMAP_TYPE   4
262 #ifdef XW_EXT_TYPEMAP
263 #undef XW_EXT_TYPEMAP
264 #endif
265
266 #define _TDISPLAY       (ptypemap->connexion->display)
267
268 typedef struct {
269         void     *link ;
270         int      type ;                         /* TYPEMAP_TYPE */
271         XW_EXT_DISPLAY* connexion ;
272         int      maxtype ;                      /* Typemap Length */
273         int      maxwindow ;                    /* Number of reference Window */
274         unsigned char *types[MAXTYPE] ;         /* Line Type Pixel lengths */
275                                                 /* NULL if type is not defined*/
276 } XW_EXT_TYPEMAP ;
277
278 /* FONTMAP */
279
280 #define FONTMAP_TYPE   5
281 #ifdef XW_EXT_FONTMAP
282 #undef XW_EXT_FONTMAP
283 #endif
284
285 #define _FDISPLAY       (pfontmap->connexion->display)
286
287 typedef struct {
288         void*           link ;
289         int             type ;          /* FONTMAP_TYPE */
290         XW_EXT_DISPLAY* connexion ;
291         int             maxfont ;       /* Fontmap Length */
292         int             maxwindow ;     /* Number of reference Window */
293         float   gsizes[MAXFONT] ;       /* Generic Font size in MM */
294         float   fsizes[MAXFONT] ;       /* Font size in MM */
295         float   fratios[MAXFONT] ;      /* Font baseline ratio */
296         float   ssizex[MAXFONT] ;       /* Selected X Font size in MM */
297         float   ssizey[MAXFONT] ;       /* Selected Y Font size in MM */
298         float   gslants[MAXFONT] ;      /* Generic Font slant in RAD */
299         float   sslants[MAXFONT] ;      /* Selected Font slant in RAD */
300         char*   gnames[MAXFONT] ;       /* Generic font name */
301         char*   snames[MAXFONT] ;       /* Selected font name */
302         XFontStruct*    fonts[MAXFONT] ;/* Selected Font structure */
303                                         /* NULL if font is not defined*/
304 } XW_EXT_FONTMAP ;
305
306 /* TILEMAP */
307
308 #define TILEMAP_TYPE   6
309 #ifdef XW_EXT_TILEMAP
310 #undef XW_EXT_TILEMAP
311 #endif
312
313 #define _PDISPLAY       (ptilemap->connexion->display)
314
315 typedef struct {
316         void     *link ;
317         int      type ;                         /* TILEMAP_TYPE */
318         XW_EXT_DISPLAY* connexion ;
319         int      maxtile ;                      /* Tilemap Length */
320         int      maxwindow ;                    /* Number of reference Window */
321         Pixmap   tiles[MAXTILE] ;               /* Tile pixmap */
322                                                 /* 0 if tile is not defined */
323 } XW_EXT_TILEMAP ;
324
325 /* MARKMAP */
326
327 #define MARKMAP_TYPE   7
328 #ifdef XW_EXT_MARKMAP
329 #undef XW_EXT_MARKMAP
330 #endif
331
332 #define _MDISPLAY       (pmarkmap->connexion->display)
333
334 typedef struct {
335         void     *link ;
336         int      type ;                         /* MARKMAP_TYPE */
337         XW_EXT_DISPLAY* connexion ;
338         int      maxmarker ;                    /* Markmap Length */
339         int      maxwindow ;                    /* Number of reference Window */
340         unsigned int width[MAXMARKER] ;         /* Pmarker Size in pixels */
341         unsigned int height[MAXMARKER] ;        /* Pmarker Size in pixels */
342         Pixmap   marks[MAXMARKER] ;             /* Pmarker pixmap */
343         int     npoint[MAXMARKER] ;             /* Lmarker length */
344         int*    spoint[MAXMARKER] ;             /* Lmarker status   */
345         float*  xpoint[MAXMARKER] ;             /* Lmarker x coords */
346         float*  ypoint[MAXMARKER] ;             /* Lmarker y coords */
347 } XW_EXT_MARKMAP ;
348
349 /* IMAGEDATA*/
350
351 #define IMAGE_TYPE   8
352 #ifdef XW_EXT_IMAGEDATA
353 #undef XW_EXT_IMAGEDATA
354 #endif
355
356 #define _ICOLORMAP      (pimage->pcolormap)
357 #define _IVISUAL        (_ICOLORMAP->visual)
358 #define _IIMAGE         (pimage->pximage)
359 #define _ZIMAGE         (pimage->zximage)
360 #define _IINFO          (pimage->pimageinfo)
361
362 typedef struct {
363         void     *link ;
364         int      type ;                         /* IMAGE_TYPE */
365         XW_EXT_COLORMAP *pcolormap ;
366         int      maxwindow ;                    /* Number of reference Window*/
367         float    zoom;                          /* Zoom factor */
368         XImage   *pximage ;                     /* Ref image */
369         XImage   *zximage ;                     /* Zoomed image */
370         XW_USERDATA *pimageinfo ;               /* external IMAGE Infos*/
371 } XW_EXT_IMAGEDATA ;
372
373 typedef struct {
374         void*   link ;
375         int     isupdated ;
376         int     npoint ;
377         XPoint  rpoints[MAXPOINTS] ;
378         XPoint  upoints[MAXPOINTS] ;
379 } XW_EXT_POINT ;
380
381 typedef struct {
382         void*   link ;
383         int     nchar ;
384         char    chars[MAXCHARS] ;
385 } XW_EXT_CHAR ;
386
387 typedef struct {
388         void*   link ;
389         int     isupdated ;
390         int     nseg ;
391         XSegment rsegments[MAXSEGMENTS] ;
392         XSegment usegments[MAXSEGMENTS] ;
393 } XW_EXT_SEGMENT ;
394
395 typedef struct {
396         void*   link ;
397         int     isupdated ;
398         int     nmark ;
399         int     nseg ;
400         int     marks[MAXLMARKERS] ;            /* seg numbers */
401         XPoint  rcenters[MAXLMARKERS] ;         /* marker center */
402         XPoint  ucenters[MAXLMARKERS] ;         /* marker center */
403         XSegment rsegments[MAXSEGMENTS] ;
404         XSegment usegments[MAXSEGMENTS] ;
405 } XW_EXT_LMARKER ;
406
407 typedef struct {
408         void*   link ;
409         int     isupdated ;
410         int     nmark ;
411         int     npoint ;
412         int     marks[MAXPMARKERS] ;            /* point numbers */
413         XPoint  rcenters[MAXPMARKERS] ;         /* marker center */
414         XPoint  ucenters[MAXPMARKERS] ;         /* marker center */
415         XPoint  rpoints[MAXPOINTS] ;
416         XPoint  upoints[MAXPOINTS] ;
417 } XW_EXT_PMARKER ;
418
419 typedef struct {
420         void*   link ;
421         int     isupdated ;
422         int     nline ;
423         int     lines[MAXLINES] ;               /* line point numbers */
424         XPoint  *plines[MAXLINES] ;             /* LINE descriptor */
425 } XW_EXT_LINE ;
426
427 typedef struct {
428         void*   link ;
429         int     isupdated ;
430         int     npoly ;
431         int     polys[MAXPOLYS] ;               /* poly point numbers */
432         int     paths[MAXPOLYS] ;               /* path point numbers */
433         XPoint  *ppolys[MAXPOLYS] ;             /* POLY descriptor */
434 } XW_EXT_POLY ;
435
436 typedef struct {
437         void*   link ;
438         int     isupdated ;
439         int     narc ;
440         XArc    rarcs[MAXARCS] ;
441         XArc    uarcs[MAXARCS] ;
442 } XW_EXT_ARC ;
443
444 typedef struct {
445         void*   link ;
446         int     isupdated ;
447         int     ntext ;
448         int     modes[MAXLTEXTS] ;              /* TEXT draw mode */
449         int     texts[MAXLTEXTS] ;
450         char    *ptexts[MAXLTEXTS] ;            /* TEXT descriptor */
451         XPoint  rpoints[MAXLTEXTS] ;
452         XPoint  upoints[MAXLTEXTS] ;
453         float   rangles[MAXLTEXTS] ;            /* rotated string angle */
454         float   uangles[MAXLTEXTS] ;             
455         float   rscalex[MAXLTEXTS] ;            /* rotated string scale */
456         float   uscalex[MAXLTEXTS] ;             
457         float   rscaley[MAXLTEXTS] ;            /* rotated string scale */
458         float   uscaley[MAXLTEXTS] ;             
459         float   slants[MAXLTEXTS] ;             /* TEXT slant */
460 } XW_EXT_LTEXT ;
461
462 typedef struct {
463         void*   link ;
464         int     isupdated ;
465         int     ntext ;
466         int     modes[MAXLTEXTS] ;              /* TEXT draw mode */
467         int     texts[MAXPTEXTS] ;
468         char    *ptexts[MAXPTEXTS] ;            /* TEXT descriptor */
469         XPoint  rpoints[MAXPTEXTS] ;
470         XPoint  upoints[MAXPTEXTS] ;
471         float   rangles[MAXPTEXTS] ;            /* rotated string angle */
472         float   uangles[MAXPTEXTS] ;            
473         float   marges[MAXPTEXTS] ;             /* polygon margins */
474         float   rscalex[MAXLTEXTS] ;            /* rotated string scale */
475         float   uscalex[MAXLTEXTS] ;             
476         float   rscaley[MAXLTEXTS] ;            /* rotated string scale */
477         float   uscaley[MAXLTEXTS] ;             
478         float   slants[MAXLTEXTS] ;             /* TEXT slant */
479 } XW_EXT_PTEXT ;
480
481 typedef struct {
482         void    *link ;
483         int     isupdated ;
484         int     nimage ;                        /* Image number to drawn */
485         XPoint  rpoints[MAXIMAGES] ;
486         XPoint  upoints[MAXIMAGES] ;
487         XW_EXT_IMAGEDATA *pimagdata[MAXIMAGES] ;
488 } XW_EXT_IMAGE ;
489
490 typedef struct {
491         int     bufferid ;                      /* Identification */
492         GC gcf,gcb ;                            /* Graphic context */
493         XW_ATTRIB code ;                        /* QG code as C,T,F,M*/
494         int     isdrawn;                        /* True if visible at screen */
495         int     isempty;                        /* True if empty */
496         int     isretain;                       /* True if retain drawing*/
497         int     isupdated;                      /* True if has been updated*/
498         int     rxmin,rymin,rxmax,rymax;        /* Min Max ref. buffer */
499         int     uxmin,uymin,uxmax,uymax;        /* Min Max upt. buffer */
500         int     xpivot,ypivot ;                 /* Buffer ref.  pivot point */
501         int     dxpivot,dypivot ;               /* Current Buffer transl. vector */
502         float   xscale,yscale;                  /* Buffer ref. drawing scale */
503         float   dxscale,dyscale;                /* Current Buffer drawing scale */
504         float   angle;                          /* Buffer ref. drawing angle */
505         float   dangle;                         /* Current Buffer drawing angle */
506         XW_EXT_CHAR     *ptextdesc ;            /* Retain desc. texts list */
507         XW_EXT_POINT    *plinedesc ;            /* Retain desc. lines list */
508         XW_EXT_POINT    *ppntlist ;             /* Retain Points list */
509         XW_EXT_SEGMENT  *pseglist ;             /* Retain Segments list */
510         XW_EXT_LINE     *plinelist ;            /* Retain Polylines list */
511         XW_EXT_POLY     *ppolylist ;            /* Retain Polygones list */
512         XW_EXT_ARC      *plarclist ;            /* Retain Arcs list */
513         XW_EXT_ARC      *pparclist ;            /* Retain poly Arcs list */
514         XW_EXT_LTEXT    *pltextlist ;           /* Retain Texts list */
515         XW_EXT_PTEXT    *pptextlist ;           /* Retain poly Texts list */
516         XW_EXT_LMARKER  *plmarklist ;           /* Retain Markers list */
517         XW_EXT_PMARKER  *ppmarklist ;           /* Retain poly Markers list */
518         XW_EXT_IMAGE    *pimaglist ;            /* Retain Image list */
519 } XW_EXT_BUFFER ;
520
521 typedef struct {                                /* Line GC */
522         GC gc ;                                 /* Graphic context */
523         unsigned int count ;                    /* Used count info */
524         XW_ATTRIB code ;                        /* QG code as C,T,W,M*/
525 } XW_QGL ;
526
527 typedef struct {                                /* Polygon GC */
528         GC gc ;                                 /* Graphic context */
529         unsigned int count ;                    /* Used count info */
530         XW_ATTRIB code ;                        /* QG code as C,T,T,M*/
531 } XW_QGP ;
532
533 typedef struct {                                /* Text GC */
534         GC gc ;                                 /* Graphic context */
535         unsigned int count ;                    /* Used count info */
536         XW_ATTRIB code ;                        /* QG code as C,T,F,M*/
537 } XW_QGT ;
538
539 typedef struct {                                /* Marker GC */
540         GC gc ;                                 /* Graphic context */
541         unsigned int count ;                    /* Used count info */
542         XW_ATTRIB code ;                        /* QG code as C,T,T,M*/
543 } XW_QGM ;
544
545 #define _BIMAGE pwindow->qgwind.pimage
546 #define _BMETHOD pwindow->qgwind.method
547 #define _BPIXMAP pwindow->qgwind.pixmap
548 #define _BINDEX  pwindow->qgwind.cbufindex
549 #define _BUFFER(index) pwindow->qgwind.pbuflist[index]
550
551 typedef struct {                                /* Window GC */
552         GC gc ;                                 /* Graphic context */
553         GC gcclear ;                            /* Graphic context */
554         GC gccopy ;                             /* Graphic context */
555         GC gchigh ;                             /* Graphic context */
556         XW_ATTRIB code ;                        /* QG code as C,T,T,M*/
557         XW_EXT_IMAGEDATA *pimage ;              /* Back image data's */
558         Aspect_FillMethod method ;              /* Back fill method */
559         Pixmap pixmap ;                         /* Back Pixmap or 0 */
560         int             cbufindex ;             /* Current buffer index */      
561         XW_EXT_BUFFER   pbuflist[MAXBUFFERS];   /* Retain primitives list*/
562 } XW_QGW ;
563
564 /* CALLBACK */
565
566 typedef struct {
567         XW_CALLBACK     function ;                      /* CallBack Address */
568         void            *userdata ;                     /* CallBack UserData*/
569 } XW_ECBK ;
570
571 #ifdef XW_PROTOTYPE
572 typedef XW_STATUS (*XW_ICALLBACK)(XW_EVENT* anyevent) ;
573 #else
574 typedef XW_STATUS (*XW_ICALLBACK)() ;
575 #endif /*XW_PROTOTYPE*/
576
577 typedef struct {
578         XW_ICALLBACK    function ;                      /* CallBack Address */
579 } XW_ICBK ;
580
581 /* WINDOW */
582
583 #define WINDOW_TYPE   1
584 #ifdef XW_EXT_WINDOW
585 #undef XW_EXT_WINDOW
586 #endif
587 #define _DISPLAY        (pwindow->connexion->display)
588 typedef struct {
589         void *link ;                     
590         int      type ;                         /* WINDOW_TYPE */
591         XWindowAttributes attributes ;          /* Window Attributes */
592         int     axleft ;                        /* Actual Window position */
593         int     aytop ;                         /* Actual Window position */
594         int     axright ;                       /* Actual Window position */
595         int     aybottom ;                      /* Actual Window position */
596         int     rwidth ;                        /* Requested Window width*/
597         int     rheight ;                       /* Requested Window height*/
598         float   xratio ;                         /* Window User/Pixel Ratio*/
599         float   yratio ;                         /* Window User/Pixel Ratio*/
600         XW_EXT_DISPLAY* connexion ;
601         Window   window ;                       /* Window ID */
602         Pixmap   pixmap ;                       /* Associated Window Pixmap*/
603         int      nwbuffer ;                     /* MultiBuffers number if any */
604         XID      wbuffers[2] ;                  /* Associated Window Buffers*/
605         Drawable drawable ;                     /* Can be Window or Pixmap */
606         int      backindex ;                    /* Colormap background Index */
607         int      clipflag ;                     /* Unable internal clipping*/ 
608         XW_EXT_COLORMAP *pcolormap ;            /* Colormap Extension */
609         XW_EXT_WIDTHMAP *pwidthmap ;            /* Widthmap Extension */
610         XW_EXT_TYPEMAP  *ptypemap ;             /* Widthmap Extension */
611         XW_EXT_FONTMAP  *pfontmap ;             /* Fontmap Extension */
612         XW_EXT_TILEMAP  *ptilemap ;             /* Tilemap Extension */
613         XW_EXT_MARKMAP  *pmarkmap ;             /* Markmap Extension */
614         int             lineindex ;             /* Current QG line index used */
615         XW_QGL          qgline[MAXQG] ;         /* QG Line Bundle indexs */
616         int             polyindex ;             /* Current QG poly index used */
617         XW_QGP          qgpoly[MAXQG] ;         /* QG poly Bundle indexs */
618         int             textindex ;             /* Current QG text index used */
619         XW_QGT          qgtext[MAXQG] ;         /* QG text Bundle indexs */
620         int             markindex ;             /* Current QG markerindex used*/
621         XW_QGM          qgmark[MAXQG] ;         /* QG marker Bundle indexs */
622         XW_QGW          qgwind ;                /* QG Window Bundle */
623         XW_ECBK         ecbk[MAXEVENT] ;        /* External CallBack EventList*/
624         XW_ICBK         icbk[MAXEVENT] ;        /* Internal CallBack EventList*/
625         void            *other ;                /* Other data extension */
626 } XW_EXT_WINDOW;
627
628 /* ICONS */
629
630 #define ICON_TYPE   10
631
632 typedef struct {
633         void    *link ;                  
634         int     type ;                          /* ICON_TYPE */
635         char    *pname ;
636         char    *pfile ;
637         XW_EXT_IMAGEDATA *pimage ;      /* Associated Image data's */
638         Pixmap  pixmap ;                /* Associated Pixmap if any */
639         int     update;
640 } XW_EXT_ICON ;
641
642 /*
643         Internal Functions
644 */
645
646 #define Xw_malloc malloc
647 #define Xw_calloc calloc
648 #define Xw_free free
649
650 #ifdef XW_PROTOTYPE
651 #ifdef __cplusplus
652 extern "C" {
653 #endif
654 void _XInitImageFuncPtrs(XImage* pximage);
655 #ifdef __cplusplus
656 }
657 #endif
658 XVisualInfo* Xw_get_visual_info(XW_EXT_DISPLAY* display,Xw_TypeOfVisual tclass);
659 XVisualInfo* Xw_get_overlay_visual_info(XW_EXT_DISPLAY* display,Xw_TypeOfVisual tclass,unsigned long* backpixel) ;
660
661 XW_EXT_DISPLAY* Xw_get_display_structure(Display* display) ;
662 XW_EXT_DISPLAY* Xw_add_display_structure(int size) ;
663 XW_STATUS Xw_del_display_structure(XW_EXT_DISPLAY* adisplay) ;
664
665 XW_EXT_WINDOW* Xw_get_window_structure(Window window) ;
666 XW_EXT_WINDOW* Xw_add_window_structure(int size) ;
667 XW_STATUS Xw_del_window_structure(XW_EXT_WINDOW* awindow) ;
668 XW_STATUS Xw_reset_attrib(XW_EXT_WINDOW* awindow) ;
669
670 XW_STATUS Xw_redraw_buffer(XW_EXT_WINDOW *pwindow,XW_EXT_BUFFER *pbuffer) ;
671 XW_STATUS Xw_update_buffer(XW_EXT_WINDOW *pwindow,XW_EXT_BUFFER *pbuffer) ;
672 XW_EXT_BUFFER* Xw_get_buffer_structure(XW_EXT_WINDOW *pwindow,int bufferid) ;
673
674 XW_EXT_CHAR* Xw_add_text_desc_structure(XW_EXT_BUFFER *pbuflist) ;
675 XW_STATUS Xw_del_text_desc_structure(XW_EXT_BUFFER *pbuflist) ;
676
677 XW_EXT_POINT* Xw_add_line_desc_structure(XW_EXT_BUFFER *pbuflist) ;
678 XW_STATUS Xw_del_line_desc_structure(XW_EXT_BUFFER *pbuflist) ;
679
680 XW_EXT_POINT* Xw_add_point_structure(XW_EXT_BUFFER *pbuflist) ;
681 XW_STATUS Xw_del_point_structure(XW_EXT_BUFFER *pbuflist) ;
682 void Xw_draw_pixel_points(XW_EXT_WINDOW* pwindow,XW_EXT_POINT* ppntlist,GC gc) ;
683
684 XW_EXT_SEGMENT* Xw_add_segment_structure(XW_EXT_BUFFER *pbuflist) ;
685 XW_STATUS Xw_del_segment_structure(XW_EXT_BUFFER *pbuflist) ;
686 void Xw_draw_pixel_segments(XW_EXT_WINDOW* pwindow,XW_EXT_SEGMENT* pseglist,GC gc) ;
687
688 XW_EXT_LINE* Xw_add_polyline_structure(XW_EXT_BUFFER *pbuflist) ;
689 XW_STATUS Xw_del_polyline_structure(XW_EXT_BUFFER *pbuflist) ;
690 void Xw_draw_pixel_lines(XW_EXT_WINDOW* pwindow,XW_EXT_LINE* plinelist,GC gc) ;
691
692 XW_EXT_ARC* Xw_add_arc_structure(XW_EXT_BUFFER *pbuflist) ;
693 XW_STATUS Xw_del_arc_structure(XW_EXT_BUFFER *pbuflist) ;
694 void Xw_draw_pixel_arcs(XW_EXT_WINDOW* pwindow,XW_EXT_ARC* parclist,GC gc) ;
695
696 XW_EXT_ARC* Xw_add_polyarc_structure(XW_EXT_BUFFER *pbuflist) ;
697 XW_STATUS Xw_del_polyarc_structure(XW_EXT_BUFFER *pbuflist) ;
698 void Xw_draw_pixel_polyarcs(XW_EXT_WINDOW* pwindow,XW_EXT_ARC* parclist,
699                                                         GC gcpoly,GC gcline) ;
700
701 XW_EXT_POLY* Xw_add_polygone_structure(XW_EXT_BUFFER *pbuflist) ;
702 XW_STATUS Xw_del_polygone_structure(XW_EXT_BUFFER *pbuflist) ;
703 void Xw_draw_pixel_polys(XW_EXT_WINDOW* pwindow,XW_EXT_POLY* ppolylist,
704                                                         GC gcpoly,GC gcline) ;
705
706 XW_EXT_LTEXT* Xw_add_text_structure(XW_EXT_BUFFER *pbuflist) ;
707 XW_STATUS Xw_del_text_structure(XW_EXT_BUFFER *pbuflist) ;
708 void Xw_draw_pixel_texts(XW_EXT_WINDOW* pwindow,XW_EXT_LTEXT* ptextlist,
709                                                 GC gc,XW_ATTRIB code) ;
710
711 XW_EXT_PTEXT* Xw_add_polytext_structure(XW_EXT_BUFFER *pbuflist) ;
712 XW_STATUS Xw_del_polytext_structure(XW_EXT_BUFFER *pbuflist) ;
713 void Xw_draw_pixel_polytexts(XW_EXT_WINDOW* pwindow,XW_EXT_PTEXT* ptextlist,
714                         GC gctext,GC gcpoly,GC gcline,XW_ATTRIB code) ;
715
716 XW_STATUS Xw_isdefine_markerindex(XW_EXT_MARKMAP* amarkmap,int index) ;
717 XW_EXT_LMARKER* Xw_add_lmarker_structure(XW_EXT_BUFFER *pbuflist) ;
718 XW_STATUS Xw_del_lmarker_structure(XW_EXT_BUFFER *pbuflist) ;
719 void Xw_draw_pixel_lmarkers(XW_EXT_WINDOW* pwindow,XW_EXT_LMARKER* pmarklist,GC gc) ;
720 XW_EXT_PMARKER* Xw_add_pmarker_structure(XW_EXT_BUFFER *pbuflist) ;
721 XW_STATUS Xw_del_pmarker_structure(XW_EXT_BUFFER *pbuflist) ;
722 void Xw_draw_pixel_pmarkers(XW_EXT_WINDOW* pwindow,XW_EXT_PMARKER* pmarklist,GC gc) ;
723 Colormap Xw_create_colormap(XW_EXT_COLORMAP *pcolormap) ;
724 XW_EXT_COLORMAP* Xw_add_colormap_structure(int size) ;
725 XW_EXT_COLORMAP* Xw_get_colormap_structure(XW_EXT_COLORMAP* acolormap) ;
726 XW_STATUS Xw_del_colormap_structure(XW_EXT_COLORMAP* acolormap) ;
727 XW_STATUS Xw_get_color_attrib(XW_EXT_WINDOW* awindow,
728                 XW_DRAWMODE mode,int color,unsigned long* hcolor,
729                 int* function,unsigned long* planemask) ;
730 XW_STATUS Xw_isdefine_colorindex(XW_EXT_COLORMAP* acolormap,int index) ;
731 XW_STATUS Xw_ifsystem_colorindex(XW_EXT_COLORMAP* acolormap,int index) ;
732 XW_STATUS Xw_ifimage_colorindex(XW_EXT_COLORMAP* acolormap,int index) ;
733 XW_STATUS Xw_ifbackground_colorindex(XW_EXT_COLORMAP* acolormap,int index) ;
734 XW_STATUS Xw_ifhighlight_colorindex(XW_EXT_COLORMAP* acolormap,int index) ;
735 char* Xw_get_filename(char* filename,const char *extension) ;
736
737 XW_EXT_WIDTHMAP* Xw_add_widthmap_structure(int size) ;
738 XW_STATUS Xw_del_widthmap_structure(XW_EXT_WIDTHMAP* awidthmap) ;
739 XW_STATUS Xw_isdefine_widthindex(XW_EXT_WIDTHMAP* awidthmap,int index) ;
740
741 XW_EXT_TYPEMAP* Xw_add_typemap_structure(int size) ;
742 XW_STATUS Xw_del_typemap_structure(XW_EXT_TYPEMAP* atypemap) ;
743 XW_STATUS Xw_isdefine_typeindex(XW_EXT_TYPEMAP* atypemap,int index) ;
744
745 XW_EXT_FONTMAP* Xw_add_fontmap_structure(int size) ;
746 XW_STATUS Xw_del_fontmap_structure(XW_EXT_FONTMAP* afontmap) ;
747 XW_STATUS Xw_isdefine_fontindex(XW_EXT_FONTMAP* afontmap,int index) ;
748
749 XW_EXT_TILEMAP* Xw_add_tilemap_structure(int size) ;
750 XW_STATUS Xw_del_tilemap_structure(XW_EXT_TILEMAP* atilemap) ;
751 XW_STATUS Xw_isdefine_tileindex(XW_EXT_TILEMAP* atilemap,int index) ;
752
753 XW_EXT_MARKMAP* Xw_add_markmap_structure(int size) ;
754 XW_STATUS Xw_del_markmap_structure(XW_EXT_MARKMAP* amarkmap) ;
755
756 XW_EXT_IMAGEDATA* Xw_add_imagedata_structure(int size) ;
757 XW_STATUS Xw_del_imagedata_structure(XW_EXT_IMAGEDATA* aimagedata) ;
758
759 XW_EXT_IMAGE* Xw_add_image_structure(XW_EXT_BUFFER* pbuflist) ;
760 XW_STATUS Xw_del_image_structure(XW_EXT_BUFFER* pbuflist) ;
761 void Xw_draw_pixel_images(XW_EXT_WINDOW* pwindow,XW_EXT_IMAGE *pimaglist,
762                                                         GC gcimag,GC gcline) ;
763
764 XW_STATUS Xw_set_internal_event(XW_EXT_WINDOW* awindow,
765                                 XW_EVENTTYPE type,XW_ICALLBACK call_back) ;
766
767 XW_STATUS Xw_alloc_color(XW_EXT_COLORMAP* acolormap,float r,float g,float b,unsigned long *pixel,int *isapproximate);
768
769 int Xw_clip_segment(XW_EXT_WINDOW* pwindow,int x1,int y1,int x2,int y2,
770 XSegment* segment);
771 int Xw_get_trace() ;
772 int Xw_test(unsigned long mask) ;
773 void Xw_set_error(int code,const char* message,void* pvalue) ;
774 int Xw_error_handler(Display* display,XErrorEvent* event) ;
775 void Xw_set_synchronize(Display* display,int state) ;
776 void Xw_longcopy(register long* from,register long* to,register unsigned n) ;
777 void Xw_shortcopy(register short* from,register short* to,register unsigned n) ;
778 void Xw_bytecopy(register char* from,register char* to,register unsigned n) ;
779
780 #ifndef Xw_malloc
781 void* Xw_malloc(int size) ;
782 #endif
783
784 #ifndef Xw_calloc
785 void* Xw_calloc(int length,int size) ;
786 #endif
787
788 #ifndef Xw_free
789 void Xw_free(void* address) ;
790 #endif
791
792 //OCC186
793 int PXPOINT( double x, double ratio );
794 int PYPOINT( double y, double height, double ratio );
795 int PVALUE( double v, double xratio, double yratio );
796 //OCC186
797
798 #else /*XW_PROTOTYPE*/
799
800 extern "C" {
801 void _XInitImageFuncPtrs();
802 }
803 XVisualInfo* Xw_get_visual_info() ;
804 XVisualInfo* Xw_get_overlay_visual_info() ;
805
806 XW_EXT_DISPLAY* Xw_get_display_structure() ;
807 XW_EXT_DISPLAY* Xw_add_display_structure() ;
808 XW_STATUS Xw_del_display_structure() ;
809
810 XW_EXT_WINDOW* Xw_get_window_structure() ;
811 XW_EXT_WINDOW* Xw_add_window_structure() ;
812 XW_STATUS Xw_del_window_structure() ;
813 XW_STATUS Xw_reset_attrib() ;
814
815 XW_STATUS Xw_redraw_buffer() ;
816 XW_STATUS Xw_update_buffer() ;
817 XW_EXT_BUFFER* Xw_get_buffer_structure() ;
818
819 XW_EXT_CHAR* Xw_add_text_desc_structure() ;
820 XW_STATUS Xw_del_text_desc_structure() ;
821
822 XW_EXT_POINT* Xw_add_line_desc_structure() ;
823 XW_STATUS Xw_del_line_desc_structure() ;
824
825 XW_EXT_POINT* Xw_add_point_structure() ;
826 XW_STATUS Xw_del_point_structure() ;
827 void Xw_draw_pixel_points() ;
828
829 XW_EXT_SEGMENT* Xw_add_segment_structure() ;
830 XW_STATUS Xw_del_segment_structure() ;
831 void Xw_draw_pixel_segments() ;
832
833 XW_EXT_LINE* Xw_add_polyline_structure() ;
834 XW_STATUS Xw_del_polyline_structure() ;
835 void Xw_draw_pixel_lines() ;
836
837 XW_EXT_ARC* Xw_add_arc_structure() ;
838 XW_STATUS Xw_del_arc_structure() ;
839 void Xw_draw_pixel_arcs() ;
840
841 XW_EXT_ARC* Xw_add_polyarc_structure() ;
842 XW_STATUS Xw_del_polyarc_structure() ;
843 void Xw_draw_pixel_polyarcs() ;
844
845 XW_EXT_POLY* Xw_add_polygone_structure() ;
846 XW_STATUS Xw_del_polygone_structure() ;
847 void Xw_draw_pixel_polys() ;
848
849 XW_EXT_LTEXT* Xw_add_text_structure() ;
850 XW_STATUS Xw_del_text_structure() ;
851 void Xw_draw_pixel_texts() ;
852
853 XW_EXT_PTEXT* Xw_add_polytext_structure() ;
854 XW_STATUS Xw_del_polytext_structure() ;
855 void Xw_draw_pixel_polytexts() ;
856
857 XW_STATUS Xw_isdefine_markerindex() ;
858 XW_EXT_LMARKER* Xw_add_lmarker_structure() ;
859 XW_STATUS Xw_del_lmarker_structure() ;
860 void Xw_draw_pixel_lmarkers() ;
861 XW_EXT_PMARKER* Xw_add_pmarker_structure() ;
862 XW_STATUS Xw_del_pmarker_structure() ;
863 void Xw_draw_pixel_pmarkers() ;
864
865 Colormap Xw_create_colormap() ;
866 XW_EXT_COLORMAP* Xw_add_colormap_structure() ;
867 XW_EXT_COLORMAP* Xw_get_colormap_structure() ;
868 XW_STATUS Xw_del_colormap_structure() ;
869 XW_STATUS Xw_get_color_attrib() ;
870 XW_STATUS Xw_isdefine_colorindex() ;
871 XW_STATUS Xw_ifsystem_colorindex() ;
872 XW_STATUS Xw_ifimage_colorindex() ;
873 XW_STATUS Xw_ifbackground_colorindex() ;
874 XW_STATUS Xw_ifhighlight_colorindex() ;
875 char* Xw_get_filename() ;
876
877 XW_EXT_WIDTHMAP* Xw_add_widthmap_structure() ;
878 XW_STATUS Xw_del_widthmap_structure() ;
879 XW_STATUS Xw_isdefine_widthindex() ;
880
881 XW_EXT_TYPEMAP* Xw_add_typemap_structure() ;
882 XW_STATUS Xw_del_typemap_structure() ;
883 XW_STATUS Xw_isdefine_typeindex() ;
884
885 XW_EXT_FONTMAP* Xw_add_fontmap_structure() ;
886 XW_STATUS Xw_del_fontmap_structure() ;
887 XW_STATUS Xw_isdefine_fontindex() ;
888
889 XW_EXT_TILEMAP* Xw_add_tilemap_structure() ;
890 XW_STATUS Xw_del_tilemap_structure() ;
891 XW_STATUS Xw_isdefine_tileindex() ;
892
893 XW_EXT_MARKMAP* Xw_add_markmap_structure() ;
894 XW_STATUS Xw_del_markmap_structure() ;
895
896 XW_EXT_IMAGEDATA* Xw_add_imagedata_structure() ;
897 XW_STATUS Xw_del_imagedata_structure() ;
898
899 XW_EXT_IMAGE* Xw_add_image_structure() ;
900 XW_STATUS Xw_del_image_structure() ;
901 void Xw_draw_pixel_images() ;
902
903 XW_STATUS Xw_set_internal_event() ;
904
905 XW_STATUS Xw_alloc_color();
906
907 int Xw_clip_segment();
908 int Xw_test() ;
909 int Xw_get_trace() ;
910 void Xw_set_error() ;
911 int Xw_error_handler() ;
912 void Xw_set_synchronize() ;
913 void Xw_longcopy() ;
914 void Xw_shortcopy() ;
915 void Xw_bytecopy() ;
916
917 #ifndef Xw_malloc
918 void* Xw_malloc() ;
919 #endif
920
921 #ifndef Xw_calloc
922 void* Xw_calloc() ;
923 #endif
924
925 #ifndef Xw_free
926 void Xw_free() ;
927 #endif
928
929 //OCC186
930 int PXPOINT();
931 int PYPOINT();
932 int PVALUE();
933 //OCC186
934
935 #endif /*XW_PROTOTYPE*/