File indexing completed on 2024-04-28 16:45:09

0001 /*
0002     SPDX-FileCopyrightText: 2019 Roman Gilg <subdiff@gmail.com>
0003     SPDX-FileCopyrightText: 2021 David Redondo <kde@david-redondo.de>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 #ifndef KDED_OUTPUT_H
0008 #define KDED_OUTPUT_H
0009 
0010 #include "../common/control.h"
0011 #include "../common/globals.h"
0012 
0013 #include <kscreen/output.h>
0014 #include <kscreen/types.h>
0015 
0016 #include <QOrientationReading>
0017 #include <QVariantMap>
0018 
0019 #include <optional>
0020 
0021 class Output
0022 {
0023 public:
0024     static void readInOutputs(KScreen::ConfigPtr config, const QVariantList &outputsInfo);
0025 
0026     static void writeGlobal(const KScreen::OutputPtr &output, bool hasDuplicate);
0027     static bool writeGlobalPart(const KScreen::OutputPtr &output, QVariantMap &info, const KScreen::OutputPtr &fallback);
0028 
0029     static QString dirPath();
0030 
0031     static bool updateOrientation(KScreen::OutputPtr &output, QOrientationReading::Orientation orientation);
0032 
0033     struct GlobalConfig {
0034         std::optional<qreal> scale;
0035         std::optional<QString> modeId;
0036         std::optional<KScreen::Output::Rotation> rotation;
0037         std::optional<KScreen::Output::VrrPolicy> vrrPolicy;
0038         std::optional<uint32_t> overscan;
0039         std::optional<KScreen::Output::RgbRange> rgbRange;
0040     };
0041     static GlobalConfig readGlobal(const KScreen::OutputPtr &output);
0042 
0043 private:
0044     static QVariantMap getGlobalData(KScreen::OutputPtr output);
0045 
0046     static void readIn(KScreen::OutputPtr output, const QVariantMap &info, Control::OutputRetention retention);
0047     static bool readInGlobal(KScreen::OutputPtr output);
0048     static void readInGlobalPartFromInfo(KScreen::OutputPtr output, const QVariantMap &info);
0049     /*
0050      * When a global output value (scale, rotation) is changed we might
0051      * need to reposition the outputs when another config is read.
0052      */
0053     static void adjustPositions(KScreen::ConfigPtr config, const QVariantList &outputsInfo);
0054 
0055     static QString s_dirName;
0056 };
0057 
0058 #endif