From 63b2b6cbc34b9e34208f3bff96686b9bd3f54521 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sat, 15 Mar 2025 00:39:37 +0100 Subject: Add region capture option --- include/RegionSelector.hpp | 52 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 include/RegionSelector.hpp (limited to 'include/RegionSelector.hpp') diff --git a/include/RegionSelector.hpp b/include/RegionSelector.hpp new file mode 100644 index 0000000..7f3041a --- /dev/null +++ b/include/RegionSelector.hpp @@ -0,0 +1,52 @@ +#pragma once + +#include "WindowUtils.hpp" +#include +#include +#include + +#include + +namespace gsr { + struct Region { + mgl::vec2i pos; + mgl::vec2i size; + }; + + class RegionSelector { + public: + RegionSelector(); + RegionSelector(const RegionSelector&) = delete; + RegionSelector& operator=(const RegionSelector&) = delete; + ~RegionSelector(); + + bool start(mgl::Color border_color); + void stop(); + bool is_started() const; + + bool failed() const; + bool poll_events(); + bool is_selected() const; + bool take_selection(); + Region get_selection() const; + private: + void on_button_press(const void *de); + void on_button_release(const void *de); + void on_mouse_motion(const void *de); + private: + Display *dpy = nullptr; + unsigned long region_window = 0; + unsigned long cursor_window = 0; + unsigned long region_window_colormap = 0; + int xi_opcode = 0; + GC region_gc = nullptr; + GC cursor_gc = nullptr; + + Region region; + bool selecting_region = false; + bool selected = false; + bool is_wayland = false; + std::vector monitors; + mgl::vec2i cursor_pos; + }; +} \ No newline at end of file -- cgit v1.2.3-70-g09d2