aboutsummaryrefslogtreecommitdiff
path: root/generic/tkZinc.h
blob: ba2d236b333e53e23d5db410490f1980e38a7921 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/*
 * tkZinc.h -- Header file for Tk zinc widget.
 *
 * Authors              : Patrick Lecoanet.
 * Creation date        : Mon Mar 15 14:02:03 1999
 *
 * $Id: tkZinc.h 1820 2006-10-17 12:10:05Z lecoanet $
 */

/*
 *  Copyright (c) 1993 - 2005 CENA, Patrick Lecoanet --
 *
 * See the file "Copyright" for information on usage and redistribution
 * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
 *
 */


#ifndef _tkZinc_h
#define _tkZinc_h

#include "WidgetInfo.h"
#include "Item.h"
#include "List.h"
#include "MapInfo.h"

#if defined(MAC_OSX_TK)
  #include <AGL/glu.h>
#else
  #include <GL/glu.h>
#endif

typedef struct _ZnTagSearch {
  ZnWInfo       *wi;
  ZnItem        current;        /* Pointer to last item returned. */
  ZnItem        previous;       /* The item right before the current
                                 * is tracked so if the current is
                                 * deleted we don't have to start from the
                                 * beginning. */
  ZnBool        over;           /* Non-zero means NextItem should always
                                 * return NULL. */
  int           type;           /* search type */
  unsigned int  id;             /* item id for searches by id */

  Tk_Uid        tag;            /* tag expression string */
  int           tag_index;      /* current position in string scan */
  int           tag_len;        /* length of tag expression string */

  char          *rewrite_buf;   /* tag string (after removing escapes) */
  unsigned int  rewrite_buf_alloc;      /* available space for rewrites */

  struct _TagSearchExpr *expr;  /* compiled tag expression */
  ZnItem        group;
  ZnBool        recursive;
  ZnList        item_stack;
} ZnTagSearch;

/*
 * Structure used by the tesselator.
 */
typedef struct _ZnCombineData {
  ZnReal                v[2];
  struct _ZnCombineData *next;
} ZnCombineData;

typedef struct _ZnTess {
  GLUtesselator *tess;
  ZnCombineData *combine_list;
  int           type;
        int   combine_length;
} ZnTess;

extern ZnList      ZnWorkPoints;
extern ZnList      ZnWorkXPoints;
extern ZnList      ZnWorkStrings;
extern ZnTess      ZnTesselator;

#ifdef GL
typedef struct _ZnGLContextEntry {
  ZnGLContext   context;
  Display       *dpy;
  ZnReal        max_line_width;
  ZnReal        max_point_width;
  unsigned int  max_tex_size;
  ZnList        widgets;
#ifdef _WIN32
  PIXELFORMATDESCRIPTOR pfd;
  int           ipixel;
  HWND          hwnd;   /* Temporary storage between MakeCurrent and Release */
  HDC           hdc;
#elif defined(__APPLE__)
  AGLPixelFormat pix_fmt;
  GWorldPtr     gworld;
  Tk_Window     top_win;
#else
  XVisualInfo   *visual; /* Should these two be managed by screen ? */
  Colormap      colormap;
#endif
  struct _ZnGLContextEntry *next;
} ZnGLContextEntry;

ZnGLContextEntry *ZnGetGLContext(Display *dpy);
ZnGLContextEntry *ZnGLMakeCurrent(Display *dpy, ZnWInfo *wi);
void ZnGLReleaseContext(ZnGLContextEntry *ce);
#endif

int ZnParseCoordList(ZnWInfo *wi, Tcl_Obj *arg, ZnPoint **pts,
                     char **controls, unsigned int *num_pts, ZnBool *old_format);
int ZnItemWithTagOrId(ZnWInfo *wi, Tcl_Obj *tag_or_id,
                      ZnItem *item, ZnTagSearch **search_var);
void ZnTagSearchDestroy(ZnTagSearch *search);
void ZnDoItem(Tcl_Interp *interp, ZnItem item, int part, Tk_Uid tag_uid);
void ZnNeedRedisplay(ZnWInfo *wi);
void ZnDamage(ZnWInfo *wi, ZnBBox *damage);
void ZnDamageAll(ZnWInfo *wi);


#endif /* _tkZinc_h */