File indexing completed on 2024-05-05 17:39:36

0001 /*
0002  *  SPDX-FileCopyrightText: 2014-2015 Sebastian Kügler <sebas@kde.org>
0003  *
0004  *  SPDX-License-Identifier: LGPL-2.1-or-later
0005  */
0006 #include "waylandscreen.h"
0007 
0008 #include "waylandconfig.h"
0009 #include "waylandoutputdevice.h"
0010 
0011 #include <mode.h>
0012 #include <screen.h>
0013 
0014 using namespace KScreen;
0015 
0016 WaylandScreen::WaylandScreen(WaylandConfig *config)
0017     : QObject(config)
0018     , m_outputCount(0)
0019 {
0020 }
0021 
0022 ScreenPtr WaylandScreen::toKScreenScreen(KScreen::ConfigPtr &parent) const
0023 {
0024     Q_UNUSED(parent);
0025 
0026     KScreen::ScreenPtr kscreenScreen(new KScreen::Screen);
0027     updateKScreenScreen(kscreenScreen);
0028     return kscreenScreen;
0029 }
0030 
0031 void WaylandScreen::setOutputs(const QList<WaylandOutputDevice *> &outputs)
0032 {
0033     m_outputCount = outputs.count();
0034 
0035     QRect r;
0036     for (const auto *out : outputs) {
0037         if (out->enabled()) {
0038             r |= QRect(out->globalPosition(), out->pixelSize() / out->scale());
0039         }
0040     }
0041     m_size = r.size();
0042 }
0043 
0044 void WaylandScreen::updateKScreenScreen(KScreen::ScreenPtr &screen) const
0045 {
0046     screen->setMinSize(QSize(0, 0));
0047 
0048     // 64000^2 should be enough for everyone.
0049     screen->setMaxSize(QSize(64000, 64000));
0050 
0051     screen->setCurrentSize(m_size);
0052     screen->setMaxActiveOutputsCount(m_outputCount);
0053 }