enum {
GV_F_ON_PRIO = 1,
+ GV_F_PRIO_SKIP = 2,
};
struct graph_value {
g->per_label_limit = -1;
g->font = font;
if (!g->font)
- g->font = "Sans";
+ g->font = GRAPH_DEFAULT_FONT;
return g;
}
+void graph_set_font(struct graph *g, const char *font)
+{
+ g->font = font;
+}
+
void graph_x_axis_unit_change_notify(struct graph *g, graph_axis_unit_change_callback f)
{
g->x_axis_unit_change_callback = f;
factor = 1.0;
break;
}
- cairo_select_font_face (cr, g->font, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
+ cairo_select_font_face(cr, g->font, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
cairo_set_font_size(cr, fontsize);
cairo_text_extents(cr, text, &extents);
static void graph_draw_common(struct graph *g, cairo_t *cr,
double *x1, double *y1, double *x2, double *y2)
{
- cairo_set_source_rgb(cr, 0, 0, 0);
- cairo_set_line_width (cr, 0.8);
+ cairo_set_source_rgb(cr, 0, 0, 0);
+ cairo_set_line_width (cr, 0.8);
*x1 = 0.10 * g->xdim;
*x2 = 0.95 * g->xdim;
return NULL;
}
-void graph_add_label(struct graph *bg, const char *label)
+graph_label_t graph_add_label(struct graph *bg, const char *label)
{
struct graph_label *i;
i = graph_find_label(bg, label);
if (i)
- return; /* already present. */
+ return i; /* already present. */
i = calloc(1, sizeof(*i));
INIT_FLIST_HEAD(&i->value_list);
i->parent = bg;
setstring(&i->label, label);
flist_add_tail(&i->list, &bg->label_list);
INIT_PRIO_TREE_ROOT(&i->prio_tree);
+ return i;
}
static void __graph_value_drop(struct graph_label *l, struct graph_value *v)
static void graph_value_drop(struct graph_label *l, struct graph_value *v)
{
+ if (v->flags & GV_F_PRIO_SKIP) {
+ __graph_value_drop(l, v);
+ return;
+ }
+
/*
* Find head, the guy that's on the prio tree
*/
flist_add_tail(&x->alias, &alias->alias);
} else
x->flags = GV_F_ON_PRIO;
- }
+ } else
+ x->flags = GV_F_PRIO_SKIP;
if (g->per_label_limit != -1 &&
i->value_count > g->per_label_limit) {
}
}
-int graph_add_data(struct graph *bg, const char *label, const double value)
+int graph_add_data(struct graph *bg, graph_label_t label, const double value)
{
- struct graph_label *i;
+ struct graph_label *i = label;
double *d;
d = malloc(sizeof(*d));
*d = value;
- i = graph_find_label(bg, label);
- if (!i)
- return -1;
graph_label_add_value(i, d, NULL);
return 0;
}
return 0;
}
-int graph_add_xy_data(struct graph *bg, const char *label,
+int graph_add_xy_data(struct graph *bg, graph_label_t label,
const double x, const double y, const char *tooltip)
{
- struct graph_label *i;
+ struct graph_label *i = label;
struct xyvalue *xy;
- i = graph_find_label(bg, label);
- if (!i)
- return -1;
-
if (bg->dont_graph_all_zeroes && y == 0.0 && !graph_nonzero_y(i))
i->hide = 1;
else
}
}
-void graph_set_color(struct graph *gr, const char *label,
- double red, double green, double blue)
+void graph_set_color(struct graph *gr, graph_label_t label, double red,
+ double green, double blue)
{
- struct flist_head *entry;
- struct graph_label *i;
+ struct graph_label *i = label;
double r, g, b;
if (red < 0.0) { /* invisible color */
b = 1.0;
}
- flist_for_each(entry, &gr->label_list) {
- i = flist_entry(entry, struct graph_label, list);
-
- if (strcmp(i->label, label) == 0) {
- i->r = r;
- i->g = g;
- i->b = b;
- break;
- }
- }
+ i->r = r;
+ i->g = g;
+ i->b = b;
}
void graph_free(struct graph *bg)