gdk es básicamente una envoltura alrededor de las llamadas a funciones Xlib. Si estás familiarizado con Xlib, muchas de las funciones en gdk requerirán poco o ningún tiempo para acostumbrarse. Todas las funciones están escritas para proporcionar una manera fácil de acceder a las funciones Xlib en una manera un poco más intuitiva. Adicionalmente, ya que gdk utiliza glib (vea abajo), será más portable y seguro de utilizar en múltiples plataformas.
Una de las cosas agradables de GDK es que está basado sobre Xlib; esto también es un problema, especialmente en el área de administración de colores. Si usted quiere utilizar color en su programa (dibujando un rectángulo o algo por el estilo, su código debe lucir algo así:
{
GdkColor *color;
int width, height;
GtkWidget *widget;
GdkGC *gc;
...
/* primero, cree un GC (contexto grafico) en el cual dibujar */
gc = gdk_gc_new(widget->window);
/* encuentre las dimensiones correctas para el rectangulo */
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 el trio RGB
* del color que queremos dibujar. Note que los valores de los componentes
* RGB dentro de GdkColor son tomados de 0 a 65535, no de 0 a 255.
*/
color->red = red * (65535/255);
color->green = green * (65535/255);
color->blue = blue * (65535/255);
/* el valor de pixel indica el indice en el mapa de colores del color.
* simplemente es una combinacion de los valores RGB colocados anteriormente
*/
color->pixel = (gulong)(red*65536 + green*256 + blue);
/* Sin embargo, el valor de pixel es solo valido en dispositivos de 24-bit
* (color verdadero). Por lo tanto, esta llamada es requerida para que GDK
* y X puedan darnos el color mas cercano disponible en el mapa de colores
*/
gdk_color_alloc(gtk_widget_get_colormap(widget), color);
/* colocar la parte delantera a nuestro color */
gdk_gc_set_foreground(gc, color);
/* dibujar el rectangulo*/
gdk_draw_rectangle(widget->window, gc, 1, 0, 0, width, height);
...
}