File indexing completed on 2024-04-28 04:58:58
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 #include "screencasting.h" 0008 #include "qwayland-zkde-screencast-unstable-v1.h" 0009 #include <KWayland/Client/registry.h> 0010 #include <QDebug> 0011 #include <QRect> 0012 #include <QPointer> 0013 0014 using namespace KWayland::Client; 0015 0016 class ScreencastingStreamPrivate : public QtWayland::zkde_screencast_stream_unstable_v1 0017 { 0018 public: 0019 ScreencastingStreamPrivate(ScreencastingStream *q) 0020 : q(q) 0021 { 0022 } 0023 ~ScreencastingStreamPrivate() override 0024 { 0025 close(); 0026 q->deleteLater(); 0027 } 0028 0029 void zkde_screencast_stream_unstable_v1_created(uint32_t node) override 0030 { 0031 m_nodeId = node; 0032 Q_EMIT q->created(node); 0033 } 0034 0035 void zkde_screencast_stream_unstable_v1_closed() override 0036 { 0037 Q_EMIT q->closed(); 0038 } 0039 0040 void zkde_screencast_stream_unstable_v1_failed(const QString &error) override 0041 { 0042 Q_EMIT q->failed(error); 0043 } 0044 0045 uint m_nodeId = 0; 0046 QPointer<ScreencastingStream> q; 0047 }; 0048 0049 ScreencastingStream::ScreencastingStream(QObject *parent) 0050 : QObject(parent) 0051 , d(new ScreencastingStreamPrivate(this)) 0052 { 0053 } 0054 0055 ScreencastingStream::~ScreencastingStream() = default; 0056 0057 quint32 ScreencastingStream::nodeId() const 0058 { 0059 return d->m_nodeId; 0060 } 0061 0062 class ScreencastingPrivate : public QtWayland::zkde_screencast_unstable_v1 0063 { 0064 public: 0065 ScreencastingPrivate(Registry *registry, int id, int version, Screencasting *q) 0066 : QtWayland::zkde_screencast_unstable_v1(*registry, id, version) 0067 , q(q) 0068 { 0069 } 0070 0071 ScreencastingPrivate(::zkde_screencast_unstable_v1 *screencasting, Screencasting *q) 0072 : QtWayland::zkde_screencast_unstable_v1(screencasting) 0073 , q(q) 0074 { 0075 } 0076 0077 ~ScreencastingPrivate() override 0078 { 0079 destroy(); 0080 } 0081 0082 Screencasting *const q; 0083 }; 0084 0085 Screencasting::Screencasting(QObject *parent) 0086 : QObject(parent) 0087 { 0088 } 0089 0090 Screencasting::Screencasting(Registry *registry, int id, int version, QObject *parent) 0091 : QObject(parent) 0092 , d(new ScreencastingPrivate(registry, id, version, this)) 0093 { 0094 } 0095 0096 Screencasting::~Screencasting() = default; 0097 0098 ScreencastingStream * Screencasting::createVirtualMonitorStream(const QString& name, const QSize& resolution, qreal dpr, Screencasting::CursorMode mode) 0099 { 0100 auto stream = new ScreencastingStream(this); 0101 stream->d->init(d->stream_virtual_output(name, resolution.width(), resolution.height(), wl_fixed_from_double(dpr), mode)); 0102 return stream; 0103 } 0104 0105 void Screencasting::setup(::zkde_screencast_unstable_v1 *screencasting) 0106 { 0107 d.reset(new ScreencastingPrivate(screencasting, this)); 0108 } 0109 0110 void Screencasting::destroy() 0111 { 0112 d.reset(nullptr); 0113 }