Ejemplo sobre los objetos

En este ejemplo se muestra cómo poner varios objetos sobre el canvas. Para la imagen se ha escogido el fichero gnome.png y para el widget se ha creado un botón.

Figura 3. Objetos en el canvas

Objetos en el canvas

Ejemplo 5. Objetos en el canvas


#include <gnome.h>

int
main(int argc, char** argv)
{
        GtkWidget *window;
        GtkWidget *canvas;
        GtkWidget *button;
        GtkWidget *scrolled;
        GdkPixbuf *pixbuf;
        GnomeCanvasGroup *root;
        GnomeCanvasPoints *points;

        /* inicializamos las librerías */
        gnome_init("objects-canvas", "0.1", argc, argv);

        /* crear una ventana que contenga al canvas */
        window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        g_signal_connect(G_OBJECT(window), "destroy", gtk_main_quit, 0);

        /* ventana para tener barras de desplazamiento */
        scrolled = gtk_scrolled_window_new(NULL, NULL);
        gtk_container_add(GTK_CONTAINER(window), scrolled);

        /* canvas en modo RGB */
        canvas = gnome_canvas_new_aa();
        gtk_container_add(GTK_CONTAINER(scrolled), canvas);
        gnome_canvas_set_scroll_region(GNOME_CANVAS(canvas),
                        -10.0, -10.0, 400.0, 400.0);

        root = gnome_canvas_root(GNOME_CANVAS(canvas));

        /* un rectángulo simple */
        gnome_canvas_item_new(root,
                        gnome_canvas_rect_get_type(),
                        "x1", 50.0,
                        "y1", 50.0,
                        "x2", 100.0,
                        "y2", 100.0,
                        "fill_color_rgba", 0x00ffffff,
                        "outline_color", "black",
                        "width_units", 1.0,
                        NULL);

        /* círculo, con fondo semitransparente */
        gnome_canvas_item_new(root,
                        gnome_canvas_ellipse_get_type(),
                        "x1", 60.0,
                        "y1", 60.0,
                        "x2", 220.0,
                        "y2", 220.0,
                        "fill_color_rgba", 0x00ff0077,
                        "outline_color", "black",
                        "width_units", 2.0,
                        NULL);

        /* polígono con forma de V */
        points = gnome_canvas_points_new(6); /* 6 puntos */

        points->coords[0]  = 0;
        points->coords[1]  = 0;
        points->coords[2]  = 20;
        points->coords[3]  = 0;
        points->coords[4]  = 50;
        points->coords[5]  = 70;
        points->coords[6]  = 80;
        points->coords[7]  = 0;
        points->coords[8]  = 100;
        points->coords[9]  = 0;
        points->coords[10] = 50;
        points->coords[11] = 90;

        gnome_canvas_item_new(root,
                        gnome_canvas_polygon_get_type(),
                        "points", points,
                        "fill_color_rgba", 0xff444444,
                        "outline_color", "black",
                        "width_units", 1.0,
                        NULL);

        /* borrar los puntos */
        gnome_canvas_points_unref(points);

        /* Crear un objeto de texto sobre la figura */
        gnome_canvas_item_new(root,
                        gnome_canvas_text_get_type(),
                        "font", "Sans 10",
                        "markup", "GNOME2 <i>GnomeCanvas</i>\n<b>Prueba de texto</b>",
                        "fill_color", "black",
                        "x", 10.0,
                        "y", 160.0,
                        "anchor", GTK_ANCHOR_WEST,
                        NULL);

        /* Crear un botón con la etiqueta "Botón para GnomeCanvas" */
        button = gtk_button_new_with_label("Botón para GnomeCanvas");
        gnome_canvas_item_new(root,
                        gnome_canvas_widget_get_type(),
                        "widget", button,
                        "x", 10.0,
                        "y", 190.0,
                        "width", 200.0,
                        "height", 50.0,
                        NULL);

        /* Cargar la imagen del archivo gnome.png y ponerla en el canvas */
        pixbuf = gdk_pixbuf_new_from_file("gnome.png", NULL);
        gnome_canvas_item_new(root,
                        gnome_canvas_pixbuf_get_type(),
                        "pixbuf", pixbuf,
                        "x", 250.0,
                        "y", 50.0,
                        "width", 200.0,
                        "height", 200.0,
                        NULL);
        gdk_pixbuf_unref(pixbuf);

        /* mostrar los widgets creados y entrar en el bucle gtk_main */
        gtk_widget_show_all(window);
        gtk_main();
}