Objetos por defecto

GnomeCanvas trae consigo una serie de objetos por defecto para crear elipses, rectángulos, polígonos, imágenes e incluso incrustar otros widgets en el canvas.

Todos los objetos tienen una serie de parámetros que modifican su representación en el canvas. Estos parámetros se pueden poner en la llamada a gnome_canvas_item_new, y pueden ser cambiados en cualquier momento con gnome_canvas_item_set. La asignación de valores a los parámetros es igual que en GObject con g_object_set.

GnomeCanvasItem* gnome_canvas_item_new(parent,  
 type,  
 first_arg_name,  
 ); 
GnomeCanvasGroup*  parent;
GType  type;
const gchar*  first_arg_name;
 ;
void gnome_canvas_item_set(item,  
 first_arg_name,  
 ); 
GnomeCanvasItem*  item;
const gchar*  first_arg_name;
 ;

Elipses y cuadrados

A través de los objetos GnomeCanvasRect y GnomeCanvasEllipse es posible dibujar rectángulos y elipses en el canvas. Para ambos objetos, la lista de parámetros es la misma. Los más importantes son

Tabla 1. Parámetros de GnomeCanvasRect y GnomeCanvasEllipse

NombreTipoDescripción
x1gdoubleLado izquierdo de la figura
y1gdoubleLado superior de la figura
x2gdoubleLado izquierdo de la figura
y2gdoubleLado derecho de la figura
outline_color_rgbaguint32Color RGBA del borde
outline_colorgchar*Nombre del color del borde
fill_color_rgbaguint32Color RGBA de relleno
fill_colorgchar*Nombre del color de relleno
width_unitsgdoubleAnchura del borde de la figura

Para crear una elipse se usa el valor devuelto por gnome_canvas_ellipse_get_type como segundo argumento de gnome_canvas_item_new. Para un rectángulo se usa gnome_canvas_rect_get_type.

GType gnome_canvas_ellipse_get_type (); 
 ;

GType gnome_canvas_rect_get_type ();
void;

Polígonos

Con GnomeCanvasPolygon es posible crear polígonos. Los puntos que definen la imagen del polígono se introducen con GnomeCanvasPoints.

GnomeCanvasPoints es una estructura que debe ser creada con gnome_canvas_points_new y, una vez pasada a GnomeCanvasPolygon, se libera con gnome_canvas_points_unref. Esta estructura posee un miembro double* coords, que se usa para guardar las coordenadas de los puntos.

typedef struct {
      double *coords;
      int num_points;
      int ref_count;
} GnomeCanvasPoints;
  
GnomeCanvasPoints* gnome_canvas_points_new(num_points); 
int  num_points;
void gnome_canvas_points_unref(points); 
GnomeCanvasPoints*  points;

Cuando se introducen puntos en coords, se alternan las coordenadas X e Y en cada punto, de modo que las x ocuparán los índices pares del array coords, mientras que las y ocuparán los índices impares.

Ejemplo 4. Uso de GnomeCanvasPoints

/*
 * Ejemplo: crear un polígono de 5 puntos e introducirlo en el
 * objeto polygon cuando se está creando.
 *
 * Las coordenadas son (x1, y1), (x2, y2), (x3, y3), (x4, y4) y (x5, y5)
 */

GnomeCanvasPoints* points = gnome_canvas_points_new(5); /* 5 puntos */

points->coords[0] = x1;
points->coords[1] = y1;
points->coords[2] = x2;
points->coords[3] = y2;
points->coords[4] = x3;
points->coords[5] = y3;
points->coords[6] = x4;
points->coords[7] = y4;
points->coords[8] = x5;
points->coords[9] = y5;

gnome_canvas_item_new(root_group,
        gnome_canvas_polygon_get_type (),
        "points", points,
        "fill_color", "black",
        "outline_color", "white",
        "width_units", 3.0,
        NULL);

/* Una vez pasados al polígno ya no son necesarios */
gnome_canvas_points_unref(points);
  

Los parámetros que definen GnomeCanvasPolygon son bastante parecidos a los objetos de las secciones anteriores. Los principales son

Tabla 2. Parámetros de GnomeCanvasPolygon

NombreTipoDescripción
pointsGnomeCanvasPoints*Lista de puntos que definen el polígono
outline_color_rgbaguint32Color RGBA del borde
outline_colorgchar*Nombre del color del borde
fill_color_rgbaguint32Color RGBA de relleno
fill_colorgchar*Nombre del color de relleno
width_unitsgdoubleAnchura del borde de la figura

Texto

GnomeCanvasText permite insertar texto en el canvas. El dibujo del texto se hace a través de Pango, por lo que no se explicarán aquí los detalles sobre las fuentes.

Todo el control sobre el texto se hace a través de sus parámetros.

Tabla 3. Parámetros GnomeCanvasText

NombreTipoDescripción
textgchar*La cadena de texto
markupgchar*Una cadena en el formato Pango markup
xdoubleCoordenada X donde dibujar el texto
ydoubleCoordenada Y donde dibujar el texto
fontgchar*Una cadena para describir la fuente
font_descPangoFontDescription*Puntero a PangoFontDescriptor
attributesPangoAttrList*Puntero a la lista de atributos de Pango
stylePangoStyleEstilo Pango
variantPangoVariantVariante Pango
weightintGrosor de la fuente
stretchPangoStretchEstiramiento de la fuente
sizeintTamaño (en pixels) de la fuente
size_pointsdoubleTamaño (en puntos) de la fuente
scaledoubleEscala
anchorGtkAnchorTypeForma de encuadrar el texto en el rectángulo del texto
justificationGtkJustificationJustificación para texto multilínea
clip_widthdoubleAnchura del rectángulo de recorte
clip_heightdoubleAlto del rectángulo de recorte
clipbooleanDetermina si usar o no un rectángulo de recorte
x_offsetdoubleDistancia desde el valor de la coordenada X
y_offsetdoubleDistancia desde el valor de la coordenada Y
fill_colorgchar*Nombre del color de relleno
fill_color_gdkGdkColor*Puntero a un GdkColor para relleno
fill_color_rgbaguintValor RGBA para rellenar el texto

Para crear un objeto GnomeCanvasText hay que usar el valor devuelto por gnome_canvas_text_get_type.

GType gnome_canvas_text_get_type();
void;

Líneas

Crear líneas con GnomeCanvasLine es muy similar a crear polígonos, ya que ambos usan GnomeCanvasPoints para definir las rutas, y comparten muchos parámetros en común.

Tabla 4. Parámetros de GnomeCanvasLine

NombreTipoDescripción
pointsGnomeCanvasPoints*Lista de puntos que definen las trayectorias de las líneas
fill_color_rgbaguint32Color RGBA de relleno
fill_colorgchar*Nombre del color de relleno
width_pixelsuintAnchura de la línea en pixels
width_unitsgdoubleAnchura de la línea en unidades del canvas

Para crear un objeto GnomeCanvasLine hay que usar el valor devuelto por gnome_canvas_line_get_type.

GType gnome_canvas_line_get_type();
void;

Imágenes

GnomeCanvasPixbuf permite añadir imágenes al canvas. Las imágenes se deben cargar en un GdkPixbuf, y luego pasarse a GnomeCanvasPixbuf.

Al igual que todos los objetos por defecto de GnomeCanvas, la configuración de GnomeCanvasPixbuf se hace por sus parámetros.

Tabla 5. Parámetros GnomeCanvasPixbuf

NombreTipoDescripción
pixbufGdkPixbuf*Imagen a mostrar
widthdoubleAnchura del rectángulo donde encuadrar la imagen
width_setbooleanAnchura de la imagen cuando se muestre en el canvas
heightdoubleAltura del rectángulo donde encuadrar la imagen
height_setbooleanAltura que tendrá que la imagen cuando se muestre en el canvas
xdoubleCoordenada X donde poner la imagen
ydoubleCoordenada X donde poner la imagen
anchorGtkAnchorTypeForma de encuadrar el texto en el rectángulo

La diferencia entre width_set y width es que width_set cambia la anchura de la imagen, de modo que la imagen se escala para adoptar el nuevo valor, mientras que width respeta las dimensiones de la imagen. Lo mismo pasa con height_set y height.

En el caso de width y height, anchor se usa para encajar la imagen cuando la anchura y la altura de la imagen es menor que la del rectángulo formado por los parámatros x, y, width y height.

Widgets

El GnomeCanvasWidget permite insertar widgets dentro del canvas. Los widgets son colocados en el propio GnomeCanvas, ya que éste deriva de GtkLayout.

Tabla 6. Parámetros de GnomeCanvasWidget

NombreTipoDescripción
widgetGtkWidget*Puntero al widget
xdoubleCoordenada X donde situar el widget
ydoubleCoordenada Y donde situal el widget
widthdoubleAnchura del widget
heightdoubleAltura del widget
anchorGtkAnchorTypeColocación del widget
size_pixelsbooleanSi es TRUE, los valores de width y height serán medidos en pixels

El valor de size_pixels determina el tipo de unidad a usar. Si es FALSE, los valores de width y height se medirán en unidades del canvas, por lo que si el canvas cambia de zoom, el widget se redimensionará. Si es TRUE, el widget no se redimensionará, manteniendo su aspecto aunque cambie el zoom del canvas.