kwin/src/backends/virtual/virtual_backend.h
Vlad Zahorodnii d89501a079 Move platform backends to backends directory
This improves file organization in kwin by putting backends in a single
directory.

It also makes easier to discover kwin's low level components for new
contributors because the plugins directory may come as the last place to
look for. When one hears "plugin", the first thing that comes to mind is
regular plugins, not low level backends.
2021-11-02 09:02:41 +00:00

137 lines
3.4 KiB
C++

/*
KWin - the KDE window manager
This file is part of the KDE project.
SPDX-FileCopyrightText: 2015 Martin Gräßlin <mgraesslin@kde.org>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#ifndef KWIN_VIRTUAL_BACKEND_H
#define KWIN_VIRTUAL_BACKEND_H
#include "inputbackend.h"
#include "inputdevice.h"
#include "platform.h"
#include <kwin_export.h>
#include <QObject>
#include <QRect>
class QTemporaryDir;
namespace KWin
{
class VirtualBackend;
class VirtualOutput;
class VirtualInputDevice : public InputDevice
{
Q_OBJECT
public:
explicit VirtualInputDevice(QObject *parent = nullptr);
void setPointer(bool set);
void setKeyboard(bool set);
void setTouch(bool set);
void setName(const QString &name);
QString sysName() const override;
QString name() const override;
bool isEnabled() const override;
void setEnabled(bool enabled) override;
LEDs leds() const override;
void setLeds(LEDs leds) override;
bool isKeyboard() const override;
bool isAlphaNumericKeyboard() const override;
bool isPointer() const override;
bool isTouchpad() const override;
bool isTouch() const override;
bool isTabletTool() const override;
bool isTabletPad() const override;
bool isTabletModeSwitch() const override;
bool isLidSwitch() const override;
private:
QString m_name;
bool m_pointer = false;
bool m_keyboard = false;
bool m_touch = false;
};
class VirtualInputBackend : public InputBackend
{
Q_OBJECT
public:
explicit VirtualInputBackend(VirtualBackend *backend, QObject *parent = nullptr);
void initialize() override;
private:
VirtualBackend *m_backend;
};
class KWIN_EXPORT VirtualBackend : public Platform
{
Q_OBJECT
Q_INTERFACES(KWin::Platform)
Q_PLUGIN_METADATA(IID "org.kde.kwin.Platform" FILE "virtual.json")
public:
VirtualBackend(QObject *parent = nullptr);
~VirtualBackend() override;
Session *session() const override;
bool initialize() override;
bool saveFrames() const {
return !m_screenshotDir.isNull();
}
QString screenshotDirPath() const;
VirtualInputDevice *virtualPointer() const;
VirtualInputDevice *virtualKeyboard() const;
VirtualInputDevice *virtualTouch() const;
InputBackend *createInputBackend() override;
QPainterBackend* createQPainterBackend() override;
OpenGLBackend *createOpenGLBackend() override;
Q_INVOKABLE void setVirtualOutputs(int count, QVector<QRect> geometries = QVector<QRect>(), QVector<int> scales = QVector<int>());
Outputs outputs() const override;
Outputs enabledOutputs() const override;
QVector<CompositingType> supportedCompositors() const override {
if (selectedCompositor() != NoCompositing) {
return {selectedCompositor()};
}
return QVector<CompositingType>{OpenGLCompositing, QPainterCompositing};
}
void enableOutput(VirtualOutput *output, bool enable);
Q_INVOKABLE void removeOutput(AbstractOutput *output);
Q_SIGNALS:
void virtualOutputsSet(bool countChanged);
private:
QVector<VirtualOutput*> m_outputs;
QVector<VirtualOutput*> m_outputsEnabled;
QScopedPointer<QTemporaryDir> m_screenshotDir;
Session *m_session;
QScopedPointer<VirtualInputDevice> m_virtualPointer;
QScopedPointer<VirtualInputDevice> m_virtualKeyboard;
QScopedPointer<VirtualInputDevice> m_virtualTouch;
};
}
#endif