1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
/*
* transpwin.c
* Pour compiler : gcc -Wall -g transpwin.c -o transpwin -lX11 -lXext
*/
#include <X11/Xlib.h>
#include <X11/X.h>
#include <X11/extensions/shape.h>
#include <unistd.h>
int main(int argc, char** argv)
{
Display* display = XOpenDisplay( NULL );
if (display == NULL)
{
return -1;
}
// On crée la fenêtre
Window window = XCreateSimpleWindow( display, DefaultRootWindow(display), 250, 300, 500, 300, 0, 0xFF0000, 0x0000FF );
// On enlève la décoration
Atom xa = XInternAtom(display, "_MOTIF_WM_HINTS", False);
if (xa != None)
{
long prop[5] = { 2, 0, 0, 0, 0 };
XChangeProperty(display, window, xa, xa, 32, PropModeReplace, (unsigned char *) prop, 5);
}
XGCValues xgcv;
xgcv.foreground = WhitePixel(display, DefaultScreen(display));
xgcv.line_width = 1;
xgcv.line_style = LineSolid;
// Création d'un pixmap d'une profondeur de 1 bit
Pixmap pmap = XCreatePixmap(display, window, 500, 300, 1);
// GC pour dessiner sur le pixmap
GC shape_gc = XCreateGC(display, pmap, 0, &xgcv);
// On remplit le rectangle pour qu'il soit visible
XSetForeground(display, shape_gc, 1);
XFillRectangle(display, pmap, shape_gc, 0, 0, 500, 300);
// On rend transparent un petit rectangle
XSetForeground(display, shape_gc, 0);
XFillRectangle(display, pmap, shape_gc, 50, 50, 50, 100);
// On applique le pixmap de transparence à la fenêtre
XShapeCombineMask (display, window, ShapeBounding, 0, 0, pmap, ShapeSet);
// Suppression du pixmap
XFreePixmap(display, pmap);
XMapWindow(display, window);
XFlush(display);
sleep(5);
XDestroyWindow(display, window);
XCloseDisplay(display);
return 0;
} |
Partager