Annotation of OpenXM_contrib/gnuplot/term/object.h, Revision 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>