File indexing completed on 2024-06-23 05:24:07

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 <QScreen>
0010 #include <memory>
0011 
0012 class ScreencastingPrivate;
0013 class ScreencastingStreamPrivate;
0014 class ScreencastingStream : public QObject
0015 {
0016     Q_OBJECT
0017 public:
0018     ScreencastingStream(QObject *parent);
0019     ~ScreencastingStream() override;
0020 
0021     quint32 nodeId() const;
0022     QSize size() const;
0023 
0024 Q_SIGNALS:
0025     void created(quint32 nodeid);
0026     void failed(const QString &error);
0027     void closed();
0028 
0029 private:
0030     friend class Screencasting;
0031     std::unique_ptr<ScreencastingStreamPrivate> d;
0032 };
0033 
0034 class Screencasting : public QObject
0035 {
0036     Q_OBJECT
0037 public:
0038     explicit Screencasting(QObject *parent = nullptr);
0039     ~Screencasting() override;
0040 
0041     enum CursorMode {
0042         Hidden = 1,
0043         Embedded = 2,
0044         Metadata = 4,
0045     };
0046     Q_ENUM(CursorMode)
0047 
0048     ScreencastingStream *createOutputStream(QScreen *screen, CursorMode mode);
0049     ScreencastingStream *createWorkspaceStream(CursorMode mode);
0050     ScreencastingStream *createRegionStream(const QRect &g, qreal scale, CursorMode mode);
0051 
0052     void destroy();
0053 
0054 Q_SIGNALS:
0055     void initialized();
0056     void removed();
0057     void sourcesChanged();
0058 
0059 private:
0060     std::unique_ptr<ScreencastingPrivate> d;
0061 };