diff options
author | Burt P <pburt0@gmail.com> | 2017-07-31 00:15:16 -0500 |
---|---|---|
committer | Leandro A. F. Pereira <leandro@hardinfo.org> | 2017-08-04 09:22:06 -0700 |
commit | efcec574192bcc81a8010acc9e7fac0e7e00bc96 (patch) | |
tree | d19bb465d88884e29064c307cd3f55091d3b5c6b /shell/loadgraph.c | |
parent | 304d0f34c45cce74ff2e64015d7f69d5a11c82c0 (diff) |
loadgraph: back to gtk2 only
gtk3 uses uber-graph.
Signed-off-by: Burt P <pburt0@gmail.com>
Diffstat (limited to 'shell/loadgraph.c')
-rwxr-xr-x | shell/loadgraph.c | 215 |
1 files changed, 29 insertions, 186 deletions
diff --git a/shell/loadgraph.c b/shell/loadgraph.c index 6dd1c3c8..ceb91720 100755 --- a/shell/loadgraph.c +++ b/shell/loadgraph.c @@ -26,17 +26,10 @@ #include "loadgraph.h" struct _LoadGraph { -#if GTK_CHECK_VERSION(3, 0, 0) - cairo_surface_t *buf; - cairo_t *grid; - cairo_t *trace; - cairo_t *fill; -#else GdkPixmap *buf; GdkGC *grid; GdkGC *trace; GdkGC *fill; -#endif GtkWidget *area; gint *data; @@ -128,45 +121,32 @@ void load_graph_clear(LoadGraph * lg) void load_graph_set_color(LoadGraph * lg, LoadGraphColor color) { lg->color = color; -#if GTK_CHECK_VERSION(3, 0, 0) -#define UNPACK_COLOR(C) (((C)>>16) & 0xff), (((C)>>8) & 0xff), ((C) & 0xff) - cairo_set_source_rgb(lg->trace, UNPACK_COLOR(lg->color) ); - cairo_set_source_rgb(lg->fill, UNPACK_COLOR(lg->color - 0x303030) ); - cairo_set_source_rgb(lg->grid, UNPACK_COLOR(lg->color - 0xcdcdcd) ); -#else gdk_rgb_gc_set_foreground(lg->trace, lg->color); gdk_rgb_gc_set_foreground(lg->fill, lg->color - 0x303030); gdk_rgb_gc_set_foreground(lg->grid, lg->color - 0xcdcdcd); -#endif } void load_graph_destroy(LoadGraph * lg) { -#if GTK_CHECK_VERSION(3, 0, 0) - g_object_unref(lg->buf); -#else + g_free(lg->data); + gtk_widget_destroy(lg->area); gdk_pixmap_unref(lg->buf); -#endif g_object_unref(lg->trace); g_object_unref(lg->grid); g_object_unref(lg->fill); g_object_unref(lg->layout); - gtk_widget_destroy(lg->area); - g_free(lg->data); 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; -#if GTK_CHECK_VERSION(3, 0, 0) - /* TODO:GTK3 copy from lg->buf or lg->area? to widget? */ -#else GdkDrawable *draw = GDK_DRAWABLE(lg->buf); + gdk_draw_drawable(lg->area->window, - lg->area->style->black_gc, - draw, 0, 0, 0, 0, lg->width, lg->height); -#endif + lg->area->style->black_gc, + draw, 0, 0, 0, 0, lg->width, lg->height); return FALSE; } @@ -174,124 +154,64 @@ void load_graph_configure_expose(LoadGraph * lg) { /* creates the backing store pixmap */ gtk_widget_realize(lg->area); -#if GTK_CHECK_VERSION(3, 0, 0) - cairo_content_t content; - GdkWindow *gdk_window = gtk_widget_get_window(lg->area); - lg->buf = gdk_window_create_similar_surface(gdk_window, CAIRO_CONTENT_COLOR, lg->width, lg->height); - lg->grid = cairo_create(lg->buf); - lg->trace = cairo_create(lg->buf); - lg->fill = cairo_create(lg->buf); -#else lg->buf = gdk_pixmap_new(lg->area->window, lg->width, lg->height, -1); + /* create the graphic contexts */ lg->grid = gdk_gc_new(GDK_DRAWABLE(lg->buf)); lg->trace = gdk_gc_new(GDK_DRAWABLE(lg->buf)); lg->fill = gdk_gc_new(GDK_DRAWABLE(lg->buf)); -#endif /* the default color is green */ load_graph_set_color(lg, LG_COLOR_GREEN); /* init graphic contexts */ -#if GTK_CHECK_VERSION(3, 0, 0) - cairo_set_line_width(lg->grid, 1); - cairo_set_line_cap(lg->grid, CAIRO_LINE_CAP_BUTT); - cairo_set_line_join(lg->grid, CAIRO_LINE_JOIN_MITER); - cairo_set_dash(lg->grid, 0, (gint8*)"\2\2", 2); -#else gdk_gc_set_line_attributes(lg->grid, - 1, GDK_LINE_ON_OFF_DASH, - GDK_CAP_NOT_LAST, GDK_JOIN_ROUND); + 1, GDK_LINE_ON_OFF_DASH, + GDK_CAP_NOT_LAST, GDK_JOIN_ROUND); gdk_gc_set_dashes(lg->grid, 0, (gint8*)"\2\2", 2); -#endif -#if 0 /* old-style grid */ - gdk_rgb_gc_set_foreground(lg->grid, 0x707070); -#endif - -#if GTK_CHECK_VERSION(3, 0, 0) - cairo_set_line_width(lg->trace, 1); - cairo_set_line_cap(lg->trace, CAIRO_LINE_CAP_BUTT); - cairo_set_line_join(lg->trace, CAIRO_LINE_JOIN_MITER); -#else gdk_gc_set_line_attributes(lg->trace, 1, GDK_LINE_SOLID, GDK_CAP_PROJECTING, GDK_JOIN_ROUND); -#endif -#if 0 /* old-style fill */ - gdk_gc_set_line_attributes(lg->fill, - 1, GDK_LINE_SOLID, - GDK_CAP_BUTT, GDK_JOIN_BEVEL); -#endif - -#if GTK_CHECK_VERSION(3, 0, 0) - /* configures the draw event */ - g_signal_connect(G_OBJECT(lg->area), "draw", - (GCallback) _expose, lg); -#else /* configures the expose event */ g_signal_connect(G_OBJECT(lg->area), "expose-event", - (GCallback) _expose, lg); -#endif + (GCallback) _expose, lg); } -#if GTK_CHECK_VERSION(3, 0, 0) -#define _draw_line(D, CR, X1, Y1, X2, Y2) \ - cairo_move_to(CR, X1, Y1); \ - cairo_line_to(CR, X2, Y2); -#else -#define _draw_line(D, GC, X1, Y1, X2, Y2) gdk_draw_line(D, GC, X1, Y1, X2, Y2) -#endif - static void _draw_label_and_line(LoadGraph * lg, gint position, gint value) { gchar *tmp; /* draw lines */ - if (position > 0) { - _draw_line(GDK_DRAWABLE(lg->buf), lg->grid, 0, position, - lg->width, position); - } else + if (position > 0) + gdk_draw_line(GDK_DRAWABLE(lg->buf), lg->grid, 0, position, + lg->width, position); + else position = -1 * position; /* draw label */ tmp = - g_strdup_printf("<span size=\"x-small\">%d%s</span>", value, + g_strdup_printf("<span size=\"x-small\">%d%s</span>", value, lg->suffix); pango_layout_set_markup(lg->layout, tmp, -1); -#if GTK_CHECK_VERSION(3, 0, 0) pango_layout_set_width(lg->layout, - lg->width * PANGO_SCALE); - gtk_widget_create_pango_layout(lg->area, NULL); -#else - pango_layout_set_width(lg->layout, - lg->area->allocation.width * PANGO_SCALE); + lg->area->allocation.width * PANGO_SCALE); gdk_draw_layout(GDK_DRAWABLE(lg->buf), lg->trace, 2, position, - lg->layout); -#endif + lg->layout); g_free(tmp); } static void _draw(LoadGraph * lg) { -#if GTK_CHECK_VERSION(3, 0, 0) - void *draw = NULL; /* not used by cairo */ -#else GdkDrawable *draw = GDK_DRAWABLE(lg->buf); -#endif gint i, d; /* clears the drawing area */ -#if GTK_CHECK_VERSION(3, 0, 0) - cairo_rectangle(lg->fill, 0, 0, lg->width, lg->height); - cairo_fill (lg->fill); -#else gdk_draw_rectangle(draw, lg->area->style->black_gc, - TRUE, 0, 0, lg->width, lg->height); -#endif + TRUE, 0, 0, lg->width, lg->height); /* the graph */ @@ -306,20 +226,15 @@ static void _draw(LoadGraph * lg) points[0].y = points[i].y = lg->height; points[i].x = points[i - 1].x = lg->width; -#if GTK_CHECK_VERSION(3, 0, 0) - /* TODO:GTK3 draw using loop and _draw_line() */ -#else gdk_draw_polygon(draw, lg->fill, TRUE, points, lg->size + 1); gdk_draw_polygon(draw, lg->trace, FALSE, points, lg->size + 1); -#endif g_free(points); /* vertical bars */ for (i = lg->width, d = 0; i > 1; i--, d++) - if ((d % 45) == 0 && d) { - _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); @@ -327,28 +242,6 @@ static void _draw(LoadGraph * lg) _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; - - _draw_line(draw, lg->fill, i4, this, i4, lg->height); - _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; - - _draw_line(draw, lg->trace, i4, this, i4 + 2, - (this + next) / 2); - _draw_line(draw, lg->trace, i4 + 2, (this + next) / 2, - i4 + 4, next); - } -#endif - gtk_widget_queue_draw(lg->area); } @@ -359,7 +252,7 @@ void load_graph_update_ex(LoadGraph *lg, guint line, gdouble value) load_graph_update(lg, value); } -void load_graph_update(LoadGraph *lg, gdouble v) +void load_graph_update(LoadGraph * lg, gdouble v) { gint i; gint value = (gint)v; @@ -377,14 +270,14 @@ void load_graph_update(LoadGraph *lg, gdouble v) /* calculates the maximum value */ if (lg->remax_count++ > 20) { - /* only finds the maximum amongst the data every 20 times */ - lg->remax_count = 0; + /* 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]; - } + 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 { @@ -405,53 +298,3 @@ gint load_graph_get_height(LoadGraph *lg) { return lg->height; return 0; } - - -#ifdef LOADGRAPH_UNIT_TEST -gboolean lg_update(gpointer d) -{ - LoadGraph *lg = (LoadGraph *) d; - - static int i = 0; - static int j = 1; - - if (i > 150) { - j = -1; - } else if (i < 0) { - j = 1; - } - - i += j; - if (rand() % 10 > 8) - i *= 2; - if (rand() % 10 < 2) - i /= 2; - load_graph_update(lg, i + rand() % 50); - - return TRUE; -} - -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 |