+void graph_add_extra_space(struct graph *g, double left_percent, double right_percent,
+ double top_percent, double bottom_percent)
+{
+ g->left_extra = left_percent;
+ g->right_extra = right_percent;
+ g->top_extra = top_percent;
+ g->bottom_extra = bottom_percent;
+}
+
+int graph_has_tooltips(struct graph *g)
+{
+ struct graph_label *i;
+
+ for (i = g->labels; i; i = i->next)
+ if (i->tooltip_count)
+ return 1;
+
+ return 0;
+}
+
+int graph_contains_xy(struct graph *g, int x, int y)
+{
+ int first_x = g->xoffset;
+ int last_x = g->xoffset + g->xdim;
+ int first_y = g->yoffset;
+ int last_y = g->yoffset + g->ydim;
+
+ return (x >= first_x && x <= last_x) && (y >= first_y && y <= last_y);
+}
+
+static int xy_match(struct xyvalue *xy, int x, int y)
+{
+ int xdiff = abs(xy->gx - x);
+ int ydiff = abs(xy->gy - y);
+
+ return xdiff <= 20 && ydiff <= 10;
+}
+
+const char *graph_find_tooltip(struct graph *g, int x, int y)
+{
+ struct graph_label *i;
+ struct graph_value *j;
+
+ for (i = g->labels; i; i = i->next) {
+ for (j = i->values; j; j = j->next) {
+ struct xyvalue *xy = j->value;
+
+ if (xy_match(xy, x - g->xoffset, y))
+ return j->tooltip;
+ }
+ }
+
+ return NULL;
+}