mirror of
https://repo.dec05eba.com/gpu-screen-recorder-ui
synced 2026-05-07 07:16:23 +09:00
Add option to capture the focused monitor
This commit is contained in:
23
include/CursorTracker.hpp
Normal file
23
include/CursorTracker.hpp
Normal file
@@ -0,0 +1,23 @@
|
||||
#pragma once
|
||||
|
||||
#include <optional>
|
||||
#include <string>
|
||||
#include <mglpp/system/vec.hpp>
|
||||
|
||||
namespace gsr {
|
||||
struct CursorInfo {
|
||||
mgl::vec2i position;
|
||||
std::string monitor_name;
|
||||
};
|
||||
|
||||
class CursorTracker {
|
||||
public:
|
||||
CursorTracker() = default;
|
||||
CursorTracker(const CursorTracker&) = delete;
|
||||
CursorTracker& operator=(const CursorTracker&) = delete;
|
||||
virtual ~CursorTracker() = default;
|
||||
|
||||
virtual void update() = 0;
|
||||
virtual std::optional<CursorInfo> get_latest_cursor_info() = 0;
|
||||
};
|
||||
}
|
||||
43
include/CursorTrackerWayland.hpp
Normal file
43
include/CursorTrackerWayland.hpp
Normal file
@@ -0,0 +1,43 @@
|
||||
#pragma once
|
||||
|
||||
#include "CursorTracker.hpp"
|
||||
#include <stdint.h>
|
||||
#include <vector>
|
||||
|
||||
struct wl_display;
|
||||
struct wl_registry;
|
||||
struct wl_output;
|
||||
struct zxdg_output_manager_v1;
|
||||
struct zxdg_output_v1;
|
||||
|
||||
namespace gsr {
|
||||
struct WaylandOutput {
|
||||
uint32_t wl_name;
|
||||
struct wl_output *output;
|
||||
struct zxdg_output_v1 *xdg_output;
|
||||
mgl::vec2i pos;
|
||||
mgl::vec2i size;
|
||||
int32_t transform;
|
||||
std::string name;
|
||||
};
|
||||
|
||||
class CursorTrackerWayland : public CursorTracker {
|
||||
public:
|
||||
CursorTrackerWayland(const char *card_path);
|
||||
CursorTrackerWayland(const CursorTrackerWayland&) = delete;
|
||||
CursorTrackerWayland& operator=(const CursorTrackerWayland&) = delete;
|
||||
~CursorTrackerWayland();
|
||||
|
||||
void update() override;
|
||||
std::optional<CursorInfo> get_latest_cursor_info() override;
|
||||
|
||||
std::vector<WaylandOutput> monitors;
|
||||
struct zxdg_output_manager_v1 *xdg_output_manager = nullptr;
|
||||
private:
|
||||
void set_monitor_outputs_from_xdg_output(struct wl_display *dpy);
|
||||
private:
|
||||
int drm_fd = -1;
|
||||
mgl::vec2i latest_cursor_position; // Position of the cursor within the monitor
|
||||
int latest_crtc_id = -1;
|
||||
};
|
||||
}
|
||||
20
include/CursorTrackerX11.hpp
Normal file
20
include/CursorTrackerX11.hpp
Normal file
@@ -0,0 +1,20 @@
|
||||
#pragma once
|
||||
|
||||
#include "CursorTracker.hpp"
|
||||
|
||||
typedef struct _XDisplay Display;
|
||||
|
||||
namespace gsr {
|
||||
class CursorTrackerX11 : public CursorTracker {
|
||||
public:
|
||||
CursorTrackerX11(Display *dpy);
|
||||
CursorTrackerX11(const CursorTrackerX11&) = delete;
|
||||
CursorTrackerX11& operator=(const CursorTrackerX11&) = delete;
|
||||
~CursorTrackerX11() = default;
|
||||
|
||||
void update() override {}
|
||||
std::optional<CursorInfo> get_latest_cursor_info() override;
|
||||
private:
|
||||
Display *dpy = nullptr;
|
||||
};
|
||||
}
|
||||
@@ -9,6 +9,7 @@
|
||||
#include "GlobalHotkeysJoystick.hpp"
|
||||
#include "AudioPlayer.hpp"
|
||||
#include "RegionSelector.hpp"
|
||||
#include "CursorTracker.hpp"
|
||||
|
||||
#include <mglpp/window/Window.hpp>
|
||||
#include <mglpp/window/Event.hpp>
|
||||
@@ -115,6 +116,8 @@ namespace gsr {
|
||||
void on_press_take_screenshot(bool finished_region_selection, bool force_region_capture);
|
||||
bool update_compositor_texture(const Monitor &monitor);
|
||||
|
||||
std::string get_capture_target(const std::string &capture_target, const SupportedCaptureOptions &capture_options);
|
||||
|
||||
void force_window_on_top();
|
||||
private:
|
||||
using KeyBindingCallback = std::function<void()>;
|
||||
@@ -205,5 +208,7 @@ namespace gsr {
|
||||
RegionSelector region_selector;
|
||||
bool start_region_capture = false;
|
||||
std::function<void()> on_region_selected;
|
||||
|
||||
std::unique_ptr<CursorTracker> cursor_tracker;
|
||||
};
|
||||
}
|
||||
@@ -15,6 +15,7 @@ namespace gsr {
|
||||
struct Monitor {
|
||||
mgl::vec2i position;
|
||||
mgl::vec2i size;
|
||||
std::string name;
|
||||
};
|
||||
|
||||
std::optional<std::string> get_window_title(Display *dpy, Window window);
|
||||
|
||||
Reference in New Issue
Block a user