aboutsummaryrefslogtreecommitdiff
path: root/src/CursorTrackerX11.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/CursorTrackerX11.cpp')
-rw-r--r--src/CursorTrackerX11.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/CursorTrackerX11.cpp b/src/CursorTrackerX11.cpp
new file mode 100644
index 0000000..7c40cea
--- /dev/null
+++ b/src/CursorTrackerX11.cpp
@@ -0,0 +1,29 @@
+#include "../include/CursorTrackerX11.hpp"
+#include "../include/WindowUtils.hpp"
+
+namespace gsr {
+ CursorTrackerX11::CursorTrackerX11(Display *dpy) : dpy(dpy) {
+
+ }
+
+ std::optional<CursorInfo> CursorTrackerX11::get_latest_cursor_info() {
+ Window window = None;
+ const auto cursor_pos = get_cursor_position(dpy, &window);
+ const auto monitors = get_monitors(dpy);
+ std::string monitor_name;
+
+ for(const auto &monitor : monitors) {
+ if(cursor_pos.x >= monitor.position.x && cursor_pos.x <= monitor.position.x + monitor.size.x
+ && cursor_pos.y >= monitor.position.y && cursor_pos.y <= monitor.position.y + monitor.size.y)
+ {
+ monitor_name = monitor.name;
+ break;
+ }
+ }
+
+ if(monitor_name.empty())
+ return std::nullopt;
+
+ return CursorInfo{ cursor_pos, std::move(monitor_name) };
+ }
+} \ No newline at end of file