~ubuntu-branches/ubuntu/breezy/libgnomecanvas/breezy

« back to all changes in this revision

Viewing changes to demos/canvas-features.c

  • Committer: Bazaar Package Importer
  • Author(s): Sebastien Bacher
  • Date: 2004-09-13 22:40:39 UTC
  • Revision ID: james.westby@ubuntu.com-20040913224039-giftt9jhvyoorcuv
Tags: upstream-2.8.0
ImportĀ upstreamĀ versionĀ 2.8.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include <config.h>
 
2
#include <libgnomecanvas/libgnomecanvas.h>
 
3
#include "canvas_demo.h"
 
4
 
 
5
#ifndef GNOME_PAD_SMALL
 
6
#define GNOME_PAD_SMALL 4
 
7
#endif
 
8
 
 
9
/* Event handler for the item to be reparented.  When the user clicks on the item, it will be
 
10
 * reparented to another group.
 
11
 */
 
12
static gint
 
13
item_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data)
 
14
{
 
15
        GnomeCanvasItem *parent1;
 
16
        GnomeCanvasItem *parent2;
 
17
 
 
18
        if ((event->type != GDK_BUTTON_PRESS) || (event->button.button != 1))
 
19
                return FALSE;
 
20
 
 
21
        parent1 = g_object_get_data (G_OBJECT (item), "parent1");
 
22
        parent2 = g_object_get_data (G_OBJECT (item), "parent2");
 
23
 
 
24
        if (item->parent == parent1)
 
25
                gnome_canvas_item_reparent (item, GNOME_CANVAS_GROUP (parent2));
 
26
        else
 
27
                gnome_canvas_item_reparent (item, GNOME_CANVAS_GROUP (parent1));
 
28
 
 
29
        return TRUE;
 
30
}
 
31
 
 
32
GtkWidget *
 
33
create_canvas_features (void)
 
34
{
 
35
        GtkWidget *vbox;
 
36
        GtkWidget *w;
 
37
        GtkWidget *alignment;
 
38
        GtkWidget *frame;
 
39
        GtkWidget *canvas;
 
40
        GnomeCanvasItem *parent1;
 
41
        GnomeCanvasItem *parent2;
 
42
        GnomeCanvasItem *group;
 
43
        GnomeCanvasItem *item;
 
44
 
 
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);
 
48
 
 
49
        /* Instructions */
 
50
 
 
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);
 
53
        gtk_widget_show (w);
 
54
 
 
55
        /* Frame and canvas */
 
56
 
 
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);
 
60
 
 
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);
 
65
 
 
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);
 
71
 
 
72
        /* First parent and box */
 
73
 
 
74
        parent1 = gnome_canvas_item_new (gnome_canvas_root (GNOME_CANVAS (canvas)),
 
75
                                         gnome_canvas_group_get_type (),
 
76
                                         "x", 0.0,
 
77
                                         "y", 0,0,
 
78
                                         NULL);
 
79
 
 
80
        gnome_canvas_item_new (GNOME_CANVAS_GROUP (parent1),
 
81
                               gnome_canvas_rect_get_type (),
 
82
                               "x1", 0.0,
 
83
                               "y1", 0.0,
 
84
                               "x2", 200.0,
 
85
                               "y2", 200.0,
 
86
                               "fill_color", "tan",
 
87
                               NULL);
 
88
 
 
89
        /* Second parent and box */
 
90
 
 
91
        parent2 = gnome_canvas_item_new (gnome_canvas_root (GNOME_CANVAS (canvas)),
 
92
                                         gnome_canvas_group_get_type (),
 
93
                                         "x", 200.0,
 
94
                                         "y", 0,0,
 
95
                                         NULL);
 
96
 
 
97
        gnome_canvas_item_new (GNOME_CANVAS_GROUP (parent2),
 
98
                               gnome_canvas_rect_get_type (),
 
99
                               "x1", 0.0,
 
100
                               "y1", 0.0,
 
101
                               "x2", 200.0,
 
102
                               "y2", 200.0,
 
103
                               "fill_color", "#204060",
 
104
                               NULL);
 
105
 
 
106
        /* Big circle to be reparented */
 
107
 
 
108
        item = gnome_canvas_item_new (GNOME_CANVAS_GROUP (parent1),
 
109
                                      gnome_canvas_ellipse_get_type (),
 
110
                                      "x1", 10.0,
 
111
                                      "y1", 10.0,
 
112
                                      "x2", 190.0,
 
113
                                      "y2", 190.0,
 
114
                                      "outline_color", "black",
 
115
                                      "fill_color", "mediumseagreen",
 
116
                                      "width_units", 3.0,
 
117
                                      NULL);
 
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),
 
122
                          NULL);
 
123
 
 
124
        /* A group to be reparented */
 
125
 
 
126
        group = gnome_canvas_item_new (GNOME_CANVAS_GROUP (parent2),
 
127
                                       gnome_canvas_group_get_type (),
 
128
                                       "x", 100.0,
 
129
                                       "y", 100.0,
 
130
                                       NULL);
 
131
 
 
132
        gnome_canvas_item_new (GNOME_CANVAS_GROUP (group),
 
133
                               gnome_canvas_ellipse_get_type (),
 
134
                               "x1", -50.0,
 
135
                               "y1", -50.0,
 
136
                               "x2", 50.0,
 
137
                               "y2", 50.0,
 
138
                               "outline_color", "black",
 
139
                               "fill_color", "wheat",
 
140
                               "width_units", 3.0,
 
141
                               NULL);
 
142
        gnome_canvas_item_new (GNOME_CANVAS_GROUP (group),
 
143
                               gnome_canvas_ellipse_get_type (),
 
144
                               "x1", -25.0,
 
145
                               "y1", -25.0,
 
146
                               "x2", 25.0,
 
147
                               "y2", 25.0,
 
148
                               "fill_color", "steelblue",
 
149
                               NULL);
 
150
 
 
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),
 
155
                          NULL);
 
156
 
 
157
        /* Done */
 
158
 
 
159
        return vbox;
 
160
}