117 lines
2.8 KiB
C++
117 lines
2.8 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_DRM_BACKEND_H
|
|
#define KWIN_DRM_BACKEND_H
|
|
#include "platform.h"
|
|
|
|
#include "dpmsinputeventfilter.h"
|
|
|
|
#include <QPointer>
|
|
#include <QSize>
|
|
#include <QVector>
|
|
|
|
#include <memory>
|
|
|
|
namespace KWin
|
|
{
|
|
|
|
class Udev;
|
|
class UdevMonitor;
|
|
class UdevDevice;
|
|
|
|
class DrmAbstractOutput;
|
|
class Cursor;
|
|
class DrmGpu;
|
|
class DrmVirtualOutput;
|
|
|
|
class KWIN_EXPORT DrmBackend : public Platform
|
|
{
|
|
Q_OBJECT
|
|
Q_INTERFACES(KWin::Platform)
|
|
Q_PLUGIN_METADATA(IID "org.kde.kwin.Platform" FILE "drm.json")
|
|
public:
|
|
explicit DrmBackend(QObject *parent = nullptr);
|
|
~DrmBackend() override;
|
|
|
|
QPainterBackend *createQPainterBackend() override;
|
|
OpenGLBackend* createOpenGLBackend() override;
|
|
DmaBufTexture *createDmaBufTexture(const QSize &size) override;
|
|
Session *session() const override;
|
|
bool initialize() override;
|
|
|
|
Outputs outputs() const override;
|
|
Outputs enabledOutputs() const override;
|
|
QVector<DrmAbstractOutput*> drmOutputs() const {
|
|
return m_outputs;
|
|
}
|
|
QVector<DrmAbstractOutput*> drmEnabledOutputs() const {
|
|
return m_enabledOutputs;
|
|
}
|
|
|
|
void enableOutput(DrmAbstractOutput *output, bool enable);
|
|
|
|
void createDpmsFilter();
|
|
void checkOutputsAreOn();
|
|
|
|
QVector<CompositingType> supportedCompositors() const override;
|
|
|
|
QString supportInformation() const override;
|
|
|
|
DrmGpu *primaryGpu() const;
|
|
DrmGpu *findGpu(dev_t deviceId) const;
|
|
DrmGpu *findGpuByFd(int fd) const;
|
|
|
|
public Q_SLOTS:
|
|
void turnOutputsOn();
|
|
void sceneInitialized() override;
|
|
|
|
Q_SIGNALS:
|
|
void gpuRemoved(DrmGpu *gpu);
|
|
void gpuAdded(DrmGpu *gpu);
|
|
|
|
protected:
|
|
void doHideCursor() override;
|
|
void doShowCursor() override;
|
|
void doSetSoftwareCursor() override;
|
|
|
|
private:
|
|
friend class DrmGpu;
|
|
void addOutput(DrmAbstractOutput* output);
|
|
void removeOutput(DrmAbstractOutput* output);
|
|
void activate(bool active);
|
|
void reactivate();
|
|
void deactivate();
|
|
void updateOutputs();
|
|
void updateCursor();
|
|
void moveCursor();
|
|
void initCursor();
|
|
void readOutputsConfiguration();
|
|
void handleUdevEvent();
|
|
DrmGpu *addGpu(const QString &fileName);
|
|
|
|
QScopedPointer<Udev> m_udev;
|
|
QScopedPointer<UdevMonitor> m_udevMonitor;
|
|
Session *m_session = nullptr;
|
|
// all outputs, enabled and disabled
|
|
QVector<DrmAbstractOutput*> m_outputs;
|
|
// only enabled outputs
|
|
QVector<DrmAbstractOutput*> m_enabledOutputs;
|
|
DrmVirtualOutput *m_placeHolderOutput = nullptr;
|
|
|
|
bool m_active = false;
|
|
const QStringList m_explicitGpus;
|
|
QVector<DrmGpu*> m_gpus;
|
|
QScopedPointer<DpmsInputEventFilter> m_dpmsFilter;
|
|
};
|
|
|
|
|
|
}
|
|
|
|
#endif
|
|
|