void gvrender_begin_graph(GVJ_t * job, graph_t * g)
{
GVC_t *gvc = job->gvc;
+ int flags = job->flags;
obj_state_t *obj;
gvrender_engine_t *gvre = job->render.engine;
textlabel_t *lab;
obj = push_obj_state(job);
obj->g = g;
- if ((job->flags & GVRENDER_DOES_LABELS) && ((lab = GD_label(g)))) {
+ if ((flags & GVRENDER_DOES_LABELS) && ((lab = GD_label(g)))) {
if (lab->html)
doHTMLlabel(lab->u.html, lab->p, (void *) g);
obj->label = lab->text;
}
- if ((job->flags & GVRENDER_DOES_MAPS)
- && (((s = agget(g, "href")) && s[0]) || ((s = agget(g, "URL")) && s[0]))) {
+ if ((flags & GVRENDER_DOES_MAPS)
+ && (((s = agget(g, "href")) && s[0])
+ || ((s = agget(g, "URL")) && s[0]))) {
obj->url = strdup_and_subst_graph(s, g);
}
+ if (flags & GVRENDER_DOES_TOOLTIPS) {
+ if ((s = agget(g, "tooltip")) && s[0]) {
+ obj->tooltip = strdup_and_subst_graph(s, g);
+ obj->explicit_tooltip = true;
+ }
+ else if (obj->url && obj->label) {
+ obj->tooltip = strdup(obj->label);
+ }
+ }
+ if ((flags & GVRENDER_DOES_TARGETS) && ((s = agget(g, "target")) && s[0])) {
+ obj->target = strdup_and_subst_graph(s, g);
+ }
job->compscale.x = job->scale.x = job->zoom * job->dpi.x / POINTS_PER_INCH;
job->compscale.y = job->scale.y = job->zoom * job->dpi.y / POINTS_PER_INCH;
job->compscale.y *= (job->flags & GVRENDER_Y_GOES_DOWN) ? -1. : 1.;
if (job->rotation) {
- job->clip.UR.x = job->focus.x + sy + EPSILON;
- job->clip.UR.y = job->focus.y + sx + EPSILON;
- job->clip.LL.x = job->focus.x - sy - EPSILON;
- job->clip.LL.y = job->focus.y - sx - EPSILON;
+ job->clip.UR.x = job->focus.x + sy + EPSILON;
+ job->clip.UR.y = job->focus.y + sx + EPSILON;
+ job->clip.LL.x = job->focus.x - sy - EPSILON;
+ job->clip.LL.y = job->focus.y - sx - EPSILON;
job->offset.x = -job->focus.y * job->compscale.x + job->width * 3 / 2;
job->offset.y = -job->focus.x * job->compscale.y + job->height / 2.;
} else {
- job->clip.UR.x = job->focus.x + sx + EPSILON;
- job->clip.UR.y = job->focus.y + sy + EPSILON;
- job->clip.LL.x = job->focus.x - sx - EPSILON;
- job->clip.LL.y = job->focus.y - sy - EPSILON;
+ job->clip.UR.x = job->focus.x + sx + EPSILON;
+ job->clip.UR.y = job->focus.y + sy + EPSILON;
+ job->clip.LL.x = job->focus.x - sx - EPSILON;
+ job->clip.LL.y = job->focus.y - sy - EPSILON;
job->offset.x = -job->focus.x * job->compscale.x + job->width / 2.;
job->offset.y = -job->focus.y * job->compscale.y + job->height / 2.;
}
#ifdef WITH_CODEGENS
else {
codegen_t *cg = job->codegen;
-
+
if (cg && cg->begin_graph)
cg->begin_graph(gvc, g, job->canvasBox, gvc->pb);
}
int nump = 0, flags = job->flags;
pointf *p = NULL;
- if (flags & (GVRENDER_DOES_MAPS | GVRENDER_DOES_TOOLTIPS)) {
+ if ((flags & (GVRENDER_DOES_MAPS | GVRENDER_DOES_TOOLTIPS))
+ && (obj->url || obj->explicit_tooltip)) {
if (flags & (GVRENDER_DOES_MAP_RECTANGLE | GVRENDER_DOES_MAP_POLYGON)) {
if (flags & GVRENDER_DOES_MAP_RECTANGLE) {
obj->url_map_shape = MAP_RECTANGLE;
if ((flags & GVRENDER_DOES_TARGETS) && ((s = agget(sg, "target")) && s[0]))
obj->target = strdup_and_subst_graph(s, sg);
- if ((flags & GVRENDER_DOES_TOOLTIPS) && ((s = agget(sg, "tooltip")) && s[0]))
- obj->tooltip = strdup_and_subst_graph(s, sg);
+ if (flags & GVRENDER_DOES_TOOLTIPS) {
+ if ((s = agget(sg, "tooltip")) && s[0]) {
+ obj->tooltip = strdup_and_subst_graph(s, sg);
+ obj->explicit_tooltip = true;
+ }
+ else if (obj->label) {
+ obj->tooltip = strdup(obj->label);
+ }
+ }
if (flags & (GVRENDER_DOES_MAPS | GVRENDER_DOES_TOOLTIPS)) {
if (flags & (GVRENDER_DOES_MAP_RECTANGLE | GVRENDER_DOES_MAP_POLYGON)) {
obj->url = strdup_and_subst_node(s, n);
}
if (flags & GVRENDER_DOES_TOOLTIPS) {
- if ((s = agget(n, "tooltip")) && s[0])
+ if ((s = agget(n, "tooltip")) && s[0]) {
obj->tooltip = strdup_and_subst_node(s, n);
- else
+ obj->explicit_tooltip = true;
+ }
+ else {
obj->tooltip = strdup(ND_label(n)->text);
+ }
}
if ((flags & GVRENDER_DOES_TARGETS) && ((s = agget(n, "target")) && s[0])) {
obj->target = strdup_and_subst_node(s, n);
}
- if (flags & (GVRENDER_DOES_MAPS | GVRENDER_DOES_TOOLTIPS)) {
+ if ((flags & (GVRENDER_DOES_MAPS | GVRENDER_DOES_TOOLTIPS))
+ && (obj->url || obj->explicit_tooltip)) {
/* checking shape of node */
shape = shapeOf(n);
static point *A;
static int size_A;
+ if (!AF || !nump)
+ return;
+
if (size_A < nump) {
size_A = nump + 10;
A = realloc(A, size_A * sizeof(point));
for (i = 0; i < nump; i++)
PF2P(AF[i], A[i]);
- if (job->render.id == FORMAT_IMAP) {
+ if (job->render.id == FORMAT_IMAP && url && url[0]) {
switch (map_shape) {
case MAP_RECTANGLE:
/* Y_GOES_DOWN so need UL to LR */
break;
}
- } else if (job->render.id == FORMAT_ISMAP) {
+ } else if (job->render.id == FORMAT_ISMAP && url && url[0]) {
switch (map_shape) {
case MAP_RECTANGLE:
/* Y_GOES_DOWN so need UL to LR */
switch (job->render.id) {
case FORMAT_CMAP:
- if (obj->url && obj->url[0] && obj->url_map_p)
- map_output_shape(job, obj->url_map_shape, obj->url_map_p,obj->url_map_n,
+ map_output_shape(job, obj->url_map_shape, obj->url_map_p,obj->url_map_n,
obj->url, obj->tooltip, obj->target);
break;
case FORMAT_CMAPX:
- if (obj->url && obj->url[0] && obj->url_map_p)
- map_output_shape(job, obj->url_map_shape, obj->url_map_p,obj->url_map_n,
+ map_output_shape(job, obj->url_map_shape, obj->url_map_p,obj->url_map_n,
obj->url, obj->tooltip, obj->target);
fprintf(job->output_file, "</map>\n");
break;
fprintf(job->output_file, "%% %s\n", obj->sg->name);
- if (obj->url && obj->url[0] && obj->url_map_p)
- map_output_shape(job, obj->url_map_shape, obj->url_map_p, obj->url_map_n,
+ map_output_shape(job, obj->url_map_shape, obj->url_map_p, obj->url_map_n,
obj->url, obj->tooltip, obj->target);
}
{
obj_state_t *obj = job->obj;
- if (obj->url && obj->url[0] && obj->url_map_p)
- map_output_shape(job, obj->url_map_shape, obj->url_map_p,obj->url_map_n,
+ map_output_shape(job, obj->url_map_shape, obj->url_map_p,obj->url_map_n,
obj->url, obj->tooltip, obj->target);
}
obj_state_t *obj = job->obj;
int i, j = 0;
- if (obj->url && obj->url[0] && obj->url_map_p)
- map_output_shape(job, obj->url_map_shape, obj->url_map_p, obj->url_map_n,
+ map_output_shape(job, obj->url_map_shape, obj->url_map_p, obj->url_map_n,
obj->url, obj->tooltip, obj->target);
-
- if (obj->tailurl && obj->tailurl[0] && obj->tailurl_map_p)
- map_output_shape(job, MAP_RECTANGLE, obj->tailurl_map_p, 2,
+ map_output_shape(job, MAP_RECTANGLE, obj->tailurl_map_p, 2,
obj->tailurl, obj->tailtooltip, obj->tailtarget);
- if (obj->headurl && obj->headurl[0] && obj->headurl_map_p)
- map_output_shape(job, MAP_RECTANGLE, obj->headurl_map_p, 2,
+ map_output_shape(job, MAP_RECTANGLE, obj->headurl_map_p, 2,
obj->headurl, obj->headtooltip, obj->headtarget);
-
- if (obj->url && obj->url[0] && obj->tailendurl_map_p)
- map_output_shape(job, MAP_RECTANGLE, obj->tailendurl_map_p,2,
+ map_output_shape(job, MAP_RECTANGLE, obj->tailendurl_map_p,2,
obj->url, obj->tooltip, obj->target);
- if (obj->url && obj->url[0] && obj->headendurl_map_p)
- map_output_shape(job, MAP_RECTANGLE, obj->headendurl_map_p, 2,
+ map_output_shape(job, MAP_RECTANGLE, obj->headendurl_map_p, 2,
obj->url, obj->tooltip, obj->target);
-
- if (obj->url && obj->url[0]) {
- for (i = 0; i < obj->url_bsplinemap_poly_n; i++) {
- map_output_shape(job, MAP_POLYGON, obj->url_bsplinemap_p+j, obj->url_bsplinemap_n[i],
- obj->url, obj->tooltip, obj->target);
- j += obj->url_bsplinemap_n[i];
- }
+ for (i = 0; i < obj->url_bsplinemap_poly_n; i++) {
+ map_output_shape(job, MAP_POLYGON,
+ obj->url_bsplinemap_p+j, obj->url_bsplinemap_n[i],
+ obj->url, obj->tooltip, obj->target);
+ j += obj->url_bsplinemap_n[i];
}
}