File indexing completed on 2024-04-28 05:27:37
0001 /* 0002 SPDX-FileCopyrightText: 2019 Roman Gilg <subdiff@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 #pragma once 0007 0008 #include <kscreen/output.h> 0009 #include <kscreen/types.h> 0010 0011 #include <QList> 0012 #include <QObject> 0013 #include <QVariantMap> 0014 0015 class KDirWatch; 0016 0017 class Control : public QObject 0018 { 0019 Q_OBJECT 0020 public: 0021 explicit Control(QObject *parent = nullptr); 0022 0023 ~Control() override = default; 0024 0025 virtual bool writeFile(); 0026 virtual void activateWatcher(); 0027 0028 Q_SIGNALS: 0029 void changed(); 0030 0031 protected: 0032 virtual QString dirPath() const; 0033 virtual QString filePath() const = 0; 0034 QString filePathFromHash(const QString &hash) const; 0035 void readFile(); 0036 QVariantMap &info(); 0037 const QVariantMap &constInfo() const; 0038 KDirWatch *watcher() const; 0039 0040 private: 0041 static QString s_dirName; 0042 QVariantMap m_info; 0043 KDirWatch *m_watcher = nullptr; 0044 }; 0045 0046 class ControlOutput; 0047 0048 class ControlConfig : public Control 0049 { 0050 Q_OBJECT 0051 public: 0052 explicit ControlConfig(KScreen::ConfigPtr config, QObject *parent = nullptr); 0053 0054 qreal getScale(const KScreen::OutputPtr &output) const; 0055 void setScale(const KScreen::OutputPtr &output, qreal value); 0056 0057 KScreen::OutputPtr getReplicationSource(const KScreen::OutputPtr &output) const; 0058 void setReplicationSource(const KScreen::OutputPtr &output, const KScreen::OutputPtr &source); 0059 0060 uint32_t getOverscan(const KScreen::OutputPtr &output) const; 0061 void setOverscan(const KScreen::OutputPtr &output, const uint32_t value); 0062 0063 KScreen::Output::VrrPolicy getVrrPolicy(const KScreen::OutputPtr &output) const; 0064 void setVrrPolicy(const KScreen::OutputPtr &output, const KScreen::Output::VrrPolicy value); 0065 0066 KScreen::Output::RgbRange getRgbRange(const KScreen::OutputPtr &output) const; 0067 void setRgbRange(const KScreen::OutputPtr &output, const KScreen::Output::RgbRange value); 0068 0069 QString dirPath() const override; 0070 QString filePath() const override; 0071 0072 bool writeFile() override; 0073 void activateWatcher() override; 0074 0075 private: 0076 QVariantList getOutputs() const; 0077 void setOutputs(QVariantList outputsInfo); 0078 bool infoIsOutput(const QVariantMap &info, const QString &outputId, const QString &outputName) const; 0079 ControlOutput *getOutputControl(const QString &outputId, const QString &outputName) const; 0080 0081 template<typename T, typename F> 0082 T get(const KScreen::OutputPtr &output, F globalRetentionFunc, T defaultValue) const; 0083 template<typename T, typename F, typename V> 0084 void set(const KScreen::OutputPtr &output, const QString &name, F globalRetentionFunc, V value); 0085 0086 KScreen::ConfigPtr m_config; 0087 QStringList m_duplicateOutputIds; 0088 QList<ControlOutput *> m_outputsControls; 0089 }; 0090 0091 class ControlOutput : public Control 0092 { 0093 Q_OBJECT 0094 public: 0095 explicit ControlOutput(KScreen::OutputPtr output, QObject *parent = nullptr); 0096 0097 QString id() const; 0098 QString name() const; 0099 0100 // TODO: scale auto value 0101 0102 qreal getScale() const; 0103 void setScale(qreal value); 0104 0105 uint32_t overscan() const; 0106 void setOverscan(uint32_t value); 0107 0108 KScreen::Output::VrrPolicy vrrPolicy() const; 0109 void setVrrPolicy(KScreen::Output::VrrPolicy value); 0110 0111 KScreen::Output::RgbRange rgbRange() const; 0112 void setRgbRange(KScreen::Output::RgbRange value); 0113 0114 QString dirPath() const override; 0115 QString filePath() const override; 0116 0117 private: 0118 KScreen::OutputPtr m_output; 0119 };