GDK básicamente es un envoltorio alrededor de funciones estándares de Xlib. Si tienes familiaridad con Xlib, te será fácil acostumbrarte a la mayoría de las funciones de GDK. Todas la funciones están escritas para proveer una manera de acceder a las funciones Xlib de una manera más fácil e intuitiva. Además, ya que GDK usa GLib (mirar abajo), será más portable y seguro de usar en múltiples plataformas.
Una de las cosas agradables sobre GDK, es que está basada sobre Xlib; esto también es un problema, especialmente en el área de administración de color. Si quieres usar color en tu programa (dibujar un rectángulo o algo así), tu código debe lucir algo como esto:
{
GdkColor *color;
int width, height;
GtkWidget *widget;
GdkGC *gc;
...
/* primero, crea un Contexto Gráfico para dibujar en él */
gc = gdk_gc_new(widget->window);
/* encontrar dimensiones apropiadas para el rectángulo */
gdk_window_get_size(widget->window, &width, &height);
/* el color que queremos utilizar */
color = (GdkColor *)malloc(sizeof(GdkColor));
/* rojo, verde, y azul son valores pasados, indicando la tripleta RGB
* del color que queremos dibujar. Nota que los valores de los
* componentes RGB dentro de GdkColor son tomados de 0 a 65536, no 0 a 255.
*/
color->red = red * (65535/255);
color->green = green * (65535/255);
color->blue = blue * (65535/255);
/* el valor de pixel indica el índice en el mapa de color del color.
* simplemente es una combinación de los valores RGB que asignamos
* anteriormente
*/
color->pixel = (gulong)(red*65536 + green*256 + blue);
/* Sin embargo, el valor de pixel sólo es verdaderamente válido en
* dispositivos de 24-bit (ColorVerdadero). Por lo tanto, esta llamada
* es requerida para que GDK y X puedan darnos el color más cercano
* disponible en el mapa de color
*/
gdk_color_alloc(gtk_widget_get_colormap(widget), color);
/* asignar la parte frontal a nuestro color */
gdk_gc_set_foreground(gc, color);
/* dibujar el rectángulo */
gdk_draw_rectangle(widget->window, gc, 1, 0, 0, width, height);
...
} |