static void create_canvas (GtkGrid *grid, gint row, gchar *text, gchar *id) { GtkWidget *label, *canvas; GooCanvasItem *root, *rect; char *view_id; label = gtk_label_new (text); gtk_grid_attach (grid, label, 0, row, 1, 1); gtk_widget_show (label); canvas = goo_canvas_new (); gtk_widget_set_size_request (canvas, 200, 100); goo_canvas_set_bounds (GOO_CANVAS (canvas), 0, 0, 200, 100); gtk_grid_attach (grid, canvas, 1, row, 1, 1); gtk_widget_show (canvas); root = goo_canvas_get_root_item (GOO_CANVAS (canvas)); rect = goo_canvas_rect_new (root, 0, 0, 200, 100, "stroke-pattern", NULL, "fill-color", "yellow", NULL); view_id = g_strdup_printf ("%s-yellow", id); g_object_set_data_full (G_OBJECT (rect), "id", view_id, g_free); setup_item_signals (rect); rect = goo_canvas_rect_new (root, 20, 20, 60, 60, "stroke-pattern", NULL, "fill-color", "blue", NULL); view_id = g_strdup_printf ("%s-blue", id); g_object_set_data_full (G_OBJECT (rect), "id", view_id, g_free); setup_item_signals (rect); rect = goo_canvas_rect_new (root, 120, 20, 60, 60, "stroke-pattern", NULL, "fill-color", "red", NULL); view_id = g_strdup_printf ("%s-red", id); g_object_set_data_full (G_OBJECT (rect), "id", view_id, g_free); setup_item_signals (rect); }
static void create_events_area (GtkWidget *canvas, gint area_num, GooCanvasPointerEvents pointer_events, gchar *label) { gint row = area_num / 3, col = area_num % 3; gdouble x = col * 200, y = row * 150; GooCanvasItem *root, *rect; char *view_id; GooCanvasLineDash *dash; root = goo_canvas_get_root_item (GOO_CANVAS (canvas)); dash = goo_canvas_line_dash_new (2, 5.0, 5.0); /* Create invisible item. */ rect = goo_canvas_rect_new (root, x + 45, y + 35, 30, 30, "fill-color", "red", "visibility", GOO_CANVAS_ITEM_INVISIBLE, "line-width", 5.0, "pointer-events", pointer_events, NULL); view_id = g_strdup_printf ("%s invisible", label); g_object_set_data_full (G_OBJECT (rect), "id", view_id, g_free); setup_item_signals (rect); /* Display a thin rect around it to indicate it is there. */ #if 1 rect = goo_canvas_rect_new (root, x + 42.5, y + 32.5, 36, 36, "line-dash", dash, "line-width", 1.0, "stroke-color", "gray", NULL); #endif /* Create unpainted item. */ rect = goo_canvas_rect_new (root, x + 85, y + 35, 30, 30, "stroke-pattern", NULL, "line-width", 5.0, "pointer-events", pointer_events, NULL); view_id = g_strdup_printf ("%s unpainted", label); g_object_set_data_full (G_OBJECT (rect), "id", view_id, g_free); setup_item_signals (rect); /* Display a thin rect around it to indicate it is there. */ #if 1 rect = goo_canvas_rect_new (root, x + 82.5, y + 32.5, 36, 36, "line-dash", dash, "line-width", 1.0, "stroke-color", "gray", NULL); #endif /* Create stroked item. */ rect = goo_canvas_rect_new (root, x + 125, y + 35, 30, 30, "line-width", 5.0, "pointer-events", pointer_events, NULL); view_id = g_strdup_printf ("%s stroked", label); g_object_set_data_full (G_OBJECT (rect), "id", view_id, g_free); setup_item_signals (rect); /* Create filled item. */ rect = goo_canvas_rect_new (root, x + 60, y + 75, 30, 30, "fill-color", "red", "stroke-pattern", NULL, "line-width", 5.0, "pointer-events", pointer_events, NULL); view_id = g_strdup_printf ("%s filled", label); g_object_set_data_full (G_OBJECT (rect), "id", view_id, g_free); setup_item_signals (rect); /* Create stroked & filled item. */ rect = goo_canvas_rect_new (root, x + 100, y + 75, 30, 30, "fill-color", "red", "line-width", 5.0, "pointer-events", pointer_events, NULL); view_id = g_strdup_printf ("%s stroked & filled", label); g_object_set_data_full (G_OBJECT (rect), "id", view_id, g_free); setup_item_signals (rect); goo_canvas_text_new (root, label, x + 100, y + 130, -1, GOO_CANVAS_ANCHOR_CENTER, "font", "Sans 12", "fill-color", "blue", NULL); goo_canvas_line_dash_unref (dash); }
GtkWidget * create_canvas_fifteen (void) { GtkWidget *vbox; GtkWidget *alignment; GtkWidget *frame; GtkWidget *canvas; GtkWidget *button; GooCanvasItem **board; GooCanvasItem *root, *rect, *text; int i, x, y; char buf[20]; vbox = gtk_vbox_new (FALSE, 4); gtk_container_set_border_width (GTK_CONTAINER (vbox), 4); gtk_widget_show (vbox); alignment = gtk_alignment_new (0.5, 0.5, 0.0, 0.0); gtk_box_pack_start (GTK_BOX (vbox), alignment, TRUE, TRUE, 0); gtk_widget_show (alignment); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN); gtk_container_add (GTK_CONTAINER (alignment), frame); gtk_widget_show (frame); /* Create the canvas and board */ canvas = goo_canvas_new (); g_object_set (G_OBJECT (canvas), "automatic-bounds", TRUE, "bounds-from-origin", FALSE, NULL); root = goo_canvas_get_root_item (GOO_CANVAS (canvas)); gtk_widget_set_size_request (canvas, PIECE_SIZE * 4 + 1, PIECE_SIZE * 4 + 1); #if 0 goo_canvas_set_bounds (GOO_CANVAS (canvas), 0, 0, PIECE_SIZE * 4 + 1, PIECE_SIZE * 4 + 1); #endif gtk_container_add (GTK_CONTAINER (frame), canvas); gtk_widget_show (canvas); board = g_new (GooCanvasItem *, 16); g_object_set_data (G_OBJECT (canvas), "board", board); g_signal_connect (canvas, "destroy", G_CALLBACK (free_stuff), board); for (i = 0; i < 15; i++) { y = i / 4; x = i % 4; board[i] = goo_canvas_group_new (root, NULL); goo_canvas_item_translate (board[i], x * PIECE_SIZE, y * PIECE_SIZE); setup_item_signals (board[i]); rect = goo_canvas_rect_new (board[i], 0, 0, PIECE_SIZE, PIECE_SIZE, "fill_color", get_piece_color (i), "stroke_color", "black", "line-width", 1.0, NULL); sprintf (buf, "%d", i + 1); text = goo_canvas_text_new (board[i], buf, PIECE_SIZE / 2.0, PIECE_SIZE / 2.0, -1, GTK_ANCHOR_CENTER, "font", "Sans bold 24", "fill_color", "black", NULL); g_object_set_data (G_OBJECT (board[i]), "text", text); g_object_set_data (G_OBJECT (board[i]), "piece_num", GINT_TO_POINTER (i)); g_object_set_data (G_OBJECT (board[i]), "piece_pos", GINT_TO_POINTER (i)); } board[15] = NULL; /* Scramble button */ button = gtk_button_new_with_label ("Scramble"); gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); g_object_set_data (G_OBJECT (button), "board", board); g_signal_connect (button, "clicked", G_CALLBACK (scramble), canvas); gtk_widget_show (button); return vbox; }