From 7a15e01cace5d0078b3a3330ab368d0a9bb1956d Mon Sep 17 00:00:00 2001 From: ellson Date: Sun, 30 Jan 2005 00:33:46 +0000 Subject: [PATCH] more churn in emit.c and friends... --- lib/common/emit.c | 288 +++++++++++++++++++++++++-------------- lib/common/output.c | 100 +------------- lib/common/renderprocs.h | 2 +- lib/gvc/gvc.h | 7 +- lib/gvc/gvemit.c | 15 +- lib/gvc/gvevent.c | 2 +- lib/gvc/gvrender.c | 25 +--- 7 files changed, 202 insertions(+), 237 deletions(-) diff --git a/lib/common/emit.c b/lib/common/emit.c index 3e5f3eb59..cc1d4b046 100644 --- a/lib/common/emit.c +++ b/lib/common/emit.c @@ -31,8 +31,6 @@ #define MAX_CODEGENS 100 -#define PAGINATIONBUG 1 - char *BaseLineStyle[3] = { "solid\0", "setlinewidth\0001\0", 0 }; int Obj; static double Deffontsize; @@ -96,6 +94,60 @@ static int parse_layers(GVC_t *gvc, graph_t * g, char *p) return ntok; } +/* chkOrder: + * Determine order of output. + * Output usually in breadth first graph walk order + */ +static int chkOrder(graph_t * g) +{ + char *p = agget(g, "outputorder"); + if (p) { + char c = *p; + if ((c == 'n') && !strcmp(p + 1, "odesfirst")) + return EMIT_SORTED; + if ((c == 'e') && !strcmp(p + 1, "dgesfirst")) + return EMIT_EDGE_SORTED; + } + return 0; +} + +static void init_job_flags(gvrender_job_t * job, graph_t * g) +{ + switch (job->output_lang) { + case GVRENDER_PLUGIN: + job->flags = chkOrder(g) | job->render_features->flags; + break; + case POSTSCRIPT: + job->flags = chkOrder(g) | GVRENDER_DOES_MULTIGRAPH_OUTPUT_FILES; + break; + case ISMAP: case IMAP: case CMAP: case CMAPX: + /* output in breadth first graph walk order, but + * with nodes edges and nested clusters before + * clusters */ + job->flags = EMIT_CLUSTERS_LAST; + break; + case FIG: + /* output color definition objects first */ + job->flags = EMIT_COLORS; + break; + case VTX: + /* output sorted, i.e. all nodes then all edges */ + job->flags = EMIT_SORTED; + break; + case DIA: + /* output in preorder traversal of the graph */ + job->flags = EMIT_PREORDER; + break; + case EXTENDED_DOT: case ATTRIBUTED_DOT: case CANONICAL_DOT: + case PLAIN: case PLAIN_EXT: + job->flags = 0; + break; + default: + job->flags = chkOrder(g); + break; + } +} + static void init_layering(GVC_t * gvc, graph_t * g) { char *str; @@ -211,12 +263,9 @@ static void init_job_pagination(GVC_t * gvc, graph_t * g) job->numPages = job->pagesArraySize.x * job->pagesArraySize.y; /* find the drawable size in device coords */ -#ifdef PAGINATIONBUG - tp = GD_drawing(g)->size; -#else tp.x = job->width; tp.y = job->height; -#endif + if (GD_drawing(g)->landscape) tp = exch_xy(tp); DS.x = MIN(tp.x, PFCLM.x); @@ -230,12 +279,8 @@ static void init_job_pagination(GVC_t * gvc, graph_t * g) job->pageSizeCentered.y = DEFAULT_PAGEHT; PFCLM.x = job->pageSizeCentered.x - 2 * job->pageBox.LL.x; PFCLM.y = job->pageSizeCentered.y - 2 * job->pageBox.LL.y; -#ifdef PAGINATIONBUG - P2PF(GD_drawing(g)->size, DS); -#else DS.x = job->width; DS.y = job->height; -#endif if (GD_drawing(g)->landscape) DS = exch_xyf(DS); job->pagesArraySize.x = job->pagesArraySize.y = job->numPages = 1; @@ -253,7 +298,10 @@ static void init_job_pagination(GVC_t * gvc, graph_t * g) job->pageBox.LL.x += extra.x / 2; job->pageBox.LL.y += extra.y / 2; } - job->pageBox.UR = add_pointfs(job->pageBox.LL, DS); + /* FIXME - this is used by begin_graph, but overwritten by setup_page + so it will be wrong if two PS outputs generated from same graph. + Perhaps it should be "pageBoundingBox" or somesuch ? */ + job->pageBox.UR = add_pointfs(job->pageBox.LL, job->pageSize); } static void firstpage(GVC_t *gvc) @@ -330,19 +378,24 @@ void emit_reset(GVC_t * gvc, graph_t * g) static void emit_background(GVC_t * gvc, graph_t *g, boxf pageBox) { + gvrender_job_t * job = gvc->job; char *str; + pointf AF[4]; point A[4]; - box PB; + int i; if (((str = agget(g, "bgcolor")) != 0) - && str[0] - && strcmp(str, "white") != 0 && strcmp(str, "transparent") != 0) { + && str[0] + && strcmp(str, "white") != 0 + && strcmp(str, "transparent") != 0) { /* increment to cover int rounding errors */ - BF2B(pageBox, PB); - A[0].x = A[1].x = PB.LL.x - GD_drawing(g)->margin.x - 1; - A[2].x = A[3].x = PB.UR.x + GD_drawing(g)->margin.x + 1; - A[1].y = A[2].y = PB.UR.y + GD_drawing(g)->margin.y + 1; - A[3].y = A[0].y = PB.LL.y - GD_drawing(g)->margin.y - 1; + AF[0].x = AF[1].x = job->pageBox.LL.x - job->margin.x - 1; + AF[2].x = AF[3].x = job->pageBox.UR.x + job->margin.x + 1; + AF[1].y = AF[2].y = job->pageBox.UR.y + job->margin.y + 1; + AF[3].y = AF[0].y = job->pageBox.LL.y - job->margin.y - 1; + for (i = 0; i < 4; i++) { + PF2P(AF[i],A[i]); + } gvrender_set_fillcolor(gvc, str); gvrender_set_pencolor(gvc, str); gvrender_polygon(gvc, A, 4, TRUE); /* filled */ @@ -375,7 +428,7 @@ static void setup_page(GVC_t * gvc, graph_t * g) job->offset.y = -(job->pagesArrayElem.x) * job->pageSize.x; } - gvrender_begin_page(gvc, g); + gvrender_begin_page(gvc); emit_background(gvc, g, job->pageBox); emit_defaults(gvc); } @@ -847,93 +900,149 @@ static void emit_edge(GVC_t * gvc, edge_t * e) gvrender_end_edge(gvc); } -#ifdef PAGINATIONBUG -static double setScale(graph_t * g) +static void init_job_margin(GVC_t *gvc) { - double xscale, yscale, scale; - - xscale = ((double) GD_drawing(g)->size.x) / GD_bb(g).UR.x; - yscale = ((double) GD_drawing(g)->size.y) / GD_bb(g).UR.y; - scale = MIN(xscale, yscale); - GD_drawing(g)->scale = scale; - GD_drawing(g)->size.x = scale * GD_bb(g).UR.x; - GD_drawing(g)->size.y = scale * GD_bb(g).UR.y; - return scale; + gvrender_job_t *job = gvc->job; + + if (gvc->graph_sets_margin) { + job->margin = gvc->margin; + } + else { + /* set default margins depending on format */ + switch (job->output_lang) { + case GVRENDER_PLUGIN: + job->margin.x = job->margin.y = job->render_features->default_margin; + break; + case POSTSCRIPT: case PDF: case HPGL: case PCL: case MIF: + case METAPOST: case FIG: case VTX: case ATTRIBUTED_DOT: + case PLAIN: case PLAIN_EXT: case QPDF: + job->margin.x = job->margin.y = DEFAULT_MARGIN; + break; + case CANONICAL_DOT: + job->margin.x = job->margin.y = 0; + break; + default: + job->margin.x = job->margin.y = DEFAULT_EMBED_MARGIN; + break; + } + } } -#endif - -/* emit_init - * - called just once per output device - * (where emit_graph can be called many times for refresh callbacks) - */ -void emit_init(GVC_t * gvc, graph_t * g) +static void init_job_viewport(GVC_t * gvc, graph_t * g) { + gvrender_job_t * job = gvc->job; + pointf UR, size; char *str; double X, Y, Z, x, y; - point size = GD_drawing(g)->size; - point UR = GD_bb(g).UR; -#ifdef PAGINATIONBUG - double scale; -#endif + int dpi; assert((GD_bb(g).LL.x == 0) && (GD_bb(g).LL.y == 0)); + P2PF(GD_bb(g).UR, UR); + /* determine final drawing size and scale to apply. */ /* N.B. size given by user is not rotated by landscape mode */ /* start with "natural" size of layout */ -#ifdef PAGINATIONBUG - /* FIXME - this version still needed by psgen.c*/ - scale = GD_drawing(g)->scale = 1.0; - if (GD_drawing(g)->size.x > 0) { /* was given by user... */ - if ((GD_drawing(g)->size.x < GD_bb(g).UR.x) /* drawing is too big... */ - ||(GD_drawing(g)->size.y < GD_bb(g).UR.y)) { - scale = setScale(g); - } - else if (GD_drawing(g)->filled) { - if ((GD_drawing(g)->size.x > GD_bb(g).UR.x) /* drawing is too small... */ - &&(GD_drawing(g)->size.y > GD_bb(g).UR.y)) { - scale = setScale(g); - } - } - else { - GD_drawing(g)->size = GD_bb(g).UR; - } - } - else { - GD_drawing(g)->size = GD_bb(g).UR; - } -#endif Z = 1.0; - if (size.x > 0) { /* was given by user... */ + if (GD_drawing(g)->size.x > 0) { /* was given by user... */ + P2PF(GD_drawing(g)->size, size); if ((size.x < UR.x) || (size.y < UR.y) /* drawing is too big... */ || ((GD_drawing(g)->filled) /* or ratio=filled requested and ... */ && (size.x > UR.x) && (size.y > UR.y))) /* drawing is too small... */ - Z = MIN(((double)size.x)/UR.x, ((double)size.y)/UR.y); + Z = MIN(size.x/UR.x, size.y/UR.y); } - X = Z * (double)(GD_bb(g).UR.x + 2 * GD_drawing(g)->margin.x + 2); - Y = Z * (double)(GD_bb(g).UR.y + 2 * GD_drawing(g)->margin.y + 2); - x = (double)(GD_bb(g).UR.x) / 2.; - y = (double)(GD_bb(g).UR.y) / 2.; + X = Z * (UR.x + 2 * job->margin.x + 2); + Y = Z * (UR.y + 2 * job->margin.y + 2); + x = UR.x / 2.; + y = UR.y / 2.; if ((str = agget(g, "viewport"))) sscanf(str, "%lf,%lf,%lf,%lf,%lf", &X, &Y, &Z, &x, &y); + dpi = GD_drawing(g)->dpi; + if (dpi == 0) { + if (job->render_engine) + dpi = job->render_features->default_dpi; + else + dpi = DEFAULT_DPI; + } + job->dpi = dpi; + job->width = ROUND(X * dpi / POINTS_PER_INCH); + job->height = ROUND(Y * dpi / POINTS_PER_INCH); + job->zoom = Z; /* scaling factor */ + job->focus.x = x; /* graph coord of focus - points */ + job->focus.y = y; + job->rotation = gvc->rotation; +} + +static void init_gvc_from_graph(GVC_t * gvc, graph_t * g) +{ + double xf, yf; + char *p; + int i; + + /* margins */ + gvc->graph_sets_margin = FALSE; + if ((p = agget(g, "margin"))) { + i = sscanf(p, "%lf,%lf", &xf, &yf); + if (i > 0) { + gvc->margin.x = gvc->margin.y = xf * POINTS_PER_INCH; + if (i > 1) + gvc->margin.y = yf * POINTS_PER_INCH; + gvc->graph_sets_margin = TRUE; + } + } + + /* pagesize */ + gvc->graph_sets_pageSize = FALSE; + P2PF(GD_drawing(g)->page, gvc->pageSize); + if ((GD_drawing(g)->page.x > 0) && (GD_drawing(g)->page.y > 0)) { + gvc->graph_sets_pageSize = TRUE; + } + + /* bounding box */ + B2BF(GD_bb(g),gvc->bb); + + /* rotation */ + gvc->rotation = GD_drawing(g)->landscape ? 90 : 0; + + /* FIXME - what is this ? */ G_peripheries = agfindattr(g, "peripheries"); + /* FIXME - why is this ? */ Deffontname = late_nnstring(g->proto->n, N_fontname, DEFAULT_FONTNAME); Deffontsize = late_double(g->proto->n, N_fontsize, DEFAULT_FONTSIZE, MIN_FONTSIZE); gvc->graphname = g->name; + gvc->lib = Lib; +} + + +/* emit_init + * - called just once per output device + * (where emit_graph can be called many times for refresh callbacks) + */ +void emit_init(GVC_t * gvc, graph_t * g) +{ + init_gvc_from_graph(gvc, g); init_layering(gvc, g); + gvc->job->gvc = gvc; + gvc->job->g = g; + + init_job_flags(gvc->job, g); + + init_job_margin(gvc); + + init_job_viewport(gvc, g); + init_job_pagination(gvc, g); - gvrender_begin_job(gvc, g, Lib, X, Y, Z, x, y, GD_drawing(g)->dpi); + gvrender_begin_job(gvc); } void emit_deinit(GVC_t * gvc) @@ -941,35 +1050,7 @@ void emit_deinit(GVC_t * gvc) gvrender_end_job(gvc); } -static void init_job_margin(GVC_t *gvc) -{ - gvrender_job_t *job = gvc->job; - - if (gvc->graph_sets_margin) { - job->margin = gvc->margin; - } - else { - /* set default margins depending on format */ - switch (gvc->job->output_lang) { - case GVRENDER_PLUGIN: - job->margin.x = job->margin.y = job->render_features->default_margin; - break; - case POSTSCRIPT: case PDF: case HPGL: case PCL: case MIF: - case METAPOST: case FIG: case VTX: case ATTRIBUTED_DOT: - case PLAIN: case PLAIN_EXT: case QPDF: - job->margin.x = job->margin.y = DEFAULT_MARGIN; - break; - case CANONICAL_DOT: - job->margin.x = job->margin.y = 0; - break; - default: - job->margin.x = job->margin.y = DEFAULT_EMBED_MARGIN; - break; - } - } -} - -void emit_graph(GVC_t * gvc, graph_t * g, int flags) +void emit_graph(GVC_t * gvc, graph_t * g) { graph_t *sg; node_t *n; @@ -977,10 +1058,7 @@ void emit_graph(GVC_t * gvc, graph_t * g, int flags) int c; char *str, *colors; char *s, *url = NULL, *tooltip = NULL, *target = NULL; - - init_job_margin(gvc); - - init_job_pagination(gvc, g); + int flags = gvc->job->flags; gvrender_begin_graph(gvc, g); if (flags & EMIT_COLORS) { diff --git a/lib/common/output.c b/lib/common/output.c index ac63b454f..dca525464 100644 --- a/lib/common/output.c +++ b/lib/common/output.c @@ -38,38 +38,6 @@ static attrsym_t *g_l_draw; #define Y(y) (y_invert ? (y_off - (y)) : (y)) #define YF(y) (y_invert ? (yf_off - (y)) : (y)) -static void graph_settings(GVC_t * gvc, graph_t * g) -{ - double xf, yf; - char *p; - int i; - - /* margins */ - gvc->graph_sets_margin = FALSE; - if ((p = agget(g, "margin"))) { - i = sscanf(p, "%lf,%lf", &xf, &yf); - if (i > 0) { - gvc->margin.x = gvc->margin.y = xf * POINTS_PER_INCH; - if (i > 1) - gvc->margin.y = yf * POINTS_PER_INCH; - gvc->graph_sets_margin = TRUE; - } - } - - /* pagesize */ - gvc->graph_sets_pageSize = FALSE; - P2PF(GD_drawing(g)->page, gvc->pageSize); - if ((GD_drawing(g)->page.x > 0) && (GD_drawing(g)->page.y > 0)) { - gvc->graph_sets_pageSize = TRUE; - } - - /* bounding box */ - B2BF(GD_bb(g),gvc->bb); - - /* rotation */ - gvc->rotation = GD_drawing(g)->landscape ? 90 : 0; -} - static void printptf(FILE * f, point pt) { fprintf(f, " %.3f %.3f", PS2INCH(pt.x), PS2INCH(Y(pt.y))); @@ -428,90 +396,30 @@ static void extend_attrs(GVC_t * gvc, graph_t *g) agxbfree(&charbuf); } -/* chkOrder: - * Determine order of output. - * Output usually in breadth first graph walk order - */ -static int chkOrder(graph_t * g) -{ - char *p = agget(g, "outputorder"); - if (p) { - char c = *p; - if ((c == 'n') && !strcmp(p + 1, "odesfirst")) - return EMIT_SORTED; - if ((c == 'e') && !strcmp(p + 1, "dgesfirst")) - return EMIT_EDGE_SORTED; - } - return 0; -} - -static int lang_sets_flags(gvrender_job_t * job, graph_t * g) -{ - int flags; - - switch (job->output_lang) { - case GVRENDER_PLUGIN: - flags = chkOrder(g) | job->render_features->flags; - break; - case POSTSCRIPT: - flags = chkOrder(g) | GVRENDER_DOES_MULTIGRAPH_OUTPUT_FILES; - break; - case ISMAP: case IMAP: case CMAP: case CMAPX: - /* output in breadth first graph walk order, but - * with nodes edges and nested clusters before - * clusters */ - flags = EMIT_CLUSTERS_LAST; - break; - case FIG: - /* output color definition objects first */ - flags = EMIT_COLORS; - break; - case VTX: - /* output sorted, i.e. all nodes then all edges */ - flags = EMIT_SORTED; - break; - case DIA: - /* output in preorder traversal of the graph */ - flags = EMIT_PREORDER; - break; - case EXTENDED_DOT: case ATTRIBUTED_DOT: case CANONICAL_DOT: - case PLAIN: case PLAIN_EXT: - flags = 0; - break; - default: - flags = chkOrder(g); - break; - } - return flags; -} - void dotneato_write_one(GVC_t * gvc, graph_t * g) { gvrender_job_t *job = gvc->job; - int flags; #ifndef DISABLE_CODEGENS Output_file = job->output_file; Output_lang = job->output_lang; #endif - graph_settings(gvc, g); - flags = lang_sets_flags(job, g); emit_init(gvc, g); - if (! (flags & GVRENDER_DOES_MULTIGRAPH_OUTPUT_FILES)) + if (! (job->flags & GVRENDER_DOES_MULTIGRAPH_OUTPUT_FILES)) emit_reset(gvc, g); /* FIXME - split into emit_init & page reset */ switch (gvc->job->output_lang) { case GVRENDER_PLUGIN: - gvemit_graph(gvc, g, flags); + gvemit_graph(gvc, g); break; case POSTSCRIPT: case PDF: case HPGL: case PCL: case MIF: case PIC_format: case GIF: case PNG: case JPEG: case WBMP: case GD: case memGD: case GD2: case VRML: case METAPOST: case TK: case SVG: case SVGZ: case QPDF: case QEPDF: case ISMAP: case IMAP: case CMAP: case CMAPX: case FIG: case VTX: case DIA: - emit_graph(gvc, g, flags); + emit_graph(gvc, g); break; case EXTENDED_DOT: attach_attrs(g); @@ -536,7 +444,7 @@ void dotneato_write_one(GVC_t * gvc, graph_t * g) default: if (gvc->job->output_lang >= QBM_FIRST && gvc->job->output_lang < QBM_LAST) - emit_graph(gvc, g, flags); + emit_graph(gvc, g); break; } diff --git a/lib/common/renderprocs.h b/lib/common/renderprocs.h index 9bec74e92..0746e4da6 100644 --- a/lib/common/renderprocs.h +++ b/lib/common/renderprocs.h @@ -79,7 +79,7 @@ extern "C" { extern void emit_attachment(GVC_t * gvc, textlabel_t *, splines *); extern void emit_clusters(GVC_t * gvc, Agraph_t * g, int flags); extern void emit_eof(GVC_t * gvc); - extern void emit_graph(GVC_t * gvc, graph_t * g, int flags); + extern void emit_graph(GVC_t * gvc, graph_t * g); extern void emit_label(GVC_t * gvc, textlabel_t *, void *obj); extern int emit_once(char *message); extern void emit_once_reset(); diff --git a/lib/gvc/gvc.h b/lib/gvc/gvc.h index bff5671e7..86bfa67b3 100644 --- a/lib/gvc/gvc.h +++ b/lib/gvc/gvc.h @@ -54,7 +54,7 @@ extern "C" { extern void gvrender_delete_jobs(GVC_t * gvc); /* emit */ - extern void gvemit_graph(GVC_t * gvc, graph_t * g, int emit_flags); + extern void gvemit_graph(GVC_t * gvc, graph_t * g); /* text_layout */ @@ -75,12 +75,11 @@ extern "C" { extern int gvrender_select(GVC_t * gvc, char *lang); extern int gvrender_features(GVC_t * gvc); extern void gvrender_reset(GVC_t * gvc); - extern void gvrender_begin_job(GVC_t * gvc, graph_t *g, char **lib, double X, double Y, double Z, - double x, double y, int dpi); + extern void gvrender_begin_job(GVC_t * gvc); extern void gvrender_end_job(GVC_t * gvc); extern void gvrender_begin_graph(GVC_t * gvc, graph_t * g); extern void gvrender_end_graph(GVC_t * gvc); - extern void gvrender_begin_page(GVC_t * gvc, graph_t * g); + extern void gvrender_begin_page(GVC_t * gvc); extern void gvrender_end_page(GVC_t * gvc); extern void gvrender_begin_layer(GVC_t * gvc); extern void gvrender_end_layer(GVC_t * gvc); diff --git a/lib/gvc/gvemit.c b/lib/gvc/gvemit.c index 5f0a043a8..1edf2817d 100644 --- a/lib/gvc/gvemit.c +++ b/lib/gvc/gvemit.c @@ -32,7 +32,7 @@ #include "gvc.h" -extern void emit_graph(GVC_t * gvc, graph_t * g, int flags); +extern void emit_graph(GVC_t * gvc, graph_t * g); //#if !defined(X_DISPLAY_MISSING) && !defined(DISABLE_GVRENDER) && defined(HAVE_CAIRO) #if 0 @@ -250,7 +250,7 @@ static void win_refresh(gvrender_job_t * job) XFillRectangle(job->dpy, job->pix, job->gc, 0, 0, job->width, job->height); - emit_graph(job->gvc, job->g, job->flags); + emit_graph(job->gvc, job->g); XCopyArea(job->dpy, job->pix, job->win, job->gc, 0, 0, job->width, job->height, 0, 0); @@ -515,15 +515,12 @@ static int toggle_fit_cb(gvrender_job_t * job) #endif /* CAIRO_HAS_XLIB_SURFACE */ #endif /* X_DISPLAY_MISSING */ -void gvemit_graph(GVC_t * gvc, graph_t * g, int flags) +void gvemit_graph(GVC_t * gvc, graph_t * g) { gvrender_job_t *job = gvc->job; + int flags = gvc->job->flags; - job->gvc = gvc; - job->g = g; - job->flags = flags; - - if (flags & GVRENDER_X11_EVENTS) { + if (flags & GVRENDER_X11_EVENTS) { //#ifdef CAIRO_HAS_XLIB_SURFACE #if 0 @@ -550,6 +547,6 @@ void gvemit_graph(GVC_t * gvc, graph_t * g, int flags) #endif } else { - emit_graph(job->gvc, job->g, job->flags); + emit_graph(job->gvc, job->g); } } diff --git a/lib/gvc/gvevent.c b/lib/gvc/gvevent.c index 3b07b67b8..67d79c6fb 100644 --- a/lib/gvc/gvevent.c +++ b/lib/gvc/gvevent.c @@ -70,7 +70,7 @@ static key_binding_t key_binding[] = { void gvevent_refresh(gvrender_job_t * job) { - emit_graph(job->gvc, job->g, job->flags); + emit_graph(job->gvc, job->g); } #if 0 diff --git a/lib/gvc/gvrender.c b/lib/gvc/gvrender.c index fa1b2a9f1..c0d9f0ff9 100644 --- a/lib/gvc/gvrender.c +++ b/lib/gvc/gvrender.c @@ -121,28 +121,11 @@ void gvrender_reset(GVC_t * gvc) #endif } -void gvrender_begin_job(GVC_t * gvc, graph_t *g, char **lib, double X, double Y, double Z, double x, double y, int dpi) +void gvrender_begin_job(GVC_t * gvc) { gvrender_job_t *job = gvc->job; gvrender_engine_t *gvre = job->render_engine; - job->gvc = gvc; - - gvc->lib = lib; - /* establish viewport and scaling */ - if (dpi == 0) { - if (gvre) - dpi = job->render_features->default_dpi; - else - dpi = DEFAULT_DPI; - } - job->dpi = dpi; - job->width = ROUND(X * dpi / POINTS_PER_INCH); - job->height = ROUND(Y * dpi / POINTS_PER_INCH); - job->zoom = Z; /* scaling factor */ - job->focus.x = x; /* graph coord of focus - points */ - job->focus.y = y; - job->rotation = gvc->rotation; if (gvre) { if (gvre->begin_job) gvre->begin_job(job); @@ -152,7 +135,7 @@ void gvrender_begin_job(GVC_t * gvc, graph_t *g, char **lib, double X, double Y, codegen_t *cg = job->codegen; if (cg && cg->begin_job && job->pageNum <= 1) - cg->begin_job(gvc->job->output_file, g, lib, gvc->user, + cg->begin_job(job->output_file, job->g, gvc->lib, gvc->user, gvc->info, job->pagesArraySize); } #endif @@ -304,7 +287,7 @@ void gvrender_end_graph(GVC_t * gvc) #endif } -void gvrender_begin_page(GVC_t * gvc, graph_t * g) +void gvrender_begin_page(GVC_t * gvc) { gvrender_job_t *job = gvc->job; gvrender_engine_t *gvre = job->render_engine; @@ -317,7 +300,7 @@ void gvrender_begin_page(GVC_t * gvc, graph_t * g) codegen_t *cg = job->codegen; if (cg && cg->begin_page) - cg->begin_page(g, job->pagesArrayElem, job->zoom, job->rotation, job->offset); + cg->begin_page(job->g, job->pagesArrayElem, job->zoom, job->rotation, job->offset); } #endif } -- 2.40.0