gsr-overlay > gsr-ui

This commit is contained in:
dec05eba
2024-10-20 22:44:15 +02:00
parent 939bf23921
commit d84054ecbb
15 changed files with 40 additions and 36 deletions

View File

@@ -1,17 +1,17 @@
# GPU Screen Recorder Overlay
# GPU Screen Recorder UI
A fullscreen overlay UI for [GPU Screen Recorder](https://git.dec05eba.com/gpu-screen-recorder/about/), in the style of ShadowPlay.
# Dependencies
GPU Screen Recorder overlay uses meson build system so you need to install `meson` to build GPU Screen Recorder overlay.
GPU Screen Recorder UI uses meson build system so you need to install `meson` to build GPU Screen Recorder UI.
## Build dependencies
These are the dependencies needed to build GPU Screen Recorder overlay:
These are the dependencies needed to build GPU Screen Recorder UI:
* x11 (libx11, libxrandr, libxrender, libxfixes)
* libglvnd (which provides libgl, libglx and libegl)
# Installation
Run `sudo ./install.sh`. This will install gsr-overlay to `/usr/bin/gsr-overlay`. You can run meson commands manually to install gsr-overlay to another directory.
Run `sudo ./install.sh`. This will install gsr-ui to `/usr/bin/gsr-ui`. You can run meson commands manually to install gsr-ui to another directory.
# License
This software is licensed under GPL3.0-only. Files under `fonts/` directory are licensed under `SIL Open Font License`.

10
TODO
View File

@@ -28,8 +28,8 @@ For system startup dont allow default output/input audio, as that can change aft
Make hotkeys configurable.
Move hotkey to gsr-overlay-daemon which should execute gpu-screen-recorder --info on start, write that output to /tmp/blabla (or $XDG_RUNTIME_DIR) and gsr-overlay
should read that tmp file. gsr-overlay should remove show/hide functions for overlay and run show on startup.
Move hotkey to gsr-ui-daemon which should execute gpu-screen-recorder --info on start, write that output to /tmp/blabla (or $XDG_RUNTIME_DIR) and gsr-ui
should read that tmp file. gsr-ui should remove show/hide functions for overlay and run show on startup.
Combobox shouldn't show all items if its the combobox at the bottom and scrolling is needed to show them all.
@@ -48,4 +48,8 @@ Show warning when selecting hevc/av1 on amd because of amd driver/ffmpeg bug.
Update gsr info and validate saved config when monitors update. The selected monitor/audio may no longer be available.
Have different modes. Overlay, window and side menu. Overlay can be used on x11, window and side menu can be used on both x11 and wayland.
Window mode should look similar to overlay.
Window mode should look similar to overlay.
Look at /home/dec05eba/git/global-hotkeys for hotkeys.
Show navigation breadcrumbs for settings and deeper navigation (such as selecting a directory to save videos).

View File

@@ -10,4 +10,4 @@ meson setup build
meson configure --prefix=/usr --buildtype=release -Dstrip=true build
ninja -C build install
echo "Successfully installed gsr-overlay"
echo "Successfully installed gsr-ui"

View File

@@ -1,4 +1,4 @@
project('gsr-overlay', ['c', 'cpp'], version : '1.0.0', default_options : ['warning_level=2', 'cpp_std=c++17'], subproject_dir : 'depends')
project('gsr-ui', ['c', 'cpp'], version : '1.0.0', default_options : ['warning_level=2', 'cpp_std=c++17'], subproject_dir : 'depends')
if get_option('buildtype') == 'debug'
add_project_arguments('-g3', language : ['c', 'cpp'])
@@ -47,22 +47,22 @@ dep = [
prefix = get_option('prefix')
datadir = get_option('datadir')
gsr_overlay_resources_path = join_paths(prefix, datadir, 'gsr-overlay')
gsr_ui_resources_path = join_paths(prefix, datadir, 'gsr-ui')
executable(
meson.project_name(),
src,
install : true,
dependencies : dep,
cpp_args : '-DGSR_OVERLAY_RESOURCES_PATH="' + gsr_overlay_resources_path + '"',
cpp_args : '-DGSR_UI_RESOURCES_PATH="' + gsr_ui_resources_path + '"',
)
executable(
'gsr-overlay-daemon',
['gpu-screen-recorder-overlay-daemon/main.c'],
'gsr-ui-daemon',
['gsr-ui-daemon/main.c'],
install : true,
dependencies : [dependency('x11')],
)
install_subdir('images', install_dir : gsr_overlay_resources_path)
install_subdir('fonts', install_dir : gsr_overlay_resources_path)
install_subdir('images', install_dir : gsr_ui_resources_path)
install_subdir('fonts', install_dir : gsr_ui_resources_path)

View File

@@ -1,5 +1,5 @@
[package]
name = "gsr-overlay"
name = "gsr-ui"
type = "executable"
version = "0.1.0"
platforms = ["posix"]
@@ -8,7 +8,7 @@ platforms = ["posix"]
version = "c++17"
[config]
ignore_dirs = ["build", "gpu-screen-recorder-overlay-daemon"]
ignore_dirs = ["build", "gsr-ui-daemon"]
[dependencies]
xcomposite = ">=0"

View File

@@ -111,7 +111,7 @@ namespace gsr {
std::optional<Config> read_config() {
std::optional<Config> config;
const std::string config_path = get_config_dir() + "/overlay_config";
const std::string config_path = get_config_dir() + "/config_ui";
std::string file_content;
if(!file_get_content(config_path.c_str(), file_content)) {
fprintf(stderr, "Warning: Failed to read config file: %s\n", config_path.c_str());
@@ -173,7 +173,7 @@ namespace gsr {
void save_config(Config &config) {
config.main_config.config_file_version = CONFIG_FILE_VERSION;
const std::string config_path = get_config_dir() + "/overlay_config";
const std::string config_path = get_config_dir() + "/config_ui";
char dir_tmp[PATH_MAX];
snprintf(dir_tmp, sizeof(dir_tmp), "%s", config_path.c_str());

View File

@@ -553,7 +553,7 @@ namespace gsr {
std::optional<std::string> status_filepath = get_gsr_runtime_dir();
if(!status_filepath)
throw std::runtime_error("Failed to find/create runtime directory /run/user/.../gsr-overlay or /tmp/gsr-overlay");
throw std::runtime_error("Failed to find/create runtime directory /run/user/.../gsr-ui or /tmp/gsr-ui");
status_filepath.value() += "/status";
@@ -567,7 +567,7 @@ namespace gsr {
void Overlay::save_program_status() {
std::optional<std::string> status_filepath = get_gsr_runtime_dir();
if(!status_filepath)
throw std::runtime_error("Failed to find/create runtime directory /run/user/.../gsr-overlay or /tmp/gsr-overlay");
throw std::runtime_error("Failed to find/create runtime directory /run/user/.../gsr-ui or /tmp/gsr-ui");
status_filepath.value() += "/status";
if(!file_overwrite(status_filepath.value().c_str(), recording_status_to_string(recording_status)))
@@ -579,7 +579,7 @@ namespace gsr {
std::optional<std::string> status_filepath = get_gsr_runtime_dir();
if(!status_filepath)
throw std::runtime_error("Failed to find/create runtime directory /run/user/.../gsr-overlay or /tmp/gsr-overlay");
throw std::runtime_error("Failed to find/create runtime directory /run/user/.../gsr-ui or /tmp/gsr-ui");
status_filepath.value() += "/pid";
@@ -599,12 +599,12 @@ namespace gsr {
char program_arg0[PATH_MAX];
program_arg0[0] = '\0';
if(!read_cmdline_arg0(cmdline_path, program_arg0)) {
fprintf(stderr, "Error: failed to parse arg0 from file %s. Was the gpu-screen-recorder process that was started by gsr-overlay closed by another program or the user?\n", cmdline_path);
fprintf(stderr, "Error: failed to parse arg0 from file %s. Was the gpu-screen-recorder process that was started by gsr-ui closed by another program or the user?\n", cmdline_path);
return;
}
if(strcmp(program_arg0, "gpu-screen-recorder") != 0) {
fprintf(stderr, "Warning: process %d exists but doesn't belong to gpu-screen-recorder (is instead %s). Was the gpu-screen-recorder process that was started by gsr-overlay closed by another program or the user?\n", pid, program_arg0);
fprintf(stderr, "Warning: process %d exists but doesn't belong to gpu-screen-recorder (is instead %s). Was the gpu-screen-recorder process that was started by gsr-ui closed by another program or the user?\n", pid, program_arg0);
return;
}
@@ -614,7 +614,7 @@ namespace gsr {
void Overlay::save_program_pid() {
std::optional<std::string> status_filepath = get_gsr_runtime_dir();
if(!status_filepath)
throw std::runtime_error("Failed to find/create runtime directory /run/user/.../gsr-overlay or /tmp/gsr-overlay");
throw std::runtime_error("Failed to find/create runtime directory /run/user/.../gsr-ui or /tmp/gsr-ui");
status_filepath.value() += "/pid";
@@ -627,7 +627,7 @@ namespace gsr {
void Overlay::recording_stopped_remove_runtime_files() {
std::optional<std::string> status_filepath = get_gsr_runtime_dir();
if(!status_filepath) {
fprintf(stderr, "Error: Failed to find/create runtime directory /run/user/.../gsr-overlay or /tmp/gsr-overlay");
fprintf(stderr, "Error: Failed to find/create runtime directory /run/user/.../gsr-ui or /tmp/gsr-ui");
return;
}

View File

@@ -11,7 +11,7 @@
namespace gsr {
static void debug_print_args(const char **args) {
fprintf(stderr, "gsr-overlay info: running command:");
fprintf(stderr, "gsr-ui info: running command:");
while(*args) {
fprintf(stderr, " %s", *args);
++args;

View File

@@ -208,7 +208,7 @@ namespace gsr {
if(stat(runtime_dir_path, &st) == -1 || !S_ISDIR(st.st_mode))
snprintf(runtime_dir_path, sizeof(runtime_dir_path), "/tmp");
strcat(runtime_dir_path, "/gsr-overlay");
strcat(runtime_dir_path, "/gsr-ui");
if(create_directory_recursive(runtime_dir_path) != 0)
return result;

View File

@@ -138,7 +138,7 @@ namespace gsr {
DIR *d = opendir(directory);
if(!d) {
fprintf(stderr, "gsr-overlay error: failed to open directory: %s, error: %s\n", directory, strerror(errno));
fprintf(stderr, "gsr-ui error: failed to open directory: %s, error: %s\n", directory, strerror(errno));
return;
}

View File

@@ -48,8 +48,9 @@ namespace gsr {
std::unique_ptr<ComboBox> SettingsPage::create_record_area_box(const GsrInfo &gsr_info) {
auto record_area_box = std::make_unique<ComboBox>(&get_theme().body_font);
// TODO: Show options not supported but disable them
if(gsr_info.supported_capture_options.window)
record_area_box->add_item("Window", "window");
// TODO: Enable this
//if(gsr_info.supported_capture_options.window)
// record_area_box->add_item("Window", "window");
if(gsr_info.supported_capture_options.focused)
record_area_box->add_item("Follow focused window", "focused");
if(gsr_info.supported_capture_options.screen)

View File

@@ -72,10 +72,10 @@ int main(int argc, char **argv) {
if(access("images/gpu_screen_recorder_logo.png", F_OK) == 0) {
resources_path = "./";
} else {
#ifdef GSR_OVERLAY_RESOURCES_PATH
resources_path = GSR_OVERLAY_RESOURCES_PATH "/";
#ifdef GSR_UI_RESOURCES_PATH
resources_path = GSR_UI_RESOURCES_PATH "/";
#else
resources_path = "/usr/share/gsr-overlay/";
resources_path = "/usr/share/gsr-ui/";
#endif
}

View File

@@ -7,5 +7,4 @@ cd "$script_dir"
ninja -C build uninstall
echo "Successfully uninstalled gsr-overlay"
c
echo "Successfully uninstalled gsr-ui"