2
#include <libgnomecanvas/libgnomecanvas.h>
3
#include "canvas_demo.h"
5
#ifndef GNOME_PAD_SMALL
6
#define GNOME_PAD_SMALL 4
9
/* Event handler for the item to be reparented. When the user clicks on the item, it will be
10
* reparented to another group.
13
item_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data)
15
GnomeCanvasItem *parent1;
16
GnomeCanvasItem *parent2;
18
if ((event->type != GDK_BUTTON_PRESS) || (event->button.button != 1))
21
parent1 = g_object_get_data (G_OBJECT (item), "parent1");
22
parent2 = g_object_get_data (G_OBJECT (item), "parent2");
24
if (item->parent == parent1)
25
gnome_canvas_item_reparent (item, GNOME_CANVAS_GROUP (parent2));
27
gnome_canvas_item_reparent (item, GNOME_CANVAS_GROUP (parent1));
33
create_canvas_features (void)
40
GnomeCanvasItem *parent1;
41
GnomeCanvasItem *parent2;
42
GnomeCanvasItem *group;
43
GnomeCanvasItem *item;
45
vbox = gtk_vbox_new (FALSE, GNOME_PAD_SMALL);
46
gtk_container_set_border_width (GTK_CONTAINER (vbox), GNOME_PAD_SMALL);
47
gtk_widget_show (vbox);
51
w = gtk_label_new ("Reparent test: click on the items to switch them between parents");
52
gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 0);
55
/* Frame and canvas */
57
alignment = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
58
gtk_box_pack_start (GTK_BOX (vbox), alignment, FALSE, FALSE, 0);
59
gtk_widget_show (alignment);
61
frame = gtk_frame_new (NULL);
62
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
63
gtk_container_add (GTK_CONTAINER (alignment), frame);
64
gtk_widget_show (frame);
66
canvas = gnome_canvas_new ();
67
gtk_widget_set_size_request (canvas, 400, 200);
68
gnome_canvas_set_scroll_region (GNOME_CANVAS (canvas), 0, 0, 400, 200);
69
gtk_container_add (GTK_CONTAINER (frame), canvas);
70
gtk_widget_show (canvas);
72
/* First parent and box */
74
parent1 = gnome_canvas_item_new (gnome_canvas_root (GNOME_CANVAS (canvas)),
75
gnome_canvas_group_get_type (),
80
gnome_canvas_item_new (GNOME_CANVAS_GROUP (parent1),
81
gnome_canvas_rect_get_type (),
89
/* Second parent and box */
91
parent2 = gnome_canvas_item_new (gnome_canvas_root (GNOME_CANVAS (canvas)),
92
gnome_canvas_group_get_type (),
97
gnome_canvas_item_new (GNOME_CANVAS_GROUP (parent2),
98
gnome_canvas_rect_get_type (),
103
"fill_color", "#204060",
106
/* Big circle to be reparented */
108
item = gnome_canvas_item_new (GNOME_CANVAS_GROUP (parent1),
109
gnome_canvas_ellipse_get_type (),
114
"outline_color", "black",
115
"fill_color", "mediumseagreen",
118
g_object_set_data (G_OBJECT (item), "parent1", parent1);
119
g_object_set_data (G_OBJECT (item), "parent2", parent2);
120
g_signal_connect (item, "event",
121
G_CALLBACK (item_event),
124
/* A group to be reparented */
126
group = gnome_canvas_item_new (GNOME_CANVAS_GROUP (parent2),
127
gnome_canvas_group_get_type (),
132
gnome_canvas_item_new (GNOME_CANVAS_GROUP (group),
133
gnome_canvas_ellipse_get_type (),
138
"outline_color", "black",
139
"fill_color", "wheat",
142
gnome_canvas_item_new (GNOME_CANVAS_GROUP (group),
143
gnome_canvas_ellipse_get_type (),
148
"fill_color", "steelblue",
151
g_object_set_data (G_OBJECT (group), "parent1", parent1);
152
g_object_set_data (G_OBJECT (group), "parent2", parent2);
153
g_signal_connect (group, "event",
154
G_CALLBACK (item_event),