diff options
author | Simon Quigley <tsimonq2@ubuntu.com> | 2017-06-19 14:38:43 -0500 |
---|---|---|
committer | Simon Quigley <tsimonq2@ubuntu.com> | 2017-06-19 14:38:43 -0500 |
commit | 7aeb5ac87c6105bd8fcc9b1fd12e37ba1550f587 (patch) | |
tree | cab8ef3e10d3a33a2033538b6088e107f0a86dcd /loadgraph.c | |
parent | a9d469b1b48a8446dc9b9fd987b6af83a60ed796 (diff) |
Import Upstream version 0.4.2.2
Diffstat (limited to 'loadgraph.c')
-rw-r--r-- | loadgraph.c | 260 |
1 files changed, 129 insertions, 131 deletions
diff --git a/loadgraph.c b/loadgraph.c index 5f61fca3..3a535f5b 100644 --- a/loadgraph.c +++ b/loadgraph.c @@ -25,80 +25,80 @@ #include "loadgraph.h" -static void _draw(LoadGraph *lg); +static void _draw(LoadGraph * lg); LoadGraph *load_graph_new(gint size) { LoadGraph *lg; - + lg = g_new0(LoadGraph, 1); - + size++; - + lg->suffix = g_strdup(""); lg->area = gtk_drawing_area_new(); lg->size = size; lg->data = g_new0(gint, size); lg->scale = 1.0; - - lg->width = size * 4; + + lg->width = size * 4; lg->height = size * 2; - + lg->max_value = 1; lg->remax_count = 0; - lg->layout = pango_layout_new(gtk_widget_get_pango_context (lg->area)); - + lg->layout = pango_layout_new(gtk_widget_get_pango_context(lg->area)); + gtk_widget_set_size_request(lg->area, lg->width, lg->height); gtk_widget_show(lg->area); - + return lg; } -void load_graph_set_data_suffix(LoadGraph *lg, gchar *suffix) +void load_graph_set_data_suffix(LoadGraph * lg, gchar * suffix) { g_free(lg->suffix); lg->suffix = g_strdup(suffix); } -gchar *load_graph_get_data_suffix(LoadGraph *lg) +gchar *load_graph_get_data_suffix(LoadGraph * lg) { return lg->suffix; } -GtkWidget *load_graph_get_framed(LoadGraph *lg) +GtkWidget *load_graph_get_framed(LoadGraph * lg) { GtkWidget *align, *frame; - + align = gtk_alignment_new(0.5, 0.5, 0, 0); gtk_widget_show(align); - + frame = gtk_frame_new(NULL); gtk_widget_show(frame); gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN); - + gtk_container_add(GTK_CONTAINER(align), frame); gtk_container_add(GTK_CONTAINER(frame), lg->area); - + return align; } -void load_graph_clear(LoadGraph *lg) +void load_graph_clear(LoadGraph * lg) { gint i; - + for (i = 0; i < lg->size; i++) - lg->data[i] = 0; + lg->data[i] = 0; lg->scale = 1.0; lg->max_value = 1; lg->remax_count = 0; - + _draw(lg); } -void load_graph_set_color(LoadGraph *lg, LoadGraphColor color) +void load_graph_set_color(LoadGraph * lg, LoadGraphColor color) { lg->color = color; gdk_rgb_gc_set_foreground(lg->trace, lg->color); @@ -106,7 +106,7 @@ void load_graph_set_color(LoadGraph *lg, LoadGraphColor color) gdk_rgb_gc_set_foreground(lg->grid, lg->color - 0x404040); } -void load_graph_destroy(LoadGraph *lg) +void load_graph_destroy(LoadGraph * lg) { g_free(lg->data); gtk_widget_destroy(lg->area); @@ -118,22 +118,19 @@ void load_graph_destroy(LoadGraph *lg) g_free(lg); } -static gboolean _expose(GtkWidget *widget, GdkEventExpose *event, - gpointer user_data) +static gboolean _expose(GtkWidget * widget, GdkEventExpose * event, + gpointer user_data) { - LoadGraph *lg = (LoadGraph *)user_data; + LoadGraph *lg = (LoadGraph *) user_data; GdkDrawable *draw = GDK_DRAWABLE(lg->buf); gdk_draw_drawable(lg->area->window, - lg->area->style->white_gc, - draw, - 0, 0, - 0, 0, - lg->width, lg->height); + lg->area->style->white_gc, + draw, 0, 0, 0, 0, lg->width, lg->height); return FALSE; -} +} -void load_graph_configure_expose(LoadGraph *lg) +void load_graph_configure_expose(LoadGraph * lg) { /* creates the backing store pixmap */ gtk_widget_realize(lg->area); @@ -148,152 +145,151 @@ void load_graph_configure_expose(LoadGraph *lg) load_graph_set_color(lg, LG_COLOR_GREEN); /* init graphic contexts */ - gdk_gc_set_line_attributes(lg->grid, - 1, GDK_LINE_ON_OFF_DASH, - GDK_CAP_NOT_LAST, - GDK_JOIN_ROUND); -#if 0 /* old-style grid */ + gdk_gc_set_line_attributes(lg->grid, + 1, GDK_LINE_ON_OFF_DASH, + GDK_CAP_NOT_LAST, GDK_JOIN_ROUND); +#if 0 /* old-style grid */ gdk_rgb_gc_set_foreground(lg->grid, 0x707070); #endif - gdk_gc_set_line_attributes(lg->trace, - 1, GDK_LINE_SOLID, - GDK_CAP_PROJECTING, - GDK_JOIN_ROUND); + gdk_gc_set_line_attributes(lg->trace, + 1, GDK_LINE_SOLID, + GDK_CAP_PROJECTING, GDK_JOIN_ROUND); -#if 0 /* old-style fill */ - gdk_gc_set_line_attributes(lg->fill, - 1, GDK_LINE_SOLID, - GDK_CAP_BUTT, - GDK_JOIN_BEVEL); +#if 0 /* old-style fill */ + gdk_gc_set_line_attributes(lg->fill, + 1, GDK_LINE_SOLID, + GDK_CAP_BUTT, GDK_JOIN_BEVEL); #endif /* configures the expose event */ - g_signal_connect(G_OBJECT(lg->area), "expose-event", - (GCallback) _expose, lg); + g_signal_connect(G_OBJECT(lg->area), "expose-event", + (GCallback) _expose, lg); } -static void -_draw_label_and_line(LoadGraph *lg, gint position, gint value) +static void _draw_label_and_line(LoadGraph * lg, gint position, gint value) { gchar *tmp; - + /* draw lines */ if (position > 0) - gdk_draw_line(GDK_DRAWABLE(lg->buf), lg->grid, 0, position, lg->width, position); + gdk_draw_line(GDK_DRAWABLE(lg->buf), lg->grid, 0, position, + lg->width, position); else - position = -1 * position; - + position = -1 * position; + /* draw label */ - tmp = g_strdup_printf("<span size=\"x-small\">%d%s</span>", value, lg->suffix); + tmp = + g_strdup_printf("<span size=\"x-small\">%d%s</span>", value, + lg->suffix); pango_layout_set_markup(lg->layout, tmp, -1); - pango_layout_set_width(lg->layout, lg->area->allocation.width * PANGO_SCALE); - gdk_draw_layout(GDK_DRAWABLE(lg->buf), lg->trace, 2, position, lg->layout); + pango_layout_set_width(lg->layout, + lg->area->allocation.width * PANGO_SCALE); + gdk_draw_layout(GDK_DRAWABLE(lg->buf), lg->trace, 2, position, + lg->layout); g_free(tmp); } -static void -_draw(LoadGraph *lg) +static void _draw(LoadGraph * lg) { GdkDrawable *draw = GDK_DRAWABLE(lg->buf); gint i, d; - + /* clears the drawing area */ gdk_draw_rectangle(draw, lg->area->style->black_gc, - TRUE, 0, 0, lg->width, lg->height); - + TRUE, 0, 0, lg->width, lg->height); + /* the graph */ GdkPoint *points = g_new0(GdkPoint, lg->size + 1); - + for (i = 0; i < lg->size; i++) { - points[i].x = i * 4; - points[i].y = lg->height - lg->data[i] * lg->scale; + points[i].x = i * 4; + points[i].y = lg->height - lg->data[i] * lg->scale; } - + points[0].x = points[1].x = 0; points[0].y = points[i].y = lg->height; - points[i].x = points[i-1].x = lg->width; - + points[i].x = points[i - 1].x = lg->width; + gdk_draw_polygon(draw, lg->fill, TRUE, points, lg->size + 1); gdk_draw_polygon(draw, lg->trace, FALSE, points, lg->size + 1); - + g_free(points); /* vertical bars */ for (i = lg->width, d = 0; i > 1; i--, d++) - if ((d % 45) == 0 && d) - gdk_draw_line(draw, lg->grid, i, 0, i, lg->height); + if ((d % 45) == 0 && d) + gdk_draw_line(draw, lg->grid, i, 0, i, lg->height); - /* horizontal bars and labels; 25%, 50% and 75% */ - _draw_label_and_line(lg, -1, lg->max_value); - _draw_label_and_line(lg, lg->height / 4, 3 * (lg->max_value / 4)); - _draw_label_and_line(lg, lg->height / 2, lg->max_value / 2); + /* horizontal bars and labels; 25%, 50% and 75% */ + _draw_label_and_line(lg, -1, lg->max_value); + _draw_label_and_line(lg, lg->height / 4, 3 * (lg->max_value / 4)); + _draw_label_and_line(lg, lg->height / 2, lg->max_value / 2); _draw_label_and_line(lg, 3 * (lg->height / 4), lg->max_value / 4); - -#if 0 /* old-style drawing */ - for (i = 0; i < lg->size; i++) { - gint this = lg->height - lg->data[i] * lg->scale; - gint next = lg->height - lg->data[i+1] * lg->scale; - gint i4 = i * 4; - - gdk_draw_line(draw, lg->fill, i4, this, i4, lg->height); - gdk_draw_line(draw, lg->fill, i4 + 2, this, i4 + 2, lg->height); + +#if 0 /* old-style drawing */ + for (i = 0; i < lg->size; i++) { + gint this = lg->height - lg->data[i] * lg->scale; + gint next = lg->height - lg->data[i + 1] * lg->scale; + gint i4 = i * 4; + + gdk_draw_line(draw, lg->fill, i4, this, i4, lg->height); + gdk_draw_line(draw, lg->fill, i4 + 2, this, i4 + 2, lg->height); } - for (i = 0; i < lg->size; i++) { - gint this = lg->height - lg->data[i] * lg->scale; - gint next = lg->height - lg->data[i+1] * lg->scale; - gint i4 = i * 4; - - gdk_draw_line(draw, lg->trace, i4, this, i4 + 2, - (this + next) / 2); - gdk_draw_line(draw, lg->trace, i4 + 2, (this + next) / 2, - i4 + 4, next); + for (i = 0; i < lg->size; i++) { + gint this = lg->height - lg->data[i] * lg->scale; + gint next = lg->height - lg->data[i + 1] * lg->scale; + gint i4 = i * 4; + + gdk_draw_line(draw, lg->trace, i4, this, i4 + 2, + (this + next) / 2); + gdk_draw_line(draw, lg->trace, i4 + 2, (this + next) / 2, + i4 + 4, next); } #endif gtk_widget_queue_draw(lg->area); } -void -load_graph_update(LoadGraph *lg, gint value) +void load_graph_update(LoadGraph * lg, gint value) { gint i; - + if (value < 0) - return; - + return; + /* shift-right our data */ for (i = 0; i < lg->size; i++) { - lg->data[i] = lg->data[i+1]; + lg->data[i] = lg->data[i + 1]; } - + /* insert the updated value */ lg->data[i] = value; - + /* calculates the maximum value */ if (lg->remax_count++ > 20) { - /* only finds the maximum amongst the data every 20 times */ - lg->remax_count = 0; - - gint max = lg->data[0]; - for (i = 1; i < lg->size; i++) { - if (lg->data[i] > max) - max = lg->data[i]; - } - - lg->max_value = max; + /* only finds the maximum amongst the data every 20 times */ + lg->remax_count = 0; + + gint max = lg->data[0]; + for (i = 1; i < lg->size; i++) { + if (lg->data[i] > max) + max = lg->data[i]; + } + + lg->max_value = max; } else { - /* otherwise, select the maximum between the current maximum - and the supplied value */ - lg->max_value = MAX(value, lg->max_value); + /* otherwise, select the maximum between the current maximum + and the supplied value */ + lg->max_value = MAX(value, lg->max_value); } /* recalculates the scale; always use 90% of it */ - lg->scale = 0.90 * ((gfloat)lg->height / (gfloat)lg->max_value); + lg->scale = 0.90 * ((gfloat) lg->height / (gfloat) lg->max_value); /* redraw */ _draw(lg); @@ -302,22 +298,24 @@ load_graph_update(LoadGraph *lg, gint value) #ifdef LOADGRAPH_UNIT_TEST gboolean lg_update(gpointer d) { - LoadGraph *lg = (LoadGraph *)d; - + LoadGraph *lg = (LoadGraph *) d; + static int i = 0; static int j = 1; - + if (i > 150) { - j = -1; + j = -1; } else if (i < 0) { - j = 1; + j = 1; } i += j; - if (rand() % 10 > 8) i*= 2; - if (rand() % 10 < 2) i/= 2; + if (rand() % 10 > 8) + i *= 2; + if (rand() % 10 < 2) + i /= 2; load_graph_update(lg, i + rand() % 50); - + return TRUE; } @@ -325,23 +323,23 @@ int main(int argc, char **argv) { LoadGraph *lg; GtkWidget *window; - + gtk_init(&argc, &argv); - + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_show(window); - + lg = load_graph_new(50); gtk_container_add(GTK_CONTAINER(window), load_graph_get_framed(lg)); gtk_container_set_border_width(GTK_CONTAINER(window), 20); load_graph_configure_expose(lg); - + lg_update(lg); - + g_timeout_add(100, lg_update, lg); - + gtk_main(); - + return 0; } #endif |