Add simple drawing capability
This commit is contained in:
parent
3449d0d96f
commit
c7fc7e0184
6
Makefile
Normal file
6
Makefile
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
TARGET=drawOnRoot
|
||||||
|
SRC=main.c
|
||||||
|
# DEBUG=-g
|
||||||
|
DEBUG=
|
||||||
|
$(TARGET): main.c
|
||||||
|
gcc -Wall -Wextra $(DEBUG) $(SRC) `pkg-config --cflags --libs cairo x11` -o $(TARGET)
|
||||||
57
main.c
Normal file
57
main.c
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
#include <assert.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
#include <X11/Xatom.h>
|
||||||
|
#include <cairo.h>
|
||||||
|
#include <cairo-xlib.h>
|
||||||
|
|
||||||
|
int width, height;
|
||||||
|
void draw(cairo_t *cr) {
|
||||||
|
int quarter_w = width / 4;
|
||||||
|
int quarter_h = height / 4;
|
||||||
|
cairo_set_source_rgb(cr, 1.0, 1.0, 0.0);
|
||||||
|
cairo_rectangle(cr, quarter_w, quarter_h, quarter_w * 2, quarter_h * 2);
|
||||||
|
cairo_fill(cr);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
Display *d = XOpenDisplay(NULL);
|
||||||
|
assert(d);
|
||||||
|
|
||||||
|
int s = DefaultScreen(d);
|
||||||
|
Window w = RootWindow(d, s);
|
||||||
|
XSync(d, False);
|
||||||
|
width = DisplayWidth(d, s);
|
||||||
|
height = DisplayHeight(d, s);
|
||||||
|
Pixmap pix;
|
||||||
|
int depth = DefaultDepth(d, s);
|
||||||
|
pix = XCreatePixmap(d, w, width, height, depth);
|
||||||
|
Atom prop_root;
|
||||||
|
|
||||||
|
prop_root = XInternAtom(d, "_XROOTPMAP_ID", False);
|
||||||
|
|
||||||
|
cairo_surface_t *surf = cairo_xlib_surface_create(d, pix,
|
||||||
|
DefaultVisual(d, s),
|
||||||
|
width, height);
|
||||||
|
cairo_t *cr = cairo_create(surf);
|
||||||
|
draw(cr);
|
||||||
|
XChangeProperty(d, /* connection to x server */
|
||||||
|
w, /* window whose property we want to change */
|
||||||
|
//prop_root = XInternAtom(disp2, "_XROOTPMAP_ID", False);
|
||||||
|
prop_root, /* property name */
|
||||||
|
XA_PIXMAP, /* type of property */
|
||||||
|
32, /* format of prop; can be 8, 16, 32 */
|
||||||
|
PropModeReplace,
|
||||||
|
(unsigned char*) &pix, /* actual data */
|
||||||
|
1 /* number of elements */
|
||||||
|
);
|
||||||
|
|
||||||
|
/* XSetWindowBackgroundPixmap(d, w, pix); // If we do not have compositor :) */
|
||||||
|
XClearWindow(d,w);
|
||||||
|
XFlush(d);
|
||||||
|
/* cairo_destroy(cr); */
|
||||||
|
/* cairo_surface_destroy(surf); */
|
||||||
|
/* XFreePixmap(d, pix); */
|
||||||
|
XCloseDisplay(d);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user