File indexing completed on 2024-05-12 05:33:51
0001 /* 0002 * SPDX-FileCopyrightText: 2014-2015 Sebastian Kügler <sebas@kde.org> 0003 * SPDX-FileCopyrightText: 2021 Méven Car <meven.car@enioka.com> 0004 * 0005 * SPDX-License-Identifier: LGPL-2.1-or-later 0006 */ 0007 #pragma once 0008 0009 #include "waylandoutputdevicemode.h" 0010 0011 #include "qwayland-kde-output-device-v2.h" 0012 0013 #include "kscreen_export.h" 0014 #include "types.h" 0015 0016 #include <QPoint> 0017 #include <QSize> 0018 0019 namespace KScreen 0020 { 0021 class WaylandOutputConfiguration; 0022 0023 class WaylandOutputDevice : public QObject, public QtWayland::kde_output_device_v2 0024 { 0025 Q_OBJECT 0026 0027 public: 0028 WaylandOutputDevice(int id); 0029 0030 ~WaylandOutputDevice(); 0031 0032 QByteArray edid() const; 0033 bool enabled() const; 0034 int id() const; 0035 QString name() const; 0036 QString model() const; 0037 QString manufacturer() const; 0038 qreal scale() const; 0039 QPoint globalPosition() const; 0040 QSize pixelSize() const; 0041 int refreshRate() const; 0042 uint32_t vrrPolicy() const; 0043 uint32_t overscan() const; 0044 uint32_t capabilities() const; 0045 uint32_t rgbRange() const; 0046 0047 OutputPtr toKScreenOutput(); 0048 void updateKScreenOutput(OutputPtr &output); 0049 void updateKScreenModes(OutputPtr &output); 0050 0051 bool isPrimary() const; 0052 void setPrimary(bool primary); 0053 void setIndex(uint32_t priority); 0054 uint32_t index() const; 0055 bool setWlConfig(WaylandOutputConfiguration *wlConfig, const KScreen::OutputPtr &output); 0056 0057 QString modeId() const; 0058 QString uuid() const 0059 { 0060 return m_uuid; 0061 } 0062 0063 Q_SIGNALS: 0064 void done(); 0065 0066 protected: 0067 void kde_output_device_v2_geometry(int32_t x, 0068 int32_t y, 0069 int32_t physical_width, 0070 int32_t physical_height, 0071 int32_t subpixel, 0072 const QString &make, 0073 const QString &model, 0074 int32_t transform) override; 0075 void kde_output_device_v2_current_mode(struct ::kde_output_device_mode_v2 *mode) override; 0076 void kde_output_device_v2_mode(struct ::kde_output_device_mode_v2 *mode) override; 0077 void kde_output_device_v2_done() override; 0078 void kde_output_device_v2_scale(wl_fixed_t factor) override; 0079 void kde_output_device_v2_edid(const QString &raw) override; 0080 void kde_output_device_v2_enabled(int32_t enabled) override; 0081 void kde_output_device_v2_uuid(const QString &uuid) override; 0082 void kde_output_device_v2_serial_number(const QString &serialNumber) override; 0083 void kde_output_device_v2_eisa_id(const QString &eisaId) override; 0084 void kde_output_device_v2_capabilities(uint32_t flags) override; 0085 void kde_output_device_v2_overscan(uint32_t overscan) override; 0086 void kde_output_device_v2_vrr_policy(uint32_t vrr_policy) override; 0087 void kde_output_device_v2_rgb_range(uint32_t rgb_range) override; 0088 void kde_output_device_v2_name(const QString &name) override; 0089 void kde_output_device_v2_high_dynamic_range(uint32_t hdr_enabled) override; 0090 void kde_output_device_v2_sdr_brightness(uint32_t sdr_brightness) override; 0091 void kde_output_device_v2_wide_color_gamut(uint32_t wcg_enabled) override; 0092 void kde_output_device_v2_auto_rotate_policy(uint32_t policy) override; 0093 void kde_output_device_v2_icc_profile_path(const QString &profile) override; 0094 void kde_output_device_v2_brightness_metadata(uint32_t max_peak_brightness, uint32_t max_frame_average_brightness, uint32_t min_brightness) override; 0095 void kde_output_device_v2_brightness_overrides(int32_t max_peak_brightness, int32_t max_average_brightness, int32_t min_brightness) override; 0096 void kde_output_device_v2_sdr_gamut_wideness(uint32_t value) override; 0097 0098 private: 0099 QString modeName(const WaylandOutputDeviceMode *m) const; 0100 WaylandOutputDeviceMode *deviceModeFromId(const int modeId) const; 0101 0102 WaylandOutputDeviceMode *m_mode; 0103 QList<WaylandOutputDeviceMode *> m_modes; 0104 0105 int m_id; 0106 QPoint m_pos; 0107 QSize m_physicalSize; 0108 int32_t m_subpixel; 0109 QString m_manufacturer; 0110 QString m_model; 0111 int32_t m_transform; 0112 qreal m_factor; 0113 QByteArray m_edid; 0114 int32_t m_enabled; 0115 QString m_uuid; 0116 QString m_serialNumber; 0117 QString m_outputName; 0118 QString m_eisaId; 0119 uint32_t m_flags; 0120 uint32_t m_overscan; 0121 uint32_t m_vrr_policy; 0122 uint32_t m_rgbRange; 0123 uint32_t m_index; 0124 bool m_hdrEnabled = false; 0125 uint32_t m_sdrBrightness = 200; 0126 bool m_wideColorGamutEnabled = false; 0127 uint32_t m_autoRotatePolicy = 1; 0128 QString m_iccProfilePath; 0129 double m_maxPeakBrightness = 0; 0130 double m_maxAverageBrightness = 0; 0131 double m_minBrightness = 0; 0132 std::optional<double> m_maxPeakBrightnessOverride; 0133 std::optional<double> m_maxAverageBrightnessOverride; 0134 std::optional<double> m_minBrightnessOverride; 0135 double m_sdrGamutWideness = 0; 0136 }; 0137 0138 } 0139 0140 KSCREEN_EXPORT QDebug operator<<(QDebug dbg, const KScreen::WaylandOutputDevice *output);