Pixmap : création et manipulation

/* pixmap3.c */

/* ecrire dans un pixmap, et copier son contenu */

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

GC      gc; 
Display *display; 
int     screen; 
Window  win, root; 
unsigned long white_pixel, black_pixel;  
Pixmap pix;
int prof;

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); 
  white_pixel = WhitePixel (display, screen); 
  black_pixel = BlackPixel (display, screen); 
  win = XCreateSimpleWindow (display, root,  
			     0, 0, 300, 300, 5, black_pixel, white_pixel); 
  XSelectInput (display, win, ExposureMask | ButtonPressMask); 
  XStoreName (display, win, "pixmap3"); 
  prof = XDefaultDepth (display, screen);
  pix = XCreatePixmap (display, root, 100, 40, prof);  
  XMapWindow (display, win);
  XSync (display, 0);
  XCopyArea (display, win, pix, gc, 0, 0, 100, 40, 0, 0); 
  XDrawRectangle(display, pix, gc, 5, 5, 90, 30);
  XDrawString (display, pix, gc, 10, 25, "    PIXMAP        ", 17);

  for (;;) { 
    XEvent ev; 
    XNextEvent (display, &ev); 
    switch (ev.type) { 
    case Expose : 
      break; 
    case ButtonPress  : 
      XCopyArea (display, pix, win, gc, 0, 0, 100, 40, ev.xbutton.x,
		 ev.xbutton.y);
      break; 
    default : 
      break;            
    } 
  } 
} 
 

Execution :

Cliquez dans la fenêtre pour recopier le contenu du pixmap dans la fenêtre.

Fonctionnement de ce programme :

XCreatePixmap crée un pixmap, dans lequel le programme écrit "PIXMAP" et dessine un rectangle, comme dans une fenêtre.

Pour "avoir un fond blanc" dans le pixmap, le programme recopie le fond blanc de la fenêtre. XSync permets de s'assurer qu'elle est bien dessinée avant de faire la recopie.

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