mirror of
https://github.com/hyprwm/Hyprland.git
synced 2025-08-21 23:13:49 -07:00
wlr-output-configuration: Improve output configuration (#7571)
This commit is contained in:
@@ -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();
|
||||
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),
|
||||
};
|
||||
|
||||
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);
|
||||
|
Reference in New Issue
Block a user