KWin
Loading...
Searching...
No Matches
outputbackend.h
Go to the documentation of this file.
1/*
2 KWin - the KDE window manager
3 This file is part of the KDE project.
4
5 SPDX-FileCopyrightText: 2015 Martin Gräßlin <mgraesslin@kde.org>
6
7 SPDX-License-Identifier: GPL-2.0-or-later
8*/
9
10#pragma once
11
12#include "effect/globals.h"
13#include <epoxy/egl.h>
14#include <kwin_export.h>
15
16#include <QObject>
17
18#include <memory>
19#include <optional>
20
21namespace KWin
22{
23
24class Output;
25class InputBackend;
26class OpenGLBackend;
27class QPainterBackend;
28class OutputConfiguration;
29class EglDisplay;
30class Session;
31
32class KWIN_EXPORT Outputs : public QList<Output *>
33{
34public:
36 template<typename T>
37 Outputs(const QList<T> &other)
38 {
39 resize(other.size());
40 std::copy(other.constBegin(), other.constEnd(), begin());
41 }
42};
43
44class KWIN_EXPORT OutputBackend : public QObject
45{
46 Q_OBJECT
47public:
48 ~OutputBackend() override;
49
50 virtual bool initialize() = 0;
51 virtual std::unique_ptr<InputBackend> createInputBackend();
52 virtual std::unique_ptr<OpenGLBackend> createOpenGLBackend();
53 virtual std::unique_ptr<QPainterBackend> createQPainterBackend();
54
55 virtual EglDisplay *sceneEglDisplayObject() const = 0;
63 ::EGLContext sceneEglGlobalShareContext() const;
68 void setSceneEglGlobalShareContext(::EGLContext context);
69
75 virtual QList<CompositingType> supportedCompositors() const = 0;
76
77 virtual Outputs outputs() const = 0;
78 Output *findOutput(const QString &name) const;
79
87 virtual QString supportInformation() const;
88
89 virtual Output *createVirtualOutput(const QString &name, const QSize &size, qreal scale);
90 virtual void removeVirtualOutput(Output *output);
91
95 virtual bool applyOutputChanges(const OutputConfiguration &config);
96
97 virtual Session *session() const;
98
99public Q_SLOTS:
100 virtual void sceneInitialized(){};
101
102Q_SIGNALS:
108 void outputAdded(Output *output);
112 void outputRemoved(Output *output);
113
114protected:
115 explicit OutputBackend(QObject *parent = nullptr);
116
117 ::EGLContext m_globalShareContext = EGL_NO_CONTEXT;
118};
119
120} // namespace KWin
void outputAdded(Output *output)
virtual bool initialize()=0
virtual EglDisplay * sceneEglDisplayObject() const =0
virtual Outputs outputs() const =0
void outputRemoved(Output *output)
virtual QList< CompositingType > supportedCompositors() const =0
virtual void sceneInitialized()
Outputs(const QList< T > &other)