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