X-Git-Url: https://git.wpitchoune.net/gitweb/?a=blobdiff_plain;f=src%2Fgraph.c;h=792bb258d6679962ccf3904acadd5378030a9f18;hb=766834bbf8c235713d9e7a00dd265a4c25c85e32;hp=ac929fa2e27e99f5324acaa7eacdbb156edf5898;hpb=b1120a13993398f80f5cddcdbc86c4ffe5de83f1;p=psensor.git diff --git a/src/graph.c b/src/graph.c index ac929fa..792bb25 100644 --- a/src/graph.c +++ b/src/graph.c @@ -59,28 +59,40 @@ struct graph_info { GdkRGBA theme_fg_color; }; - /* Return the end time of the graph i.e. the more recent measure. If * no measure are available, return 0. + * If Bezier curves are used return the measure n-3 to avoid to + * display a part of the curve outside the graph area. */ static time_t get_graph_end_time_s(struct psensor **sensors) { time_t ret, t; struct psensor *s; struct measure *measures; - int i; + int i, n; ret = 0; while (*sensors) { s = *sensors; measures = s->measures; + if (is_smooth_curves_enabled) + n = 2; + else + n = 0; + for (i = s->values_max_length - 1; i >= 0; i--) { if (measures[i].value != UNKNOWN_DBL_VALUE) { - t = measures[i].time.tv_sec; + if (!n) { + t = measures[i].time.tv_sec; - if (t > ret) - ret = t; + if (t > ret) { + ret = t; + break; + } + } else { + n--; + } } i--; } @@ -133,6 +145,22 @@ static void draw_left_region(cairo_t *cr, struct graph_info *info) cairo_fill(cr); } +static void draw_right_region(cairo_t *cr, struct graph_info *info) +{ + cairo_set_source_rgb(cr, + info->theme_bg_color.red, + info->theme_bg_color.green, + info->theme_bg_color.blue); + + + cairo_rectangle(cr, + info->g_xoff + info->g_width, + 0, + info->g_xoff + info->g_width + GRAPH_H_PADDING, + info->height); + cairo_fill(cr); +} + static void draw_graph_background(cairo_t *cr, struct config *config, @@ -185,42 +213,44 @@ static double dashes[] = { static int ndash = sizeof(dashes) / sizeof(dashes[0]); static void draw_background_lines(cairo_t *cr, - struct color *color, int min, int max, + struct config *config, struct graph_info *info) { int i; + double x, y; + struct color *color; + + color = config->graph_fgcolor; /* draw background lines */ cairo_set_line_width(cr, 1); cairo_set_dash(cr, dashes, ndash, 0); - cairo_set_source_rgb(cr, - color->red, color->green, color->blue); + cairo_set_source_rgb(cr, color->red, color->green, color->blue); /* vertical lines representing time steps */ for (i = 0; i <= 5; i++) { - int x = i * (info->g_width / 5) + info->g_xoff; - + x = i * ((double)info->g_width / 5) + info->g_xoff; cairo_move_to(cr, x, info->g_yoff); cairo_line_to(cr, x, info->g_yoff + info->g_height); - cairo_stroke(cr); } /* horizontal lines draws a line for each 10C step */ for (i = min; i < max; i++) { if (i % 10 == 0) { - int y = compute_y(i, - min, - max, - info->g_height, - info->g_yoff); + y = compute_y(i, + min, + max, + info->g_height, + info->g_yoff); cairo_move_to(cr, info->g_xoff, y); cairo_line_to(cr, info->g_xoff + info->g_width, y); - cairo_stroke(cr); } } + cairo_stroke(cr); + /* back to normal line style */ cairo_set_dash(cr, 0, 0, 0); } @@ -401,7 +431,6 @@ graph_update(struct psensor **sensors, struct config *config, GtkWidget *window) { - struct color *fgcolor = config->graph_fgcolor; int et, bt, width, height, g_width, g_height; double min_rpm, max_rpm, mint, maxt, min, max; char *strmin, *strmax; @@ -487,7 +516,6 @@ graph_update(struct psensor **sensors, GTK_STATE_FLAG_NORMAL, &info.theme_fg_color); - g_width = width - g_xoff - GRAPH_H_PADDING; info.g_width = g_width; @@ -511,7 +539,7 @@ graph_update(struct psensor **sensors, cairo_show_text(cr, str_etime); free(str_etime); - draw_background_lines(cr, fgcolor, mint, maxt, &info); + draw_background_lines(cr, mint, maxt, config, &info); /* .. and finaly draws the temperature graphs */ if (bt && et) { @@ -557,6 +585,7 @@ graph_update(struct psensor **sensors, } draw_left_region(cr, &info); + draw_right_region(cr, &info); /* draw min and max temp */ cairo_set_source_rgb(cr,