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