Lorsque l’écran est locké ( fermé ), des images, des dessins, ou des animations sont affichées servant de screensaver évitant la dégradation du phosphore.
Xlock fut développé chez Sun Micro System par Pack J Naughton.David Bagley l’a repris et maintenu sous le nom de Xlockmore dans lequel d’innombrable mode ont été ajouté, ainsi que la possibilité d’afficher un mode dans une fenêtre et aussi sur la root window ou d’afficher sequentiellement plusieur mode par l’option random et par l’appuis du bouton du millieu.
Il existe des terminaux X avec plusieur ecrans gere par un seul terminal, alors le même mode s’affichera sur plusieur ecran. On peut toutefois faire des effets, comme une balle passant de lui a l’autre.
Cette fonction ne doit pas prendre beaucoup de ressources surtout si elle a plusieurs ecrans a s’occuper.
Cette fonction peut etre appele dans deux contextes différents: plein écran ou en version icon. La fonction MI_WIN_IS_ICONIC vous dira dans quelle contexte on se trouve. la fonction init_mode est toujours appelle avant la fonction callback. On peut choisir de faire quelque chose a chaque appel, ou de compter le nombre d’appel, et puis de modifier l’ecran periodiquement.
Dans cette fonction, il faut désallouer la mémoire, X ressource, Pixmaps et graphics context.
Cet fonction est appele lorsque que l’on change de mode par l’appuie du boutton du millieu. Il est laisse a l’imagination de chacun en ce qui la conserne.
Le temps entre chaque appelle de fonctions est en milliseconde.
« extern ModeHook init_fadeplot;
extern ModeHook draw_fadeplot;
extern ModeHook release_fadeplot;
extern ModeHook refresh_fadeplot; »
les fonctions qui vont être créés.
« extern ModeSpecOpt fadeplot_opts; »
une structure qui ne m’a pas révélé tous ces secrets. mais aussi dans mode.c à coté des autres fonctions , dans ce que j’appelle le tableau des modes:
{"fadeplot", init_fadeplot, draw_fadeplot, release_fadeplot,
refresh_fadeplot, init_fadeplot, NULL, &blank_opts, 17000, 1, 20, 1.0,
"fadeplot", 0, NULL},
On passe ensuite à l’implémentation des fonctions proprement dit dans un fichier que l’on appellera fadeplot.c Il est évident qu’il faudra modifier le Makefile ( Pour cela je vous laisse faire :). Dans ces fonctions, à partir de la structure ModeInfo ( mode.h ) , on va obtenir des informations sur l’écran qui sont indispensables pour la suite.
MI_WIN_WIDTH(mi) et MI_WIN_HEIGHT(mi) | vont nous donné la taille de l’écran |
Display *display = MI_DISPLAY(mi); | délivre le display |
MI_SCREEN | délivre le screen |
Window window = MI_WINDOW(mi) | ;délivre l’identificateur de la fenêtre |
GC gc = MI_GC(mi); | donne le graphics context courant |
MI_DELAY | donne le delai (microsec.) entre callbacks |
MI_CMAP | donne la table des couleurs |
XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi)); | Mettre la couleur du tracé en noir |
XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi)); | Mettre la couleur du tracé en blanc |
MI_WIN_IS_ICONIC(mi) | permet de savoir si on est passé en phase password. |
MI_WIN_IS_MONO | l’ecran est monochrome |
MI_WIN_IS_INWINDOW | le mode s’affiche dans un fenetre reguliere |
MI_WIN_IS_INROOT | le mode s’affiche sur la root windows |
NUMCOLORS | Donne le nombre de couleur |
La création d’un nouveau mode s’éffectue souvent en récupérant le squelette d’un autre et de le modifier à sa volonté.
N’hésitez pas a à regarder le code des autres modes, c’est souvent trés instructifs.
Je pense qu’il serait interressant de joindre a xlock un langage simple ( genre logo un peu plus evolue).
. X_Window programmation avec les Xt-Intrinsics Douglas A YOUNG MASSON PARIS