Next Previous Contents

5. Acerca de gdk

5.1 ¿Qué es gdk?

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.

5.2 ¿Cómo utilizo la asignación de colores?

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);

  ...
}


Next Previous Contents