summaryrefslogtreecommitdiff
path: root/src/protocols/OutputManagement.hpp
diff options
context:
space:
mode:
authorVaxry <43317083+vaxerski@users.noreply.github.com>2024-09-26 11:10:53 +0100
committerGitHub <noreply@github.com>2024-09-26 11:10:53 +0100
commitcaaa9b11e4763ed0367f81bf97ceaad5175806fc (patch)
tree2c8c44c5f7aa34b4bffe503a84ec8e53ad16e171 /src/protocols/OutputManagement.hpp
parentb1ad2d806634edff656cb5ddc9850ae2c73324e8 (diff)
wlr-output-configuration: Improve output configuration (#7571)
Diffstat (limited to 'src/protocols/OutputManagement.hpp')
-rw-r--r--src/protocols/OutputManagement.hpp69
1 files changed, 46 insertions, 23 deletions
diff --git a/src/protocols/OutputManagement.hpp b/src/protocols/OutputManagement.hpp
index 36478d0b..f4a84475 100644
--- a/src/protocols/OutputManagement.hpp
+++ b/src/protocols/OutputManagement.hpp
@@ -3,6 +3,7 @@
#include <memory>
#include <vector>
#include <cstdint>
+#include <unordered_map>
#include "WaylandProtocol.hpp"
#include "wlr-output-management-unstable-v1.hpp"
#include "../helpers/signal/Signal.hpp"
@@ -13,6 +14,43 @@ class CMonitor;
class COutputHead;
class COutputMode;
+struct SMonitorRule;
+
+enum eWlrOutputCommittedProperties : uint32_t {
+ OUTPUT_HEAD_COMMITTED_MODE = (1 << 0),
+ OUTPUT_HEAD_COMMITTED_CUSTOM_MODE = (1 << 1),
+ OUTPUT_HEAD_COMMITTED_POSITION = (1 << 2),
+ OUTPUT_HEAD_COMMITTED_TRANSFORM = (1 << 3),
+ OUTPUT_HEAD_COMMITTED_SCALE = (1 << 4),
+ OUTPUT_HEAD_COMMITTED_ADAPTIVE_SYNC = (1 << 5),
+};
+
+struct SWlrManagerOutputState {
+ uint32_t committedProperties = 0;
+
+ WP<COutputMode> mode;
+ struct {
+ Vector2D size;
+ uint32_t refresh = 0;
+ } customMode;
+ Vector2D position;
+ wl_output_transform transform = WL_OUTPUT_TRANSFORM_NORMAL;
+ float scale = 1.F;
+ bool adaptiveSync = false;
+ bool enabled = true;
+};
+
+struct SWlrManagerSavedOutputState {
+ uint32_t committedProperties = 0;
+ Vector2D resolution;
+ uint32_t refresh = 0;
+ Vector2D position;
+ wl_output_transform transform = WL_OUTPUT_TRANSFORM_NORMAL;
+ float scale = 1.F;
+ bool adaptiveSync = false;
+ bool enabled = true;
+};
+
class COutputManager {
public:
COutputManager(SP<CZwlrOutputManagerV1> resource_);
@@ -21,6 +59,9 @@ class COutputManager {
void ensureMonitorSent(CMonitor* pMonitor);
void sendDone();
+ // holds the states for this manager.
+ std::unordered_map<std::string, SWlrManagerSavedOutputState> monitorStates;
+
private:
SP<CZwlrOutputManagerV1> resource;
bool stopped = false;
@@ -80,30 +121,9 @@ class COutputConfigurationHead {
public:
COutputConfigurationHead(SP<CZwlrOutputConfigurationHeadV1> resource_, CMonitor* pMonitor_);
- bool good();
-
- enum eCommittedProperties : uint32_t {
- OUTPUT_HEAD_COMMITTED_MODE = (1 << 0),
- OUTPUT_HEAD_COMMITTED_CUSTOM_MODE = (1 << 1),
- OUTPUT_HEAD_COMMITTED_POSITION = (1 << 2),
- OUTPUT_HEAD_COMMITTED_TRANSFORM = (1 << 3),
- OUTPUT_HEAD_COMMITTED_SCALE = (1 << 4),
- OUTPUT_HEAD_COMMITTED_ADAPTIVE_SYNC = (1 << 5),
- };
+ bool good();
- uint32_t committedProperties = 0;
-
- struct {
- WP<COutputMode> mode;
- struct {
- Vector2D size;
- uint32_t refresh = 0;
- } customMode;
- Vector2D position;
- wl_output_transform transform = WL_OUTPUT_TRANSFORM_NORMAL;
- float scale = 1.F;
- bool adaptiveSync = false;
- } state;
+ SWlrManagerOutputState state;
private:
SP<CZwlrOutputConfigurationHeadV1> resource;
@@ -136,6 +156,9 @@ class COutputManagementProtocol : public IWaylandProtocol {
virtual void bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id);
+ // doesn't have to return one
+ SP<SWlrManagerSavedOutputState> getOutputStateFor(SP<CMonitor> pMonitor);
+
private:
void destroyResource(COutputManager* resource);
void destroyResource(COutputHead* resource);