Creer un curseur

/* cursor.c */

/*  pixmap pour cursor*/

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

GC      gc; 
Display *display; 
int     screen; 
Window  win, root; 
unsigned long black_pixel, white_pixel;  
Pixmap masque, curse;
Colormap palette;
XColor orange, vert, exact;
Cursor cursor;

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); 
  white_pixel = WhitePixel (display, screen); 
  palette = DefaultColormap(display, screen);
  if (XAllocNamedColor(display, palette, "orange", &orange, &exact) == 0)
    exit(2);
  if (XAllocNamedColor(display, palette, "green", &vert, &exact) == 0)
    exit(3);
  win = XCreateSimpleWindow (display, root,  
			     0, 0, 100, 100, 5, black_pixel, white_pixel); 
  XSelectInput (display, win, ExposureMask); 
  XStoreName (display, win, "cursor"); 
  masque = XCreateBitmapFromData(display, win, masque_bits, 
			    masque_width, masque_height);
  curse = XCreateBitmapFromData(display, win, curse_bits, 
			    curse_width, curse_height);
  XMapWindow (display, win); 
  cursor = XCreatePixmapCursor(display, curse, masque, &orange, &vert, 
			       curse_x_hot, curse_y_hot);
  XDefineCursor(display, win, cursor);

  for (;;) { 
    XEvent ev; 
    XNextEvent (display, &ev); 
    switch (ev.type) { 
    case Expose :
      XDrawString (display, win, gc, 10, 20, "joli curseur !", 14); 
      break; 
    default : 
      break;            
    } 
  } 
} 

Execution :

Dans la fenêtre, admirez ce nouveau curseur ! Regardez le curseur, son "hotspot" ainsi que le masque à l'aide de l'utilitaire bitmap.

Fonctionnement de ce programme :

XCreateBitmapFromData permet de créer un pixmap de profondeur 1 à partir d'un fichier bitmap "include".

XCreatePixmapCursor crée le curseur à partir d'un bitmap dessinant le curseur, des coordonnées du "hotspot", des couleurs d'avant et d'arrière plan, et d'un bitmap masque qui définit la zone de dessin du curseur. Cette dernière est généralement plus large de un point tout autour de la forme du curseur : ce qui évite de le perdre de vue lorsqu'il passe sur une surface de même couleur que lui.

Exercice :

Avec l'utilitaire bitmap, changez de curseur, son hotspot et son masque.

 

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