int width, int height, struct config *config,
GtkWidget *widget)
{
- GtkStyle *style;
- struct color *bgcolor = config->graph_bgcolor;
- GdkColor *bg;
+ GtkStyleContext *style_ctx;
+ struct color *bgcolor;
+ GdkRGBA rgba;
- style = gtk_widget_get_style(widget);
-
- bg = &style->bg[GTK_STATE_NORMAL];
+ bgcolor = config->graph_bgcolor;
+ style_ctx = gtk_widget_get_style_context(widget);
+ gtk_style_context_get_background_color(style_ctx,
+ GTK_STATE_FLAG_NORMAL,
+ &rgba);
if (config->alpha_channel_enabled)
cairo_set_source_rgba(cr,
- ((double)bg->red) / 65535,
- ((double)bg->green) / 65535,
- ((double)bg->blue) / 65535,
+ rgba.red,
+ rgba.green,
+ rgba.blue,
config->graph_bg_alpha);
else
cairo_set_source_rgb(cr,
- ((double)bg->red) / 65535,
- ((double)bg->green) / 65535,
- ((double)bg->blue) / 65535);
+ rgba.red,
+ rgba.green,
+ rgba.blue);
cairo_rectangle(cr, 0, 0, width, height);
cairo_fill(cr);
int g_xoff,
int g_yoff)
{
- int first = 1;
- int i;
+ int first, i, x, y, t, dt, vdt;
+ double v;
cairo_set_source_rgb(cr,
s->color->f_red,
s->color->f_green,
s->color->f_blue);
-
- for (i = 0; i < s->values_max_length; i++) {
- int x, y, t;
- double v;
+ dt = et - bt;
+ first = 1;
+ for (i = 0; i < s->values_max_length; i++) {
t = s->measures[i].time.tv_sec;
v = s->measures[i].value.d_num;
- if (v == UNKNOWN_DBL_VALUE || !t || (t - bt) < 0)
+ if (v == UNKNOWN_DBL_VALUE || !t)
continue;
- x = (t - bt) * g_width / (et - bt) + g_xoff;
+ vdt = t - bt;
+ if (vdt < 0)
+ continue;
+
+ x = vdt * g_width / dt + g_xoff;
y = compute_y(v, min, max, g_height, g_yoff);
cairo_set_line_join(cr, CAIRO_LINE_JOIN_ROUND);
cairo_set_line_width(cr, 1);
-
while (*sensor_cur) {
struct psensor *s = *sensor_cur;