mirror of
https://repo.dec05eba.com/gpu-screen-recorder-ui
synced 2026-03-31 09:17:04 +09:00
wip
This commit is contained in:
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
# Compiled sibs files
|
||||
sibs-build/
|
||||
compile_commands.json
|
||||
tests/sibs-build/
|
||||
tests/compile_commands.json
|
||||
71
main.cpp
Normal file
71
main.cpp
Normal file
@@ -0,0 +1,71 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/cursorfont.h>
|
||||
#include <unistd.h>
|
||||
|
||||
static int x11_error_handler(Display *dpy, XErrorEvent *ev) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void usage() {
|
||||
fprintf(stderr, "usage: window-overlay <window>\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
static bool string_to_i64(const char *str, int64_t *result) {
|
||||
errno = 0;
|
||||
char *endptr = nullptr;
|
||||
int64_t res = strtoll(str, &endptr, 0);
|
||||
if(endptr == str || errno != 0)
|
||||
return false;
|
||||
|
||||
*result = res;
|
||||
return true;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
if(argc != 2)
|
||||
usage();
|
||||
|
||||
int64_t target_window;
|
||||
if(!string_to_i64(argv[1], &target_window)) {
|
||||
fprintf(stderr, "Error: invalid number '%s' was specific for window argument\n", argv[1]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
XSetErrorHandler(x11_error_handler);
|
||||
|
||||
Display *display = XOpenDisplay(NULL);
|
||||
if(!display) {
|
||||
fprintf(stderr, "Error: XOpenDisplay failed\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
//const Window root_window = DefaultRootWindow(display);
|
||||
const int screen = DefaultScreen(display);
|
||||
|
||||
XSetWindowAttributes attr;
|
||||
attr.background_pixel = XWhitePixel(display, screen);
|
||||
attr.override_redirect = True;
|
||||
|
||||
Window overlay_window = XCreateWindow(display, target_window, 0, 0, 256, 256, 0, DefaultDepth(display, screen), InputOutput, XDefaultVisual(display, screen), CWBackPixel|CWOverrideRedirect, &attr);
|
||||
if(!overlay_window) {
|
||||
fprintf(stderr, "Error: failed to create overlay window\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
Cursor default_cursor = XCreateFontCursor(display, XC_arrow);
|
||||
|
||||
XMapWindow(display, overlay_window);
|
||||
XGrabPointer(display, overlay_window, True, ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeSync, None, default_cursor, CurrentTime);
|
||||
sleep(3);
|
||||
|
||||
/*XEvent xev;
|
||||
for(;;) {
|
||||
XNextEvent(display, &xev);
|
||||
}*/
|
||||
|
||||
return 0;
|
||||
}
|
||||
8
project.conf
Normal file
8
project.conf
Normal file
@@ -0,0 +1,8 @@
|
||||
[package]
|
||||
name = "window-overlay"
|
||||
type = "executable"
|
||||
version = "0.1.0"
|
||||
platforms = ["posix"]
|
||||
|
||||
[dependencies]
|
||||
x11 = ">=1"
|
||||
Reference in New Issue
Block a user