5 de Febrero 2005

Soporte de primitivas

Ya tenemos disponible T-Gtk soportando primitivas gráficas.
No he podido resistir acabar una cosa que tenia hace tiempo pendiente, y no encontraba tiempo para ello.
Este sábado me he puesto esta tarde , y he terminado la primera hornada
de funciones de GTK para primitivas.

Desde arcos, rectangulos, hasta imagenes , texto, etc.... todo dibujando sobre
el widget gtk_drawing_area.

Dicho widget nos brinda una superficie para poder 'imprimir' , sobretodo, primitivas gráficas.

Pero , para poder enseñar en la superficie lo que tengamos pensado mostrar,
necesitamos hacerlo en el evento expose_event.

En dicho evento , recogeremos el widget de gtk_drawing_area que nos viene como
parámetro a la función que haremos que 'pinte' lo que nos interese.

Sale del proposito de este blog explicar cada funcion gdk_() disponible para realizar
primitivas gráficas, asi que no comentaré nada sobre como mostrar arcos, etc..,
teneis la documentación de gtk disponible en Intenet, ahi podeis consultar cualquier
tipo de duda o en su defecto , en cuanto publique la próxima revision de T-Gtk,
tendréis disponible el código fuente.


Por cierto, todo es controlado a nivel de Harbour, y me gustaria mostraros un par de lineas de ejemplo:

Funcion Dibuja( widget )

// contexto gráfico
gc = gdk_gc_new( widget )

// Propiedades de linea
gdk_gc_set_line_attributes(gc,;
5,; /* grosor */
GDK_LINE_DOUBLE_DASH,; /* tipo de línea (sólida en este caso) */
GDK_CAP_PROJECTING,; /* terminación (redondeada en este caso) */
GDK_JOIN_ROUND) /* unión de trazos (redondeado en este caso) */

aMiColor := { 0, 0XFFFF, 0, 0 }
colormap := gtk_widget_get_colormap( widget )
gdk_colormap_alloc_color( colormap, color,;
FALSE,; /* sólo lectura, para poder compartirlo */
TRUE ) /* si no lo puede reservar, pide uno parecido */
gdk_gc_set_foreground( gc, color )
gdk_draw_line( widget,; /* área en donde dibujar */
gc,; /* contexto gráfico a utilizar */
1, 1,; /* (x, y) inicial */
200, 200) /* (x, y) final */

...ETC....
...ETC....

g_object_unref( gc )

Return Nil

Si observais esas lineas de código, la unica diferencia con respecto a C es que
en vez de pasar estructuras de color, lo sustuimos por un simple array,
aMiColor, donde cada posicion es un miembro de la estructura GdkColor, de
esta manera conseguimos un parecido lo mas aproximado a C.

Pero, basta ya de tanto teoria y vamos haber el resultado:
drawing.jpg

Por cierto, fijaos en las transparencia que realiza el solito, tanto la imagen, de logo de glade.png asi como el resto de primitivas.


Saludos.
Rafa Carmona

Escrito por Rafa Carmona a las 5 de Febrero 2005 a las 11:41 PM
Comentarios
Escribir un comentario









¿Recordar informacion personal?