Accueil > > > COUPER UNE FENÊTRE (X11)
COUPER UNE FENÊTRE (X11)
Information sur la source
Description
Suite à une source déposé sur javafr(http://www.javafr.com/codes/FENETRE-RONDE-J NI_38715.aspx) qui ne sert en soit pas à grand chose, mais qui peut donner des idées pour la création de skin, je pose ici le source C pour découper une fentêtre X11.
projet créé avec eclipse 3.2 et CDT 3.1
/!\ même si il est mentionné dans les commentaire je rappel de ne pas oublier de linker cette petite appli avec les lib X11 et Xext
Source
- #include <X11/Xlib.h>//ne pas oublier de linker l'appli avec la lib X11
- #include <X11/extensions/shape.h>//ne pas oublier de linker l'appli avec la lib Xext
- #include <stdio.h>
- #include <stdlib.h>
-
- //code de sortie
- #define EXIT_SUCCESS 0
- #define EXIT_ERROR 1
-
- //taille par defaut de la fenetre
- #define DEFAULT_X 0
- #define DEFAULT_Y 0
- #define DEFAULT_WIDTH 300
- #define DEFAULT_HEIGHT 200
-
- int main(int argc, char** argv) {
-
- Display *display;
- int screen;
- Window window;
- Pixmap pixmap;
- GC gcPixmap;
- XEvent event;
- XRectangle bounds;
-
- // Overture d'une connexion avec le serveur
- display = XOpenDisplay(NULL);
- if(display == NULL) {
- fprintf(stderr, "Impossible d'ouvrir une connexion avec le serveur X\n");
- exit(EXIT_ERROR);
- }
-
- //Récuperation de l'écran par défaut
- screen = DefaultScreen(display);
-
- //initialisation des coord de la fenêtre
- bounds.x = DEFAULT_X;
- bounds.y = DEFAULT_Y;
- bounds.width = DEFAULT_WIDTH;
- bounds.height = DEFAULT_HEIGHT;
-
-
- //Creation d'une fenêtre
- window = XCreateSimpleWindow(display, RootWindow(display, screen), bounds.x, bounds.y,
- bounds.width, bounds.height, 0, WhitePixel(display, screen), BlackPixel(display, screen));
-
- //Sélèction des événements
- XSelectInput(display, window, ExposureMask | KeyPressMask | ButtonPressMask);
- //Titre de la fenêtre
- XStoreName(display, window, "Fenetre ovale");
-
- //Création d'un pixmap qui va servir à découper la fenêtre
- pixmap = XCreatePixmap(display, window, bounds.width, bounds.height, 1);
- //Récupération d'un GC sur le pixmap
- gcPixmap = XCreateGC(display, pixmap, 0, NULL);
- //Couleur de premier plan cette couleur va permetre de selectionner la couleur de découpage
- XSetForeground(display, gcPixmap, WhitePixel(display, screen));
- //Dessine le rectangle qui sera découpé enfin
- //apres avoir dessiné l'ellipse ce qui reste disparait :D
- XFillRectangle(display, pixmap, gcPixmap, 0, 0, bounds.width, bounds.height);
- //Couleur de premier plan de la forme que l'on souhaite garder
- XSetForeground(display, gcPixmap, BlackPixel(display, screen));
- //Ellipse qui restera affiché à l'écran
- XFillArc(display, pixmap, gcPixmap, 0, 10, bounds.width-20, bounds.height-10, 0, 360*64);
-
- //Découpage de la fenêtre en applicant une soustraction des 'shapes' contenue dans
- //le pixmap
- XShapeCombineMask(display, window, ShapeBounding, 0, 0, pixmap, ShapeSubtract);
-
- //Map la fenêtre à l'écran (faites le ici pour ne pas voir la fenêtre se faire découper :P )
- XMapWindow(display, window);
-
- //boucle des évènements de la fenêtre
- while(1) {
- //si il y a un nouvel évènement
- XNextEvent(display, &event);
- //si un clic est fait on quitte l'application
- //(pour bouger la fenêtre pressez 'alt' + un clic gauche puis bougez la souris)
- if(event.type==ButtonPress)
- break;
- }
- // Fermeture de la connexion avec le serveur X
- XCloseDisplay(display);
-
- return 0;
- }
#include <X11/Xlib.h>//ne pas oublier de linker l'appli avec la lib X11
#include <X11/extensions/shape.h>//ne pas oublier de linker l'appli avec la lib Xext
#include <stdio.h>
#include <stdlib.h>
//code de sortie
#define EXIT_SUCCESS 0
#define EXIT_ERROR 1
//taille par defaut de la fenetre
#define DEFAULT_X 0
#define DEFAULT_Y 0
#define DEFAULT_WIDTH 300
#define DEFAULT_HEIGHT 200
int main(int argc, char** argv) {
Display *display;
int screen;
Window window;
Pixmap pixmap;
GC gcPixmap;
XEvent event;
XRectangle bounds;
// Overture d'une connexion avec le serveur
display = XOpenDisplay(NULL);
if(display == NULL) {
fprintf(stderr, "Impossible d'ouvrir une connexion avec le serveur X\n");
exit(EXIT_ERROR);
}
//Récuperation de l'écran par défaut
screen = DefaultScreen(display);
//initialisation des coord de la fenêtre
bounds.x = DEFAULT_X;
bounds.y = DEFAULT_Y;
bounds.width = DEFAULT_WIDTH;
bounds.height = DEFAULT_HEIGHT;
//Creation d'une fenêtre
window = XCreateSimpleWindow(display, RootWindow(display, screen), bounds.x, bounds.y,
bounds.width, bounds.height, 0, WhitePixel(display, screen), BlackPixel(display, screen));
//Sélèction des événements
XSelectInput(display, window, ExposureMask | KeyPressMask | ButtonPressMask);
//Titre de la fenêtre
XStoreName(display, window, "Fenetre ovale");
//Création d'un pixmap qui va servir à découper la fenêtre
pixmap = XCreatePixmap(display, window, bounds.width, bounds.height, 1);
//Récupération d'un GC sur le pixmap
gcPixmap = XCreateGC(display, pixmap, 0, NULL);
//Couleur de premier plan cette couleur va permetre de selectionner la couleur de découpage
XSetForeground(display, gcPixmap, WhitePixel(display, screen));
//Dessine le rectangle qui sera découpé enfin
//apres avoir dessiné l'ellipse ce qui reste disparait :D
XFillRectangle(display, pixmap, gcPixmap, 0, 0, bounds.width, bounds.height);
//Couleur de premier plan de la forme que l'on souhaite garder
XSetForeground(display, gcPixmap, BlackPixel(display, screen));
//Ellipse qui restera affiché à l'écran
XFillArc(display, pixmap, gcPixmap, 0, 10, bounds.width-20, bounds.height-10, 0, 360*64);
//Découpage de la fenêtre en applicant une soustraction des 'shapes' contenue dans
//le pixmap
XShapeCombineMask(display, window, ShapeBounding, 0, 0, pixmap, ShapeSubtract);
//Map la fenêtre à l'écran (faites le ici pour ne pas voir la fenêtre se faire découper :P )
XMapWindow(display, window);
//boucle des évènements de la fenêtre
while(1) {
//si il y a un nouvel évènement
XNextEvent(display, &event);
//si un clic est fait on quitte l'application
//(pour bouger la fenêtre pressez 'alt' + un clic gauche puis bougez la souris)
if(event.type==ButtonPress)
break;
}
// Fermeture de la connexion avec le serveur X
XCloseDisplay(display);
return 0;
}
Conclusion
Cette source à été testé sous gentoo (KDE 3.5.4) et sous debian sarge 3.1 (KDE 3.3), merci de me dire si sur les autres Window Manager cela fonctionne ou non (normalement oui)
Historique
- 10 août 2006 00:28:06 :
- maj de la présentation
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
programme graphique sous linux avec X11 de préférence (pour le portage) [ par coucou747 ]
je recherche une façon de créer des programmes graphiques en c, j'ai cherché des heures sur le net des programmes en c utilisant des librairies comme
Questions cpp Linux X11 [ par ralebole ]
Voici mes 3 questions Comment afficher une image dans une fenetre Cpp linux X11 ?Comment creer un Timer Cpp linux X11 ? (petit exemple svp)Si je
débuts en C sous linux [ par hotlips ]
Bonjour,Je débute sous linux. J'étais plutôt habitué à Visual C++, mais je doit écrire une librairie en C sous
passer un programme GTK de linux à windows [ par Dr_zoidberg ]
Bonjour,J'ai choisi de créer une interface en GTK afin de pouvoir porter mon programme de linux à windows.Seulement pour l'instant, je n'ai
Allegro sous linux [ par esiee_amiens ]
Bonjour, Je suis sous linux, et je n'arrive pas à compiler les prog ou j'utilise allegro. J'ai essayer dans la console : "gcc ok.c `allegro -conf
Allegro + linux [ par esiee_amiens ]
Bonjour, Je suis sous linux, et je n'arrive pas à compiler les prog ou j'utilise allegro. J'ai essayer dans la console : "gcc ok.c `allegro -conf
Obtenir GTK ou QT (sans connexion ADSL) [ par Flachy Joe ]
Salut,je voudrai me mettre à la progg sous linux, je programme déja en VB6 (sous vindoz évidemment) et j'ai des notions de C++ et de Ja
graphisme sous linux [ par maxialex5 ]
Bonjour comment compiler un code en C contenant la bibliotheque ou avec la version Kaela de knoppix? et merci d'avance
Ouverture image sous linux [ par astropolpot ]
Bonjour à tous,je voudrais savoir comment ouvrir un fichier jpeg sous linux pour le mettre sous forme de matrice. je ne veux rien de plus compliq
Taille fichier sous linux [ par bigbourin ]
Bonjour a tous, voila je cherche une fonction pour récupéré la taille d'un fichier mais sous linux. donc les API W32 ...voila. Je pensa
|
Derniers Blogs
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Forum
ALGORITHMESALGORITHMES par whayoub
Cliquez pour lire la suite par whayoub
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|