Rewrite usign Xlib instead of xcb
authorSamuel Dudik <redacted>
Fri, 24 Jul 2020 11:51:07 +0000 (13:51 +0200)
committerSamuel Dudik <redacted>
Fri, 24 Jul 2020 11:51:07 +0000 (13:51 +0200)
config.h [new file with mode: 0644]
main.c
makefile
xcb_version.c [new file with mode: 0644]

diff --git a/config.h b/config.h
new file mode 100644 (file)
index 0000000..286130b
--- /dev/null
+++ b/config.h
@@ -0,0 +1,13 @@
+unsigned long background_color = 0xFFFFFF;
+unsigned long border_color = 0xFF0000;
+
+const static char *font_style = "Inconsolata:style=Medium:size=13";
+const static char *font_color = "#000000";
+
+const static unsigned int width = 325;
+const static unsigned int height = 50;
+const static unsigned int border_size = 5;
+const static unsigned int pos_x = 1920 - width - border_size - 30;
+const static unsigned int pos_y = 50;
+
+const static int duration = 5;
diff --git a/main.c b/main.c
index c795b353365e0d8d2f1dfe0e13155215ec089a1a..511eefa79570e7ed3ec5a40110bf3a50629b48de 100644 (file)
--- a/main.c
+++ b/main.c
@@ -1,57 +1,52 @@
-#include <xcb/xcb.h>
+#include <X11/Xlib.h>
+#include <X11/Xft/Xft.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
-#include <string.h>
 
-int main(void)
+#include "config.h"
+
+int main(int argc, char *argv[])
 {
-       xcb_connection_t *conn;
-       xcb_screen_t *screen;
-       xcb_window_t window;
-       uint32_t mask;
-       uint32_t values[2];
-
-       conn = xcb_connect(NULL, NULL);
-       if (xcb_connection_has_error(conn)) {
-               printf("Cannot open display\n");
+       Display *display = XOpenDisplay(NULL);
+       XEvent event;
+
+       if (display == NULL)
+       {
+               fprintf(stderr, "Cannot open display\n");
                exit(EXIT_FAILURE);
        }
 
-       screen = xcb_setup_roots_iterator( xcb_get_setup(conn) ).data;
-
-       window = xcb_generate_id(conn);
-
-       int width = 200;
-       int height = 60;
-
-       uint32_t back = 0xFFFFFF;
-
-       int sw = screen->width_in_pixels;
-       int sh = screen->height_in_pixels;
+       int screen = DefaultScreen(display);
 
-       int padding_x = 30;
-       int padding_y = 50;
+       int window_width = DisplayWidth(display, screen);
+       int widnow_height = DisplayHeight(display, screen);
 
-       int pos_x = sw - width - padding_x;
-       int pos_y = padding_y;
+       Window root = RootWindow(display, screen);
+       XSetWindowAttributes attributes;
+       attributes.override_redirect = True;
+       attributes.background_pixel = background_color;
+       attributes.border_pixel = border_color;
 
-       mask = XCB_CW_BACK_PIXEL | XCB_CW_OVERRIDE_REDIRECT;
+       XftColor color;
+       char *status = "Ahoj volam sa samko netahaj mi stolicku lebo ta ujebem ty hovafoooooo";
+       XftFont *font = XftFontOpenName(display, screen, font_style);
 
-       values[0] = back;
-       values[1] = 1;
+       Window window = XCreateWindow(
+               display, root, pos_x,
+               pos_y, width, font->ascent + 10 + border_size, border_size,
+               DefaultDepth(display, screen), CopyFromParent,
+               DefaultVisual(display, screen),
+               CWOverrideRedirect | CWBackPixel | CWBorderPixel, &attributes);
 
-       xcb_create_window(conn, screen->root_depth, 
-                       window, screen->root, pos_x, pos_y, width, height, 1,
-                       XCB_WINDOW_CLASS_INPUT_OUTPUT, 
-                       screen->root_visual, mask, values);
+       XftDraw *draw = XftDrawCreate(display, window, DefaultVisual(display, screen), DefaultColormap(display, screen));
+       XftColorAllocName(display, DefaultVisual(display, screen), DefaultColormap(display, screen), "#000000", &color);
 
-       xcb_map_window(conn, window);
-       xcb_flush(conn);
+       XMapWindow(display, window);
 
-       sleep(30);
+       XftDrawString8(draw, &color, font, 5, font->ascent + 5, (XftChar8 *)argv[1], strlen(argv[1]));
 
-       xcb_disconnect(conn);
+       XNextEvent(display, &event);
 
-       exit(EXIT_SUCCESS);
+       sleep(duration);
 }
index fe8c7906309992118b5451b64969f86d089c9be2..cece8e819fdb4de4b4d60bfe7dae74b8b81b55ce 100644 (file)
--- a/makefile
+++ b/makefile
@@ -1,2 +1,2 @@
 default:
-       gcc main.c -lxcb -o main
+       gcc main.c -lX11 -lXft -I/usr/include/freetype2 -o main
diff --git a/xcb_version.c b/xcb_version.c
new file mode 100644 (file)
index 0000000..c795b35
--- /dev/null
@@ -0,0 +1,57 @@
+#include <xcb/xcb.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+
+int main(void)
+{
+       xcb_connection_t *conn;
+       xcb_screen_t *screen;
+       xcb_window_t window;
+       uint32_t mask;
+       uint32_t values[2];
+
+       conn = xcb_connect(NULL, NULL);
+       if (xcb_connection_has_error(conn)) {
+               printf("Cannot open display\n");
+               exit(EXIT_FAILURE);
+       }
+
+       screen = xcb_setup_roots_iterator( xcb_get_setup(conn) ).data;
+
+       window = xcb_generate_id(conn);
+
+       int width = 200;
+       int height = 60;
+
+       uint32_t back = 0xFFFFFF;
+
+       int sw = screen->width_in_pixels;
+       int sh = screen->height_in_pixels;
+
+       int padding_x = 30;
+       int padding_y = 50;
+
+       int pos_x = sw - width - padding_x;
+       int pos_y = padding_y;
+
+       mask = XCB_CW_BACK_PIXEL | XCB_CW_OVERRIDE_REDIRECT;
+
+       values[0] = back;
+       values[1] = 1;
+
+       xcb_create_window(conn, screen->root_depth, 
+                       window, screen->root, pos_x, pos_y, width, height, 1,
+                       XCB_WINDOW_CLASS_INPUT_OUTPUT, 
+                       screen->root_visual, mask, values);
+
+       xcb_map_window(conn, window);
+       xcb_flush(conn);
+
+       sleep(30);
+
+       xcb_disconnect(conn);
+
+       exit(EXIT_SUCCESS);
+}