basic x bullshittery
This commit is contained in:
18
x11/Makefile
Normal file
18
x11/Makefile
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
CC = gcc
|
||||||
|
CFLAGS = -Wall -g
|
||||||
|
LDFLAGS = -lX11
|
||||||
|
TARGET = a.out
|
||||||
|
SRC = *.c
|
||||||
|
|
||||||
|
all: $(TARGET)
|
||||||
|
|
||||||
|
$(TARGET): $(SRC)
|
||||||
|
$(CC) $(CFLAGS) -o $(TARGET) $(SRC) $(LDFLAGS)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(TARGET)
|
||||||
|
|
||||||
|
run: $(TARGET)
|
||||||
|
$(MAKE) clean
|
||||||
|
$(MAKE) all
|
||||||
|
./$(TARGET)
|
94
x11/xHandler.c
Normal file
94
x11/xHandler.c
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
#include <X11/Xlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <X11/keysym.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
int WIDTH = 1920;
|
||||||
|
int HEIGHT = 1080;
|
||||||
|
|
||||||
|
void hex_color(XColor *color, Display *display, Colormap cm, const char *hexcode) {
|
||||||
|
XParseColor(display, cm, hexcode, color);
|
||||||
|
XAllocColor(display, cm, color);
|
||||||
|
}
|
||||||
|
|
||||||
|
void fill_color(Display *display, Window window, GC gc, Colormap cm, const char *hexcode) {
|
||||||
|
XColor color;
|
||||||
|
hex_color(&color, display, cm, hexcode);
|
||||||
|
XSetForeground(display, gc, color.pixel);
|
||||||
|
XFillRectangle(display, window, gc, 0, 0, WIDTH, HEIGHT);
|
||||||
|
}
|
||||||
|
|
||||||
|
void fill_black(Display *display, Window window, GC gc, Colormap cm) {
|
||||||
|
fill_color(display, window, gc, cm, "#000000");
|
||||||
|
}
|
||||||
|
|
||||||
|
void fill_white(Display *display, Window window, GC gc, Colormap cm) {
|
||||||
|
fill_color(display, window, gc, cm, "#FFFFFF");
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
Display *display;
|
||||||
|
Window window;
|
||||||
|
int screen;
|
||||||
|
XEvent event;
|
||||||
|
|
||||||
|
display = XOpenDisplay(NULL);
|
||||||
|
if (display == NULL) {
|
||||||
|
fprintf(stderr, "Cannot open display\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
screen = DefaultScreen(display);
|
||||||
|
window = XCreateSimpleWindow(display, RootWindow(display, screen), 100, 100,
|
||||||
|
WIDTH, HEIGHT, 1, BlackPixel(display, screen),
|
||||||
|
WhitePixel(display, screen));
|
||||||
|
|
||||||
|
XSelectInput(display, window, ExposureMask | KeyPressMask);
|
||||||
|
XMapWindow(display, window);
|
||||||
|
|
||||||
|
GC gc = XCreateGC(display, window, 0, NULL);
|
||||||
|
Colormap cm = DefaultColormap(display, screen);
|
||||||
|
|
||||||
|
XColor black;
|
||||||
|
hex_color(&black, display, cm, "#000000");
|
||||||
|
|
||||||
|
XColor white;
|
||||||
|
hex_color(&white, display, cm, "#FFFFFF");
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
XNextEvent(display, &event);
|
||||||
|
if (event.type == Expose) {
|
||||||
|
// loop forever (until q)
|
||||||
|
static int is_black = false;
|
||||||
|
while (1) {
|
||||||
|
// set color to black
|
||||||
|
XSetForeground(display, gc, black.pixel);
|
||||||
|
for (int i = 0; i < 50; ++i) {
|
||||||
|
int x = (WIDTH / 2) + (i % 10) * 5;
|
||||||
|
int y = (HEIGHT / 2) + (i / 10) * 5;
|
||||||
|
XDrawRectangle(display, window, gc, x, y, 1, 1);
|
||||||
|
}
|
||||||
|
XFlush(display);
|
||||||
|
sleep(2);
|
||||||
|
|
||||||
|
while (XPending(display)) {
|
||||||
|
XNextEvent(display, &event);
|
||||||
|
if (event.type == KeyPress) {
|
||||||
|
KeySym key = XLookupKeysym(&event.xkey, 0);
|
||||||
|
if (key == XK_q || key == XK_Q) {
|
||||||
|
printf("Stopping...\n");
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
XFreeGC(display, gc);
|
||||||
|
XDestroyWindow(display, window);
|
||||||
|
XCloseDisplay(display);
|
||||||
|
return 0;
|
||||||
|
}
|
Reference in New Issue
Block a user