2016-11-13 1 views
0

J'ai cherché autour de ce problème pendant un certain temps. Je fais un programme multiplateforme et j'ai trouvé comment charger un curseur animé avec l'API Windows et comment créer un curseur pendant l'exécution à partir de données bitmap brutes. Cependant je ne peux pas trouver une bonne documentation pour cela pour X11, pour ma compilation Unix/Linux de mon programme. Je sais que j'ai besoin d'utiliser les fonctions d'extension XRender, XRenderCreateCursor et XRenderCreateAnimCursor de cette documentation https://www.x.org/releases/X11R7.6/doc/libXrender/libXrender.txt mais je ne sais pas comment utiliser ces fonctions et la documentation montre maintenant des exemples.Comment créer un curseur dans X11 à partir de données brutes C++

Les données d'image brutes sont également dans le format ARGB, et je veux soutenir le canal Alpha si possible avec ces curseurs. Quelqu'un pourrait me montrer comment utiliser la bibliothèque X11 et XRender (ou XCursor) pour créer un curseur, statique et animé, et éventuellement comment le faire pour que le curseur puisse être utilisé avec n'importe quelle fenêtre X11.

Merci!

PS. Je suis en train d'éditer une librairie open source pour Gui crossfrom que j'utilise pour mon programme, et j'essaye d'ajouter cette fonctionnalité dans la librairie mais je n'ai pas l'habitude de programmer avec X11.

+0

Je suggère fortement d'utiliser une boîte à outils comme [Qt] (http://qt.io). X11 est vraiment complexe, vous aurez besoin de mois pour en maîtriser davantage. Et il devient obsolète (probablement remplacé par Wayland). –

Répondre

0

Quand il s'agit de X, rien n'est simple.

D'abord, passez en revue le specification of the X render extension.

Les étapes de création d'un curseur animé sont les suivantes.

  1. D'abord, vous devez créer un PICTURE pour chaque image du curseur animé, en utilisant CreatePicture.

  2. Utilisez CreateCursor pour créer un CURSOR à partir de chaque PICTURE. CreateCursor renvoie une poignée CURSOR.

  3. Ensuite, vous prenez la liste de tous les CURSOR s pour tous les cadres, puis utiliser CreateAnimCursor pour créer un seul CURSOR représentant le curseur animé.

Tout cela revient à créer un PICTURE pour chaque image. Un PICTURE est créé en utilisant CreatePicture à partir d'un DRAWABLE et un PICTFORMAT. DRAWABLE est le PIXMAP avec le masque de bits réel pour l'image du curseur, et PICTFORMAT spécifie les canaux dans le pixmap représentent les canaux rouge, couleur et vert, et doit être l'un des PICTFORMAT énumérés retournés de QueryPictformat.

Pour plus d'informations, voir la spécification d'extension de rendu X précitée.