Pixmap, fichier bitmap:
pavage d'un fond de fenêtre

/* pixmap.c */

/* choix de couleur et pixmap */

#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include "fond2"

GC      gc; 
Display *display; 
int     screen; 
Window  win, subwin, root; 
unsigned long black_pixel;  
Pixmap fond2;
XSetWindowAttributes attributs;
unsigned long masque_valeur;
Colormap palette;
XColor orange, violet, exact;

main() { 
  if ((display = XOpenDisplay ("")) == NULL) { 
    fprintf (stderr, "Can't open Display\n"); 
    exit (1); 
  } 
  gc = DefaultGC (display, screen); 
  screen = DefaultScreen (display); 
  root = RootWindow (display, screen); 
  black_pixel = BlackPixel (display, screen); 
  palette = DefaultColormap(display, screen);
  if (XAllocNamedColor(display, palette, "orange", &orange, &exact) == 0)
    exit(2);
  if (XAllocNamedColor(display, palette, "violet", &violet, &exact) == 0)
    exit(3);
  win = XCreateSimpleWindow (display, root,  
			     0, 0, 100, 100, 5, orange.pixel, violet.pixel); 
  XSelectInput (display, win, ExposureMask | ButtonPressMask); 
  XStoreName (display, win, "pixmap"); 
  fond2 = XCreatePixmapFromBitmapData(display, win, fond2_bits, fond2_width,
				     fond2_height, orange.pixel, violet.pixel,
				     DefaultDepth(display, screen) );
  XMapWindow (display, win); 
 
  for (;;) { 
    XEvent ev; 
    XNextEvent (display, &ev); 
    switch (ev.type) { 
    case Expose :
      XDrawString(display, win, gc, 10, 10, "Fluo !", 6);
      break; 
    case ButtonPress :
      XSetWindowBackgroundPixmap(display, win, fond2);
      XClearWindow(display, win);
      break;
    default : 
      break;            
    } 
  } 
} 

Execution :

Cliquez dans la fenêtre pour passer d'un fond de couleur uniforme à un fond "pavé" d'un motif bicolore.

Fonctionnement de ce programme :

Le fichier fond2 est un fichier bitmap. Comme il est "include", fond2_bits, fond2_width, fond2_height sont automatique définis ("define"). Vous pouvez le visualiser à l'aide de l'utilitaire bitmap, ou encore regarder sa définition avec un éditeur de texte classique.

DefaultColormap donne la palette par défaut. XAllocNamedColor
renvoie pour la définition de couleur donnée une couleur de la palette disponible la plus proche possible de la couleur demandée. Les définitions des couleurs sont dans /usr/X11R6/lib/X11/rgb.txt

XCreatePixmapFromBitmapData crée un pixmap à partir du bitmap en affectant une couleur aux bits 0 et une autre couleur aux bits 1.

XSetWindowBackgroundPixmap définit un fond au motif du pixmap pour la fenêtre.

Exercice :

 

programme suivant index général fonctions de la XLib événements types dans XLib