File indexing completed on 2024-05-19 16:33:53

0001 /*
0002     KWin - the KDE window manager
0003     This file is part of the KDE project.
0004 
0005     SPDX-FileCopyrightText: 2015 Martin Gräßlin <mgraesslin@kde.org>
0006 
0007     SPDX-License-Identifier: GPL-2.0-or-later
0008 */
0009 #pragma once
0010 
0011 #include "core/outputbackend.h"
0012 
0013 #include <kwin_export.h>
0014 
0015 #include <QObject>
0016 #include <QRect>
0017 
0018 namespace KWin
0019 {
0020 class VirtualBackend;
0021 class VirtualOutput;
0022 
0023 class KWIN_EXPORT VirtualBackend : public OutputBackend
0024 {
0025     Q_OBJECT
0026 
0027 public:
0028     VirtualBackend(QObject *parent = nullptr);
0029     ~VirtualBackend() override;
0030 
0031     bool initialize() override;
0032 
0033     std::unique_ptr<QPainterBackend> createQPainterBackend() override;
0034     std::unique_ptr<OpenGLBackend> createOpenGLBackend() override;
0035 
0036     Output *addOutput(const QSize &size, qreal scale);
0037 
0038     Q_INVOKABLE void setVirtualOutputs(const QVector<QRect> &geometries, QVector<qreal> scales = QVector<qreal>());
0039 
0040     Outputs outputs() const override;
0041 
0042     QVector<CompositingType> supportedCompositors() const override
0043     {
0044         return QVector<CompositingType>{OpenGLCompositing, QPainterCompositing};
0045     }
0046 
0047 Q_SIGNALS:
0048     void virtualOutputsSet(bool countChanged);
0049 
0050 private:
0051     VirtualOutput *createOutput(const QPoint &position, const QSize &size, qreal scale);
0052 
0053     QVector<VirtualOutput *> m_outputs;
0054 };
0055 
0056 } // namespace KWin