1<?xml version="1.0"?>
2<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
3               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" []>
4<refentry id="goocanvas-model-view-canvas">
5  <refmeta>
6    <refentrytitle>Model/View Canvas Example</refentrytitle>
7    <manvolnum>3</manvolnum>
8    <refmiscinfo>GOOCANVAS Library</refmiscinfo>
9  </refmeta>
10
11  <refnamediv>
12    <refname>Model/View Canvas Example</refname>
13    <refpurpose>how to create a model/view canvas.</refpurpose>
14  </refnamediv>
15
16  <refsect1 id="model-view-overview">
17    <title>Model View Canvas Example</title>
18    <para>
19    Here's a complete example application that creates a model-view #GooCanvas
20    with a rectangle and a text item in it.
21    </para>
22
23<informalexample><programlisting>
24  &num;include &lt;stdlib.h&gt;
25  &num;include &lt;goocanvas.h&gt;
26
27
28  static gboolean on_rect_button_press (GooCanvasItem  *view,
29                                        GooCanvasItem  *target,
30                                        GdkEventButton *event,
31                                        gpointer        data);
32
33  static gboolean on_delete_event      (GtkWidget      *window,
34                                        GdkEvent       *event,
35                                        gpointer        unused_data);
36
37
38  int
39  main (int argc, char *argv[])
40  {
41    GtkWidget *window, *scrolled_win, *canvas;
42    GooCanvasItemModel *root, *rect_model, *text_model;
43    GooCanvasItem *rect_item;
44
45    /&ast; Initialize GTK+. &ast;/
46    gtk_set_locale&nbsp;();
47    gtk_init (&amp;argc, &amp;argv);
48
49    /&ast; Create the window and widgets. &ast;/
50    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
51    gtk_window_set_default_size (GTK_WINDOW (window), 640, 600);
52    gtk_widget_show (window);
53    g_signal_connect (window, "delete_event", (GtkSignalFunc) on_delete_event,
54                      NULL);
55
56    scrolled_win = gtk_scrolled_window_new (NULL, NULL);
57    gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_win),
58                                         GTK_SHADOW_IN);
59    gtk_widget_show (scrolled_win);
60    gtk_container_add (GTK_CONTAINER (window), scrolled_win);
61
62    canvas = goo_canvas_new&nbsp;();
63    gtk_widget_set_size_request (canvas, 600, 450);
64    goo_canvas_set_bounds (GOO_CANVAS (canvas), 0, 0, 1000, 1000);
65    gtk_widget_show (canvas);
66    gtk_container_add (GTK_CONTAINER (scrolled_win), canvas);
67
68    root = goo_canvas_group_model_new (NULL, NULL);
69
70    /&ast; Add a few simple items. &ast;/
71    rect_model = goo_canvas_rect_model_new (root, 100, 100, 400, 400,
72                                            "line-width", 10.0,
73                                            "radius-x", 20.0,
74                                            "radius-y", 10.0,
75                                            "stroke-color", "yellow",
76                                            "fill-color", "red",
77                                            NULL);
78
79    text_model = goo_canvas_text_model_new (root, "Hello World", 300, 300, -1,
80                                            GTK_ANCHOR_CENTER,
81                                            "font", "Sans 24",
82                                            NULL);
83    goo_canvas_item_model_rotate (text_model, 45, 300, 300);
84
85    goo_canvas_set_root_item_model (GOO_CANVAS (canvas), root);
86
87    /&ast; Connect a signal handler for the rectangle item. &ast;/
88    rect_item = goo_canvas_get_item (GOO_CANVAS (canvas), rect_model);
89    g_signal_connect (rect_item, "button_press_event",
90                      (GtkSignalFunc) on_rect_button_press, NULL);
91
92    /&ast; Pass control to the GTK+ main event loop. &ast;/
93    gtk_main&nbsp;();
94
95    return 0;
96  }
97
98
99  /&ast; This handles button presses in item views. We simply output a message to
100     the console. &ast;/
101  static gboolean
102  on_rect_button_press (GooCanvasItem  *item,
103                        GooCanvasItem  *target,
104                        GdkEventButton *event,
105                        gpointer        data)
106  {
107    g_print ("rect item received button press event\n");
108    return TRUE;
109  }
110
111
112  /&ast; This is our handler for the "delete-event" signal of the window, which
113     is emitted when the 'x' close button is clicked. We just exit here. &ast;/
114  static gboolean
115  on_delete_event (GtkWidget *window,
116                   GdkEvent  *event,
117                   gpointer   unused_data)
118  {
119    exit (0);
120  }
121 </programlisting></informalexample>
122  </refsect1>
123</refentry>
124