/* KWin - the KDE window manager This file is part of the KDE project. SPDX-FileCopyrightText: 2015 Martin Gräßlin 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 #include #include #include 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 drmOutputs() const { return m_outputs; } QVector drmEnabledOutputs() const { return m_enabledOutputs; } void enableOutput(DrmAbstractOutput *output, bool enable); void createDpmsFilter(); void checkOutputsAreOn(); QVector 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 m_udev; QScopedPointer m_udevMonitor; Session *m_session = nullptr; // all outputs, enabled and disabled QVector m_outputs; // only enabled outputs QVector m_enabledOutputs; DrmVirtualOutput *m_placeHolderOutput = nullptr; bool m_active = false; const QStringList m_explicitGpus; QVector m_gpus; QScopedPointer m_dpmsFilter; }; } #endif