Annotation of OpenXM_contrib/gnuplot/term/object.h, Revision 1.1.1.1
1.1 maekawa 1: /*
2: * FIG : Facility for Interactive Generation of figures
3: * Copyright (c) 1985 by Supoj Sutanthavibul
4: * Parts Copyright (c) 1994 by Brian V. Smith
5: * Parts Copyright (c) 1991 by Paul King
6: *
7: * The X Consortium, and any party obtaining a copy of these files from
8: * the X Consortium, directly or indirectly, is granted, free of charge, a
9: * full and unrestricted irrevocable, world-wide, paid up, royalty-free,
10: * nonexclusive right and license to deal in this software and
11: * documentation files (the "Software"), including without limitation the
12: * rights to use, copy, modify, merge, publish, distribute, sublicense,
13: * and/or sell copies of the Software, and to permit persons who receive
14: * copies from any such party to do so, with the only requirement being
15: * that this copyright notice remain intact. This license includes without
16: * limitation a license to do the foregoing actions under any patents of
17: * the party supplying this software to the X Consortium.
18: */
19:
20: /* This file has been modified for use with Gnuplot 3.6 by
21: * Ian MacPhedran.
22: */
23:
24: /* DEFAULT is used for many things - font, color etc */
25:
26: #define DEFAULT (-1)
27: #define SOLID_LINE 0
28: #define DASH_LINE 1
29: #define DOTTED_LINE 2
30: #define RUBBER_LINE 3
31: #define PANEL_LINE 4
32:
33: #define Color int
34:
35: #define BLACK 0
36: #define BLUE 1
37: #define GREEN 2
38: #define CYAN 3
39: #define RED 4
40: #define MAGENTA 5
41: #define YELLOW 6
42: #define WHITE 7
43:
44: /** VERY IMPORTANT: The f_line, f_spline and f_arc objects all must have the
45: components up to and including the arrows in the same order.
46: This is for the get/put_generic_arrows() in e_edit.c.
47: **/
48:
49: typedef struct f_point {
50: int x, y;
51: }
52: F_point;
53:
54: typedef struct f_pos {
55: int x, y;
56: }
57: F_pos;
58:
59: #define DEF_ARROW_WID (4 * ZOOM_FACTOR)
60: #define DEF_ARROW_HT (8 * ZOOM_FACTOR)
61:
62: typedef struct f_arrow {
63: int type;
64: int style;
65: float thickness;
66: float wid;
67: float ht;
68: }
69: F_arrow;
70:
71: typedef struct f_ellipse {
72: int tagged;
73: int distrib;
74: int type;
75: #define T_ELLIPSE_BY_RAD 1
76: #define T_ELLIPSE_BY_DIA 2
77: #define T_CIRCLE_BY_RAD 3
78: #define T_CIRCLE_BY_DIA 4
79: int style;
80: int thickness;
81: Color pen_color;
82: Color fill_color;
83: int fill_style;
84: int depth;
85: float style_val;
86: int pen_style;
87: float angle;
88: int direction;
89: #define UNFILLED -1
90: struct f_pos center;
91: struct f_pos radiuses;
92: struct f_pos start;
93: struct f_pos end;
94: struct f_ellipse *next;
95: }
96: F_ellipse;
97:
98: /* SEE NOTE AT TOP BEFORE CHANGING ANYTHING IN THE f_arc STRUCTURE */
99:
100: typedef struct f_arc {
101: int tagged;
102: int distrib;
103: int type;
104: /* note: these arc types are the internal values */
105: /* in the file, they are open=1, wedge=2 */
106: #define T_OPEN_ARC 0
107: #define T_PIE_WEDGE_ARC 1
108: int style;
109: int thickness;
110: Color pen_color;
111: Color fill_color;
112: int fill_style;
113: int depth;
114: int pen_style;
115: struct f_arrow *for_arrow;
116: struct f_arrow *back_arrow;
117: /* THE PRECEDING VARS MUST BE IN THE SAME ORDER IN f_arc, f_line and f_spline */
118: int cap_style;
119: float style_val;
120: int direction;
121: struct {
122: float x, y;
123: } center;
124: struct f_pos point[3];
125: struct f_arc *next;
126: }
127: F_arc;
128:
129: #define CLOSED_PATH 0
130: #define OPEN_PATH 1
131: #define DEF_BOXRADIUS 7
132: #define DEF_DASHLENGTH 4
133: #define DEF_DOTGAP 3
134:
135: typedef struct f_pic {
136: #ifndef PATH_MAX
137: #define PATH_MAX 128
138: #endif
139: char file[PATH_MAX];
140: int subtype;
141: #define T_PIC_EPS 1
142: #define T_PIC_BITMAP 2
143: #define T_PIC_PIXMAP 3
144: #define T_PIC_GIF 4
145: #define FileInvalid -2
146: int flipped;
147: unsigned char *bitmap;
148: int numcols; /* number of colors in cmap */
149: float hw_ratio;
150: int size_x, size_y; /* fig units */
151: struct f_pos bit_size; /* pixels */
152: Color color; /* only used for XBM */
153: int pix_rotation, pix_width, pix_height, pix_flipped;
154: }
155: F_pic;
156:
157: extern char EMPTY_PIC[];
158:
159: /* SEE NOTE AT TOP BEFORE CHANGING ANYTHING IN THE f_line STRUCTURE */
160:
161: typedef struct f_line {
162: int tagged;
163: int distrib;
164: int type;
165: #define T_POLYLINE 1
166: #define T_BOX 2
167: #define T_POLYGON 3
168: #define T_ARC_BOX 4
169: #define T_PIC_BOX 5
170: int style;
171: int thickness;
172: Color pen_color;
173: Color fill_color;
174: int fill_style;
175: int depth;
176: int pen_style;
177: struct f_arrow *for_arrow;
178: struct f_arrow *back_arrow;
179: /* THE PRECEDING VARS MUST BE IN THE SAME ORDER IN f_arc, f_line and f_spline */
180: int cap_style; /* line cap style - Butt, Round, Bevel */
181: #define CAP_BUTT 0
182: #define CAP_ROUND 1
183: #define CAP_PROJECT 2
184: struct f_point *points; /* this must immediately follow cap_style */
185: int join_style; /* join style - Miter, Round, Bevel */
186: #define JOIN_MITER 0
187: #define JOIN_ROUND 1
188: #define JOIN_BEVEL 2
189: float style_val;
190: int radius; /* corner radius for T_ARC_BOX */
191: struct f_pic *pic;
192: struct f_line *next;
193: }
194: F_line;
195:
196: typedef struct f_text {
197: int tagged;
198: int distrib;
199: int type;
200: #define T_LEFT_JUSTIFIED 0
201: #define T_CENTER_JUSTIFIED 1
202: #define T_RIGHT_JUSTIFIED 2
203: int font;
204: /* PIX_FONT fontstruct; */
205: int size; /* point size */
206: Color color;
207: int depth;
208: float angle; /* in radians */
209:
210: int flags;
211: #define RIGID_TEXT 1
212: #define SPECIAL_TEXT 2
213: #define PSFONT_TEXT 4
214: #define HIDDEN_TEXT 8
215:
216: int ascent; /* Fig units */
217: int length; /* Fig units */
218: int descent; /* from XTextExtents(), not in file */
219: int base_x;
220: int base_y;
221: int pen_style;
222: char *cstring;
223: struct f_text *next;
224: }
225: F_text;
226:
227: #define MAXFONT(T) (psfont_text(T) ? NUM_FONTS : NUM_LATEX_FONTS)
228:
229: #define rigid_text(t) \
230: (t->flags == DEFAULT \
231: || (t->flags & RIGID_TEXT))
232:
233: #define special_text(t) \
234: ((t->flags != DEFAULT \
235: && (t->flags & SPECIAL_TEXT)))
236:
237: #define psfont_text(t) \
238: (t->flags != DEFAULT \
239: && (t->flags & PSFONT_TEXT))
240:
241: #define hidden_text(t) \
242: (t->flags != DEFAULT \
243: && (t->flags & HIDDEN_TEXT))
244:
245: #define text_length(t) \
246: (hidden_text(t) ? hidden_text_length : t->length)
247:
248: #define using_ps (cur_textflags & PSFONT_TEXT)
249:
250: typedef struct f_control {
251: float lx, ly, rx, ry;
252: struct f_control *next;
253: }
254: F_control;
255:
256: /* SEE NOTE AT TOP BEFORE CHANGING ANYTHING IN THE f_spline STRUCTURE */
257:
258: #define int_spline(s) (s->type & 0x2)
259: #define normal_spline(s) (!(s->type & 0x2))
260: #define closed_spline(s) (s->type & 0x1)
261: #define open_spline(s) (!(s->type & 0x1))
262:
263: typedef struct f_spline {
264: int tagged;
265: int distrib;
266: int type;
267: #define T_OPEN_NORMAL 0
268: #define T_CLOSED_NORMAL 1
269: #define T_OPEN_INTERP 2
270: #define T_CLOSED_INTERP 3
271: int style;
272: int thickness;
273: Color pen_color;
274: Color fill_color;
275: int fill_style;
276: int depth;
277: int pen_style;
278: struct f_arrow *for_arrow;
279: struct f_arrow *back_arrow;
280: /* THE PRECEDING VARS MUST BE IN THE SAME ORDER IN f_arc, f_line and f_spline */
281: int cap_style;
282: /*
283: * For T_OPEN_NORMAL and T_CLOSED_NORMAL points are control points while
284: * they are knots for T_OPEN_INTERP and T_CLOSED_INTERP whose control
285: * points are stored in controls.
286: */
287: struct f_point *points; /* this must immediately follow cap_style */
288: float style_val;
289: struct f_control *controls;
290: struct f_spline *next;
291: }
292: F_spline;
293:
294: typedef struct f_compound {
295: int tagged;
296: int distrib;
297: struct f_pos nwcorner;
298: struct f_pos secorner;
299: struct f_line *lines;
300: struct f_ellipse *ellipses;
301: struct f_spline *splines;
302: struct f_text *texts;
303: struct f_arc *arcs;
304: struct f_compound *compounds;
305: struct f_compound *next;
306: }
307: F_compound;
308:
309: typedef struct f_linkinfo {
310: struct f_line *line;
311: struct f_point *endpt;
312: struct f_point *prevpt;
313: int two_pts;
314: struct f_linkinfo *next;
315: }
316: F_linkinfo;
317:
318: /* separate the "type" and the "style" from the cur_arrowtype */
319: #define ARROW_TYPE(x) ((x)==0? 0 : ((x)+1)/2)
320: #define ARROW_STYLE(x) ((x)==0? 0 : ((x)+1)%2)
321:
322: #define ARROW_SIZE sizeof(struct f_arrow)
323: #define POINT_SIZE sizeof(struct f_point)
324: #define CONTROL_SIZE sizeof(struct f_control)
325: #define ELLOBJ_SIZE sizeof(struct f_ellipse)
326: #define ARCOBJ_SIZE sizeof(struct f_arc)
327: #define LINOBJ_SIZE sizeof(struct f_line)
328: #define TEXOBJ_SIZE sizeof(struct f_text)
329: #define SPLOBJ_SIZE sizeof(struct f_spline)
330: #define COMOBJ_SIZE sizeof(struct f_compound)
331: #define PIC_SIZE sizeof(struct f_pic)
332: #define LINKINFO_SIZE sizeof(struct f_linkinfo)
333:
334: /********************** object codes **********************/
335:
336: #define O_COLOR_DEF 0
337: #define O_ELLIPSE 1
338: #define O_POLYLINE 2
339: #define O_SPLINE 3
340: #define O_TEXT 4
341: #define O_ARC 5
342: #define O_COMPOUND 6
343: #define O_END_COMPOUND -O_COMPOUND
344: #define O_ALL_OBJECT 99
345:
346: /********************* object masks for update ************************/
347:
348: #define M_NONE 0x000
349: #define M_POLYLINE_POLYGON 0x001
350: #define M_POLYLINE_LINE 0x002
351: #define M_POLYLINE_BOX 0x004 /* includes ARCBOX */
352: #define M_SPLINE_O_NORMAL 0x008
353: #define M_SPLINE_C_NORMAL 0x010
354: #define M_SPLINE_O_INTERP 0x020
355: #define M_SPLINE_C_INTERP 0x040
356: #define M_TEXT_NORMAL 0x080
357: #define M_TEXT_HIDDEN 0x100
358: #define M_ARC 0x200
359: #define M_ELLIPSE 0x400
360: #define M_COMPOUND 0x800
361:
362: #define M_TEXT (M_TEXT_HIDDEN | M_TEXT_NORMAL)
363: #define M_SPLINE_O (M_SPLINE_O_NORMAL | M_SPLINE_O_INTERP)
364: #define M_SPLINE_C (M_SPLINE_C_NORMAL | M_SPLINE_C_INTERP)
365: #define M_SPLINE_NORMAL (M_SPLINE_O_NORMAL | M_SPLINE_C_NORMAL)
366: #define M_SPLINE_INTERP (M_SPLINE_O_INTERP | M_SPLINE_C_INTERP)
367: #define M_SPLINE (M_SPLINE_NORMAL | M_SPLINE_INTERP)
368: #define M_POLYLINE (M_POLYLINE_LINE | M_POLYLINE_POLYGON | M_POLYLINE_BOX)
369: #define M_VARPTS_OBJECT (M_POLYLINE_LINE | M_POLYLINE_POLYGON | M_SPLINE)
370: #define M_OPEN_OBJECT (M_POLYLINE_LINE | M_SPLINE_O | M_ARC)
371: #define M_ROTATE_ANGLE (M_VARPTS_OBJECT | M_ARC | M_TEXT | M_COMPOUND | M_ELLIPSE)
372: #define M_ELLTEXTANGLE (M_ELLIPSE | M_TEXT)
373: #define M_OBJECT (M_ELLIPSE | M_POLYLINE | M_SPLINE | M_TEXT | M_ARC)
374: #define M_NO_TEXT (M_ELLIPSE | M_POLYLINE | M_SPLINE | M_COMPOUND | M_ARC)
375: #define M_ALL (M_OBJECT | M_COMPOUND)
376:
377: /************************ Objects **********************/
378:
379: extern F_compound objects;
380:
381: /************ global working pointers ************/
382:
383: extern F_line *cur_l, *new_l, *old_l;
384: extern F_arc *cur_a, *new_a, *old_a;
385: extern F_ellipse *cur_e, *new_e, *old_e;
386: extern F_text *cur_t, *new_t, *old_t;
387: extern F_spline *cur_s, *new_s, *old_s;
388: extern F_compound *cur_c, *new_c, *old_c;
389: extern F_point *first_point, *cur_point;
390: extern F_linkinfo *cur_links;
391:
392: /*************** object attribute settings ***********/
393:
394: /* Lines */
395: extern int cur_linewidth;
396: extern int cur_linestyle;
397: extern int cur_joinstyle;
398: extern int cur_capstyle;
399: extern float cur_dashlength;
400: extern float cur_dotgap;
401: extern float cur_styleval;
402: extern Color cur_fillcolor, cur_pencolor;
403: extern int cur_fillstyle, cur_penstyle;
404: extern int cur_boxradius;
405: extern int cur_arrowmode;
406: extern int cur_arrowtype;
407: extern int cur_arctype;
408:
409: /* Text */
410: extern int cur_fontsize; /* font size */
411: extern int cur_latex_font;
412: extern int cur_ps_font;
413: extern int cur_textjust;
414: extern int cur_textflags;
415:
416: /* Misc */
417: extern float cur_elltextangle;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>