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 #include <stdlib.h> 25 #include <goocanvas.h> 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 /* Initialize GTK+. */ 46 gtk_set_locale (); 47 gtk_init (&argc, &argv); 48 49 /* Create the window and widgets. */ 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 (); 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 /* Add a few simple items. */ 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 /* Connect a signal handler for the rectangle item. */ 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 /* Pass control to the GTK+ main event loop. */ 93 gtk_main (); 94 95 return 0; 96 } 97 98 99 /* This handles button presses in item views. We simply output a message to 100 the console. */ 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 /* 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. */ 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