From 1598bd8e0e513838b96996a56358d91537dc90ac Mon Sep 17 00:00:00 2001 From: Nikita Zlobin Date: Mon, 9 May 2011 00:29:44 +0600 Subject: [PATCH] Module stuff is moved to structure; Add text caption; A little cleanup and refactoring; --- src/gtkgraph-demo.c | 91 +++++++++++++++++++++++++++++++++++------------------ 1 file changed, 61 insertions(+), 30 deletions(-) diff --git a/src/gtkgraph-demo.c b/src/gtkgraph-demo.c index bbd7805..76ec48a 100644 --- a/src/gtkgraph-demo.c +++ b/src/gtkgraph-demo.c @@ -20,6 +20,7 @@ #include #include #include +#include static gboolean on_module_buttonPress_event (GooCanvasItem * item, GooCanvasItem * target, GdkEventButton * event, gpointer data); static gboolean on_module_buttonRelease_event (GooCanvasItem * item, GooCanvasItem * target, GdkEventButton * event, gpointer data); @@ -36,30 +37,35 @@ GooCanvasItem * wire; typedef struct { GtkOrientation * orientation; - GooCanvasItem * box; + GooCanvasItem * box; /* Background */ GooCanvasItem * caption; + GooCanvasItem * group; /* Just a logical container, without any look */ GList * ports; /* Dragging data */ double drag_hold_x, drag_hold_y; unsigned drag_cb; -} GtkGraphNode; +} GModularGraph_Module; typedef struct { - GtkOrientation * orientation; GooCanvasItem * box; GooCanvasItem * text; -} GtkGraphPort; + + double wire_x, wire_y; + double direction; +} GModularGraph_Port; /* Canvas data */ GtkWidget * canvas; GooCanvasItem * root_item; double drag_hold_x = 0, drag_hold_y = 0; static unsigned drag_cb[2] = {0, 0}; +static double rounding = 3; -/* Modules data */ -static GooCanvasItem * item[2] = {NULL, NULL}; +static GModularGraph_Module * module[2] = {NULL, NULL}; + +GModularGraph_Module * g_modular_graph_module_new int main( int argc, char ** argv ) { @@ -79,36 +85,59 @@ int main( int argc, char ** argv ) gtk_widget_set_size_request (canvas, 600, 450); goo_canvas_set_bounds (GOO_CANVAS (canvas), 0, 0, 1000, 1000); g_object_set (G_OBJECT (canvas), "automatic-bounds", TRUE, NULL); - gtk_widget_show (canvas); + gtk_container_add (GTK_CONTAINER (scroller), canvas); - /* Fill canvas */ - double rounding = 5.0; + /* Root */ root_item = goo_canvas_get_root_item (GOO_CANVAS (canvas)); - - /* 1. Objects */ - - item[0] = goo_canvas_rect_new (root_item, - 10.5, 50.5, 50, 20, + g_object_set (G_OBJECT (root_item), "antialias", CAIRO_ANTIALIAS_SUBPIXEL, NULL); + g_object_set (G_OBJECT (root_item), "line-join", CAIRO_LINE_JOIN_ROUND, NULL); + g_object_set (G_OBJECT (root_item), "line-cap", CAIRO_LINE_CAP_ROUND, NULL); + g_object_set (G_OBJECT (root_item), "line-width", 1.0, NULL); + + /* Object 1 */ + { + module[0] = calloc (1, sizeof (GModularGraph_Module)); + module[0]->group = goo_canvas_group_new (root_item, NULL); + g_object_set (module[0]->group, "tooltip", "Group Test", NULL); + + module[0]->box = goo_canvas_rect_new (module[0]->group, + 0.5, 0.5, 50, 20, "radius-x", rounding, "radius-y", rounding, - "line-width", 1.0, "stroke-color", "gray60", "fill-color", "gray50", NULL); - g_signal_connect (G_OBJECT (item[0]), "button-press-event", G_CALLBACK (on_module_buttonPress_event), drag_cb); - g_signal_connect (G_OBJECT (item[0]), "button-release-event", G_CALLBACK (on_module_buttonRelease_event), drag_cb); - - item[1] = goo_canvas_rect_new (root_item, - 200.5, 10.5, 50, 20, + module[0]->caption = goo_canvas_text_new (module[0]->group, "Module 1", + rounding, 0, -1, GTK_ANCHOR_NORTH_WEST, + "font", "sans 8", NULL); + + g_signal_connect (G_OBJECT (module[0]->group), "button-press-event", G_CALLBACK (on_module_buttonPress_event), drag_cb); + g_signal_connect (G_OBJECT (module[0]->group), "button-release-event", G_CALLBACK (on_module_buttonRelease_event), drag_cb); + } + g_object_set (module[0]->group, "x", 10.0, "y", 10.0, NULL); + + /* Object 2 */ + { + module[1] = calloc (1, sizeof (GModularGraph_Module)); + module[1]->group = goo_canvas_group_new (root_item, NULL); + g_object_set (module[1]->group, "tooltip", "Group Test 2", NULL); + + module[1]->box = goo_canvas_rect_new (module[1]->group, + 0.5, 0.5, 50, 20, "radius-x", rounding, "radius-y", rounding, - "line-width", 10.0, "stroke-color", "gray60", "fill-color", "gray50", NULL); - g_signal_connect (G_OBJECT (item[1]), "button-press-event", G_CALLBACK (on_module_buttonPress_event), drag_cb + 1); - g_signal_connect (G_OBJECT (item[1]), "button-release-event", G_CALLBACK (on_module_buttonRelease_event), drag_cb + 1); + module[1]->caption = goo_canvas_text_new (module[1]->group, "Module 2", + rounding, 0, -1, GTK_ANCHOR_NORTH_WEST, + "font", "sans 8", NULL); + + g_signal_connect (G_OBJECT (module[1]->group), "button-press-event", G_CALLBACK (on_module_buttonPress_event), drag_cb); + g_signal_connect (G_OBJECT (module[1]->group), "button-release-event", G_CALLBACK (on_module_buttonRelease_event), drag_cb); + } + g_object_set (module[1]->group, "x", 200.0, "y", 10.0, NULL); /* 2. Connection */ char * wire_data = "M50,100 C100,100 50,200 100,200"; @@ -125,7 +154,7 @@ int main( int argc, char ** argv ) gtk_widget_set_has_tooltip (canvas, TRUE); g_object_set (wire, "tooltip", "Wire Test", NULL); - + gtk_widget_show_all (win); gtk_main (); return 0; @@ -163,14 +192,16 @@ gboolean on_module_dragged (GooCanvasItem * item, GooCanvasItem * target, GdkEve //if (lw != trunc (lw)) //x[i] += 0.5, y[i] += 0.5; - if (event->x < drag_hold_x) - g_object_set (G_OBJECT (data), "x", 0.5, NULL); - else + + + //if (event->x < drag_hold_x) + //g_object_set (G_OBJECT (data), "x", 0.5, NULL); + //else g_object_set (G_OBJECT (data), "x", event->x - drag_hold_x, NULL); - if (event->y < drag_hold_y) - g_object_set (G_OBJECT (data), "y", 0.5, NULL); - else + //if (event->y < drag_hold_y) + //g_object_set (G_OBJECT (data), "y", 0.5, NULL); + //else g_object_set (G_OBJECT (data), "y", event->y - drag_hold_y, NULL); return TRUE; -- 2.11.4.GIT