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);