File indexing completed on 2024-04-28 05:27:35
0001 /* 0002 SPDX-FileCopyrightText: 2020 Aleix Pol Gonzalez <aleixpol@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 0007 #pragma once 0008 0009 #include <QList> 0010 #include <QObject> 0011 #include <QSharedPointer> 0012 #include <optional> 0013 0014 #include <kpipewire_export.h> 0015 0016 class QScreen; 0017 struct zkde_screencast_unstable_v1; 0018 0019 namespace KWayland 0020 { 0021 namespace Client 0022 { 0023 class PlasmaWindow; 0024 } 0025 } 0026 0027 class ScreencastingPrivate; 0028 class ScreencastingSourcePrivate; 0029 class ScreencastingStreamPrivate; 0030 class KPIPEWIRE_EXPORT ScreencastingStream : public QObject 0031 { 0032 Q_OBJECT 0033 public: 0034 ScreencastingStream(QObject *parent); 0035 ~ScreencastingStream() override; 0036 0037 quint32 nodeId() const; 0038 0039 Q_SIGNALS: 0040 void created(quint32 nodeid); 0041 void failed(const QString &error); 0042 void closed(); 0043 0044 private: 0045 friend class Screencasting; 0046 QScopedPointer<ScreencastingStreamPrivate> d; 0047 }; 0048 0049 class KPIPEWIRE_EXPORT Screencasting : public QObject 0050 { 0051 Q_OBJECT 0052 public: 0053 explicit Screencasting(QObject *parent = nullptr); 0054 ~Screencasting() override; 0055 0056 enum CursorMode { 0057 Hidden = 1, 0058 Embedded = 2, 0059 Metadata = 4, 0060 }; 0061 Q_ENUM(CursorMode); 0062 0063 ScreencastingStream *createOutputStream(const QString &outputName, CursorMode mode); 0064 ScreencastingStream *createOutputStream(QScreen *screen, CursorMode mode); 0065 ScreencastingStream *createRegionStream(const QRect ®ion, qreal scaling, CursorMode mode); 0066 ScreencastingStream *createWindowStream(const QString &uuid, CursorMode mode); 0067 ScreencastingStream *createVirtualMonitorStream(const QString &name, const QSize &size, qreal scale, CursorMode mode); 0068 0069 void destroy(); 0070 0071 Q_SIGNALS: 0072 void initialized(); 0073 void removed(); 0074 void sourcesChanged(); 0075 0076 private: 0077 QScopedPointer<ScreencastingPrivate> d; 0078 };