File indexing completed on 2024-05-05 05:30:26

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 #pragma once
0008 
0009 #include "../common/control.h"
0010 #include "../common/globals.h"
0011 
0012 #include <kscreen/output.h>
0013 #include <kscreen/types.h>
0014 
0015 #include <QOrientationReading>
0016 #include <QVariantMap>
0017 
0018 #include <optional>
0019 
0020 class Output
0021 {
0022 public:
0023     static void readInOutputs(KScreen::ConfigPtr config, const QVariantList &outputsInfo);
0024 
0025     static void writeGlobal(const KScreen::OutputPtr &output, bool hasDuplicate);
0026     static bool writeGlobalPart(const KScreen::OutputPtr &output, QVariantMap &info, const KScreen::OutputPtr &fallback);
0027 
0028     static QString dirPath();
0029 
0030     static bool updateOrientation(KScreen::OutputPtr &output, QOrientationReading::Orientation orientation);
0031 
0032     struct GlobalConfig {
0033         std::optional<qreal> scale;
0034         std::optional<QString> modeId;
0035         std::optional<KScreen::Output::Rotation> rotation;
0036         std::optional<KScreen::Output::VrrPolicy> vrrPolicy;
0037         std::optional<uint32_t> overscan;
0038         std::optional<KScreen::Output::RgbRange> rgbRange;
0039     };
0040     static GlobalConfig readGlobal(const KScreen::OutputPtr &output);
0041 
0042 private:
0043     static QVariantMap getGlobalData(KScreen::OutputPtr output);
0044 
0045     static void readIn(KScreen::OutputPtr output, const QVariantMap &info);
0046     static bool readInGlobal(KScreen::OutputPtr output);
0047     static void readInGlobalPartFromInfo(KScreen::OutputPtr output, const QVariantMap &info);
0048     /*
0049      * When a global output value (scale, rotation) is changed we might
0050      * need to reposition the outputs when another config is read.
0051      */
0052     static void adjustPositions(KScreen::ConfigPtr config, const QVariantList &outputsInfo);
0053 
0054     static QString s_dirName;
0055 };