00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef GVCJOB_H
00020 #define GVCJOB_H
00021
00022 #ifdef __cplusplus
00023 extern "C" {
00024 #endif
00025
00026 #include "gvcommon.h"
00027 #include "color.h"
00028
00029 #define ARRAY_SIZE(A) (sizeof(A)/sizeof(A[0]))
00030
00031 typedef struct gvdevice_engine_s gvdevice_engine_t;
00032 typedef struct gvformatter_engine_s gvformatter_engine_t;
00033 typedef struct gvrender_engine_s gvrender_engine_t;
00034 typedef struct gvlayout_engine_s gvlayout_engine_t;
00035 typedef struct gvtextlayout_engine_s gvtextlayout_engine_t;
00036 typedef struct gvloadimage_engine_s gvloadimage_engine_t;
00037
00038 typedef enum { PEN_NONE, PEN_DASHED, PEN_DOTTED, PEN_SOLID } pen_type;
00039 typedef enum { FILL_NONE, FILL_SOLID } fill_type;
00040 typedef enum { FONT_REGULAR, FONT_BOLD, FONT_ITALIC } font_type;
00041 #define PENWIDTH_NORMAL 1.
00042 #define PENWIDTH_BOLD 2.
00043 typedef enum { GVATTR_STRING, GVATTR_BOOL, GVATTR_COLOR } gvattr_t;
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085 #define EMIT_SORTED (1<<0)
00086 #define EMIT_COLORS (1<<1)
00087 #define EMIT_CLUSTERS_LAST (1<<2)
00088 #define EMIT_PREORDER (1<<3)
00089 #define EMIT_EDGE_SORTED (1<<4)
00090 #define GVDEVICE_DOES_PAGES (1<<5)
00091 #define GVDEVICE_DOES_LAYERS (1<<6)
00092 #define GVDEVICE_EVENTS (1<<7)
00093 #define GVDEVICE_DOES_TRUECOLOR (1<<8)
00094 #define GVDEVICE_BINARY_FORMAT (1<<9)
00095 #define GVDEVICE_COMPRESSED_FORMAT (1<<10)
00096 #define GVDEVICE_NO_WRITER (1<<11)
00097 #define GVRENDER_Y_GOES_DOWN (1<<12)
00098 #define GVRENDER_DOES_TRANSFORM (1<<13)
00099 #define GVRENDER_DOES_ARROWS (1<<14)
00100 #define GVRENDER_DOES_LABELS (1<<15)
00101 #define GVRENDER_DOES_MAPS (1<<16)
00102 #define GVRENDER_DOES_MAP_RECTANGLE (1<<17)
00103 #define GVRENDER_DOES_MAP_CIRCLE (1<<18)
00104 #define GVRENDER_DOES_MAP_POLYGON (1<<19)
00105 #define GVRENDER_DOES_MAP_ELLIPSE (1<<20)
00106 #define GVRENDER_DOES_MAP_BSPLINE (1<<21)
00107 #define GVRENDER_DOES_TOOLTIPS (1<<22)
00108 #define GVRENDER_DOES_TARGETS (1<<23)
00109 #define GVRENDER_DOES_Z (1<<24)
00110 #define GVRENDER_NO_BG (1<<25)
00111 #define LAYOUT_NOT_REQUIRED (1<<26)
00112 #define OUTPUT_NOT_REQUIRED (1<<27)
00113
00114 typedef struct {
00115 int flags;
00116 double default_pad;
00117 char **knowncolors;
00118 int sz_knowncolors;
00119 color_type_t color_type;
00120 } gvrender_features_t;
00121
00122 typedef struct {
00123 int flags;
00124 pointf default_margin;
00125 pointf default_pagesize;
00126 pointf default_dpi;
00127 } gvdevice_features_t;
00128
00129 #define LAYOUT_USES_RANKDIR (1<<0)
00130
00131 typedef struct gvplugin_active_device_s {
00132 gvdevice_engine_t *engine;
00133 int id;
00134 gvdevice_features_t *features;
00135 char *type;
00136 } gvplugin_active_device_t;
00137
00138 typedef struct gvplugin_active_render_s {
00139 gvrender_engine_t *engine;
00140 int id;
00141 gvrender_features_t *features;
00142 char *type;
00143 } gvplugin_active_render_t;
00144
00145 typedef struct gvplugin_active_loadimage_t {
00146 gvloadimage_engine_t *engine;
00147 int id;
00148 char *type;
00149 } gvplugin_active_loadimage_t;
00150
00151 typedef struct gv_argvlist_s {
00152 char **argv;
00153 int argc;
00154 int alloc;
00155 } gv_argvlist_t;
00156
00157 typedef struct gvdevice_callbacks_s {
00158 void (*refresh) (GVJ_t * job);
00159 void (*button_press) (GVJ_t * job, int button, pointf pointer);
00160 void (*button_release) (GVJ_t * job, int button, pointf pointer);
00161 void (*motion) (GVJ_t * job, pointf pointer);
00162 void (*modify) (GVJ_t * job, char *name, char *value);
00163 void (*del) (GVJ_t * job);
00164 void (*read) (GVJ_t * job, char *filename, char *layout);
00165 void (*layout) (GVJ_t * job, char *layout);
00166 void (*render) (GVJ_t * job, char *format, char *filename);
00167 } gvdevice_callbacks_t;
00168
00169 typedef int (*gvevent_key_callback_t) (GVJ_t * job);
00170
00171 typedef struct gvevent_key_binding_s {
00172 char *keystring;
00173 gvevent_key_callback_t callback;
00174 } gvevent_key_binding_t;
00175
00176 typedef enum {MAP_RECTANGLE, MAP_CIRCLE, MAP_POLYGON, } map_shape_t;
00177
00178 typedef enum {ROOTGRAPH_OBJTYPE, CLUSTER_OBJTYPE, NODE_OBJTYPE, EDGE_OBJTYPE} obj_type;
00179
00180
00181 typedef enum {
00182 EMIT_GDRAW, EMIT_CDRAW, EMIT_TDRAW, EMIT_HDRAW,
00183 EMIT_GLABEL, EMIT_CLABEL, EMIT_TLABEL, EMIT_HLABEL,
00184 EMIT_NDRAW, EMIT_EDRAW, EMIT_NLABEL, EMIT_ELABEL,
00185 } emit_state_t;
00186
00187 typedef struct obj_state_s obj_state_t;
00188
00189 struct obj_state_s {
00190 obj_state_t *parent;
00191
00192 obj_type type;
00193 union {
00194 graph_t *g;
00195 graph_t *sg;
00196 node_t *n;
00197 edge_t *e;
00198 } u;
00199
00200 emit_state_t emit_state;
00201
00202 gvcolor_t pencolor, fillcolor;
00203 pen_type pen;
00204 fill_type fill;
00205 double penwidth;
00206 char **rawstyle;
00207
00208 double z, tail_z, head_z;
00209
00210
00211 char *label;
00212 char *taillabel;
00213 char *headlabel;
00214
00215 char *url;
00216 char *labelurl;
00217 char *tailurl;
00218 char *headurl;
00219
00220 char *tooltip;
00221 char *labeltooltip;
00222 char *tailtooltip;
00223 char *headtooltip;
00224
00225 char *target;
00226 char *labeltarget;
00227 char *tailtarget;
00228 char *headtarget;
00229
00230 int explicit_tooltip:1;
00231 int explicit_tailtooltip:1;
00232 int explicit_headtooltip:1;
00233 int explicit_labeltooltip:1;
00234 int explicit_tailtarget:1;
00235 int explicit_headtarget:1;
00236 int explicit_edgetarget:1;
00237 int explicit_tailurl:1;
00238 int explicit_headurl:1;
00239
00240
00241 map_shape_t url_map_shape;
00242 int url_map_n;
00243 pointf *url_map_p;
00244
00245
00246 int url_bsplinemap_poly_n;
00247
00248 int *url_bsplinemap_n;
00249
00250 pointf *url_bsplinemap_p;
00251
00252 int tailendurl_map_n;
00253 pointf *tailendurl_map_p;
00254
00255 int headendurl_map_n;
00256 pointf *headendurl_map_p;
00257 };
00258
00259
00260
00261
00262
00263
00264
00265 struct GVJ_s {
00266 GVC_t *gvc;
00267 GVJ_t *next;
00268 GVJ_t *next_active;
00269
00270 GVCOMMON_t *common;
00271
00272 obj_state_t *obj;
00273
00274 char *input_filename;
00275 int graph_index;
00276
00277 char *layout_type;
00278
00279 char *output_filename;
00280 FILE *output_file;
00281 char *output_data;
00282 unsigned int output_data_allocated;
00283 unsigned int output_data_position;
00284
00285 char *output_langname;
00286 int output_lang;
00287
00288 gvplugin_active_render_t render;
00289 gvplugin_active_device_t device;
00290 gvplugin_active_loadimage_t loadimage;
00291 gvdevice_callbacks_t *callbacks;
00292 pointf device_dpi;
00293 boolean device_sets_dpi;
00294
00295 void *display;
00296 int screen;
00297
00298 void *context;
00299 boolean external_context;
00300 unsigned char *imagedata;
00301
00302 int flags;
00303
00304 int numLayers;
00305 int layerNum;
00306
00307 point pagesArraySize;
00308 point pagesArrayFirst;
00309 point pagesArrayMajor;
00310 point pagesArrayMinor;
00311 point pagesArrayElem;
00312 int numPages;
00313
00314 boxf bb;
00315 pointf pad;
00316 boxf clip;
00317 boxf pageBox;
00318 pointf pageOffset;
00319 pointf pageSize;
00320 pointf focus;
00321
00322 double zoom;
00323 int rotation;
00324
00325 pointf view;
00326 boxf canvasBox;
00327 pointf margin;
00328
00329 pointf dpi;
00330
00331 unsigned int width;
00332 unsigned int height;
00333 box pageBoundingBox;
00334 box boundingBox;
00335
00336 pointf scale;
00337 pointf translation;
00338 pointf devscale;
00339
00340 boolean fit_mode,
00341 needs_refresh,
00342 click,
00343 has_grown,
00344 has_been_rendered;
00345
00346 unsigned char button;
00347 pointf pointer;
00348 pointf oldpointer;
00349
00350 void *current_obj;
00351
00352 void *selected_obj;
00353
00354 char *active_tooltip;
00355 char *selected_href;
00356 gv_argvlist_t selected_obj_type_name;
00357 gv_argvlist_t selected_obj_attributes;
00358
00359
00360
00361 void *window;
00362
00363
00364 gvevent_key_binding_t *keybindings;
00365 int numkeys;
00366 void *keycodes;
00367
00368
00369 #ifdef WITH_CODEGENS
00370 codegen_t *codegen;
00371 #endif
00372 };
00373
00374 #ifdef __cplusplus
00375 }
00376 #endif
00377 #endif