mirror of
https://github.com/barry-ran/QtScrcpy.git
synced 2025-08-04 14:48:37 +00:00
feat: add group control
This commit is contained in:
parent
335185ea08
commit
ed24afb1a0
13 changed files with 673 additions and 13 deletions
|
@ -124,6 +124,13 @@ set(QC_UI_SOURCES
|
||||||
)
|
)
|
||||||
source_group(ui FILES ${QC_UI_SOURCES})
|
source_group(ui FILES ${QC_UI_SOURCES})
|
||||||
|
|
||||||
|
# group controller
|
||||||
|
set(QC_GROUP_CONTROLLER
|
||||||
|
groupcontroller/groupcontroller.h
|
||||||
|
groupcontroller/groupcontroller.cpp
|
||||||
|
)
|
||||||
|
source_group(groupcontroller FILES ${QC_GROUP_CONTROLLER})
|
||||||
|
|
||||||
# util
|
# util
|
||||||
set(QC_UTIL_SOURCES
|
set(QC_UTIL_SOURCES
|
||||||
util/config.h
|
util/config.h
|
||||||
|
@ -196,6 +203,7 @@ set(QC_PROJECT_SOURCES
|
||||||
${QC_UI_SOURCES}
|
${QC_UI_SOURCES}
|
||||||
${QC_UTIL_SOURCES}
|
${QC_UTIL_SOURCES}
|
||||||
${QC_MAIN_SOURCES}
|
${QC_MAIN_SOURCES}
|
||||||
|
${QC_GROUP_CONTROLLER}
|
||||||
${QC_PLANTFORM_SOURCES}
|
${QC_PLANTFORM_SOURCES}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,47 @@ public:
|
||||||
}
|
}
|
||||||
virtual void updateFPS(quint32 fps) { Q_UNUSED(fps); }
|
virtual void updateFPS(quint32 fps) { Q_UNUSED(fps); }
|
||||||
virtual void grabCursor(bool grab) {Q_UNUSED(grab);}
|
virtual void grabCursor(bool grab) {Q_UNUSED(grab);}
|
||||||
|
|
||||||
|
virtual void mouseEvent(const QMouseEvent *from, const QSize &frameSize, const QSize &showSize) {
|
||||||
|
Q_UNUSED(from);
|
||||||
|
Q_UNUSED(frameSize);
|
||||||
|
Q_UNUSED(showSize);
|
||||||
|
}
|
||||||
|
virtual void wheelEvent(const QWheelEvent *from, const QSize &frameSize, const QSize &showSize) {
|
||||||
|
Q_UNUSED(from);
|
||||||
|
Q_UNUSED(frameSize);
|
||||||
|
Q_UNUSED(showSize);
|
||||||
|
}
|
||||||
|
virtual void keyEvent(const QKeyEvent *from, const QSize &frameSize, const QSize &showSize) {
|
||||||
|
Q_UNUSED(from);
|
||||||
|
Q_UNUSED(frameSize);
|
||||||
|
Q_UNUSED(showSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void postGoBack() {}
|
||||||
|
virtual void postGoHome() {}
|
||||||
|
virtual void postGoMenu() {}
|
||||||
|
virtual void postAppSwitch() {}
|
||||||
|
virtual void postPower() {}
|
||||||
|
virtual void postVolumeUp() {}
|
||||||
|
virtual void postVolumeDown() {}
|
||||||
|
virtual void postCopy() {}
|
||||||
|
virtual void postCut() {}
|
||||||
|
virtual void setScreenPowerMode(bool open) { Q_UNUSED(open); }
|
||||||
|
virtual void expandNotificationPanel() {}
|
||||||
|
virtual void collapsePanel() {}
|
||||||
|
virtual void postBackOrScreenOn(bool down) { Q_UNUSED(down); }
|
||||||
|
virtual void postTextInput(QString &text) { Q_UNUSED(text); }
|
||||||
|
virtual void requestDeviceClipboard() {}
|
||||||
|
virtual void setDeviceClipboard(bool pause = true) { Q_UNUSED(pause); }
|
||||||
|
virtual void clipboardPaste() {}
|
||||||
|
virtual void pushFileRequest(const QString &file, const QString &devicePath) {
|
||||||
|
Q_UNUSED(file);
|
||||||
|
Q_UNUSED(devicePath);
|
||||||
|
}
|
||||||
|
virtual void installApkRequest(const QString &apkFile) { Q_UNUSED(apkFile); }
|
||||||
|
virtual void screenshot() {}
|
||||||
|
virtual void showTouch(bool show) { Q_UNUSED(show); }
|
||||||
};
|
};
|
||||||
|
|
||||||
class IDevice : public QObject {
|
class IDevice : public QObject {
|
||||||
|
|
|
@ -328,6 +328,10 @@ void Device::postGoBack()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_controller->postGoBack();
|
m_controller->postGoBack();
|
||||||
|
|
||||||
|
for (const auto& item : m_deviceObservers) {
|
||||||
|
item->postGoBack();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Device::postGoHome()
|
void Device::postGoHome()
|
||||||
|
@ -336,6 +340,10 @@ void Device::postGoHome()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_controller->postGoHome();
|
m_controller->postGoHome();
|
||||||
|
|
||||||
|
for (const auto& item : m_deviceObservers) {
|
||||||
|
item->postGoHome();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Device::postGoMenu()
|
void Device::postGoMenu()
|
||||||
|
@ -344,6 +352,10 @@ void Device::postGoMenu()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_controller->postGoMenu();
|
m_controller->postGoMenu();
|
||||||
|
|
||||||
|
for (const auto& item : m_deviceObservers) {
|
||||||
|
item->postGoMenu();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Device::postAppSwitch()
|
void Device::postAppSwitch()
|
||||||
|
@ -352,6 +364,10 @@ void Device::postAppSwitch()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_controller->postAppSwitch();
|
m_controller->postAppSwitch();
|
||||||
|
|
||||||
|
for (const auto& item : m_deviceObservers) {
|
||||||
|
item->postAppSwitch();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Device::postPower()
|
void Device::postPower()
|
||||||
|
@ -360,6 +376,10 @@ void Device::postPower()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_controller->postPower();
|
m_controller->postPower();
|
||||||
|
|
||||||
|
for (const auto& item : m_deviceObservers) {
|
||||||
|
item->postPower();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Device::postVolumeUp()
|
void Device::postVolumeUp()
|
||||||
|
@ -368,6 +388,10 @@ void Device::postVolumeUp()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_controller->postVolumeUp();
|
m_controller->postVolumeUp();
|
||||||
|
|
||||||
|
for (const auto& item : m_deviceObservers) {
|
||||||
|
item->postVolumeUp();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Device::postVolumeDown()
|
void Device::postVolumeDown()
|
||||||
|
@ -376,6 +400,10 @@ void Device::postVolumeDown()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_controller->postVolumeDown();
|
m_controller->postVolumeDown();
|
||||||
|
|
||||||
|
for (const auto& item : m_deviceObservers) {
|
||||||
|
item->postVolumeDown();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Device::postCopy()
|
void Device::postCopy()
|
||||||
|
@ -384,6 +412,10 @@ void Device::postCopy()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_controller->copy();
|
m_controller->copy();
|
||||||
|
|
||||||
|
for (const auto& item : m_deviceObservers) {
|
||||||
|
item->postCopy();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Device::postCut()
|
void Device::postCut()
|
||||||
|
@ -392,6 +424,10 @@ void Device::postCut()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_controller->cut();
|
m_controller->cut();
|
||||||
|
|
||||||
|
for (const auto& item : m_deviceObservers) {
|
||||||
|
item->postCut();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Device::setScreenPowerMode(bool open)
|
void Device::setScreenPowerMode(bool open)
|
||||||
|
@ -406,6 +442,10 @@ void Device::setScreenPowerMode(bool open)
|
||||||
mode = ControlMsg::SPM_OFF;
|
mode = ControlMsg::SPM_OFF;
|
||||||
}
|
}
|
||||||
m_controller->setScreenPowerMode(mode);
|
m_controller->setScreenPowerMode(mode);
|
||||||
|
|
||||||
|
for (const auto& item : m_deviceObservers) {
|
||||||
|
item->setScreenPowerMode(open);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Device::expandNotificationPanel()
|
void Device::expandNotificationPanel()
|
||||||
|
@ -414,6 +454,10 @@ void Device::expandNotificationPanel()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_controller->expandNotificationPanel();
|
m_controller->expandNotificationPanel();
|
||||||
|
|
||||||
|
for (const auto& item : m_deviceObservers) {
|
||||||
|
item->expandNotificationPanel();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Device::collapsePanel()
|
void Device::collapsePanel()
|
||||||
|
@ -422,6 +466,10 @@ void Device::collapsePanel()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_controller->collapsePanel();
|
m_controller->collapsePanel();
|
||||||
|
|
||||||
|
for (const auto& item : m_deviceObservers) {
|
||||||
|
item->collapsePanel();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Device::postBackOrScreenOn(bool down)
|
void Device::postBackOrScreenOn(bool down)
|
||||||
|
@ -430,6 +478,10 @@ void Device::postBackOrScreenOn(bool down)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_controller->postBackOrScreenOn(down);
|
m_controller->postBackOrScreenOn(down);
|
||||||
|
|
||||||
|
for (const auto& item : m_deviceObservers) {
|
||||||
|
item->postBackOrScreenOn(down);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Device::postTextInput(QString &text)
|
void Device::postTextInput(QString &text)
|
||||||
|
@ -438,6 +490,10 @@ void Device::postTextInput(QString &text)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_controller->postTextInput(text);
|
m_controller->postTextInput(text);
|
||||||
|
|
||||||
|
for (const auto& item : m_deviceObservers) {
|
||||||
|
item->postTextInput(text);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Device::requestDeviceClipboard()
|
void Device::requestDeviceClipboard()
|
||||||
|
@ -446,6 +502,10 @@ void Device::requestDeviceClipboard()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_controller->requestDeviceClipboard();
|
m_controller->requestDeviceClipboard();
|
||||||
|
|
||||||
|
for (const auto& item : m_deviceObservers) {
|
||||||
|
item->requestDeviceClipboard();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Device::setDeviceClipboard(bool pause)
|
void Device::setDeviceClipboard(bool pause)
|
||||||
|
@ -454,6 +514,10 @@ void Device::setDeviceClipboard(bool pause)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_controller->setDeviceClipboard(pause);
|
m_controller->setDeviceClipboard(pause);
|
||||||
|
|
||||||
|
for (const auto& item : m_deviceObservers) {
|
||||||
|
item->setDeviceClipboard(pause);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Device::clipboardPaste()
|
void Device::clipboardPaste()
|
||||||
|
@ -462,6 +526,10 @@ void Device::clipboardPaste()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_controller->clipboardPaste();
|
m_controller->clipboardPaste();
|
||||||
|
|
||||||
|
for (const auto& item : m_deviceObservers) {
|
||||||
|
item->clipboardPaste();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Device::pushFileRequest(const QString &file, const QString &devicePath)
|
void Device::pushFileRequest(const QString &file, const QString &devicePath)
|
||||||
|
@ -470,6 +538,10 @@ void Device::pushFileRequest(const QString &file, const QString &devicePath)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_fileHandler->onPushFileRequest(getSerial(), file, devicePath);
|
m_fileHandler->onPushFileRequest(getSerial(), file, devicePath);
|
||||||
|
|
||||||
|
for (const auto& item : m_deviceObservers) {
|
||||||
|
item->pushFileRequest(file, devicePath);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Device::installApkRequest(const QString &apkFile)
|
void Device::installApkRequest(const QString &apkFile)
|
||||||
|
@ -478,6 +550,10 @@ void Device::installApkRequest(const QString &apkFile)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_fileHandler->onInstallApkRequest(getSerial(), apkFile);
|
m_fileHandler->onInstallApkRequest(getSerial(), apkFile);
|
||||||
|
|
||||||
|
for (const auto& item : m_deviceObservers) {
|
||||||
|
item->installApkRequest(apkFile);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Device::mouseEvent(const QMouseEvent *from, const QSize &frameSize, const QSize &showSize)
|
void Device::mouseEvent(const QMouseEvent *from, const QSize &frameSize, const QSize &showSize)
|
||||||
|
@ -486,6 +562,10 @@ void Device::mouseEvent(const QMouseEvent *from, const QSize &frameSize, const Q
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_controller->mouseEvent(from, frameSize, showSize);
|
m_controller->mouseEvent(from, frameSize, showSize);
|
||||||
|
|
||||||
|
for (const auto& item : m_deviceObservers) {
|
||||||
|
item->mouseEvent(from, frameSize, showSize);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Device::wheelEvent(const QWheelEvent *from, const QSize &frameSize, const QSize &showSize)
|
void Device::wheelEvent(const QWheelEvent *from, const QSize &frameSize, const QSize &showSize)
|
||||||
|
@ -494,6 +574,10 @@ void Device::wheelEvent(const QWheelEvent *from, const QSize &frameSize, const Q
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_controller->wheelEvent(from, frameSize, showSize);
|
m_controller->wheelEvent(from, frameSize, showSize);
|
||||||
|
|
||||||
|
for (const auto& item : m_deviceObservers) {
|
||||||
|
item->wheelEvent(from, frameSize, showSize);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Device::keyEvent(const QKeyEvent *from, const QSize &frameSize, const QSize &showSize)
|
void Device::keyEvent(const QKeyEvent *from, const QSize &frameSize, const QSize &showSize)
|
||||||
|
@ -502,6 +586,10 @@ void Device::keyEvent(const QKeyEvent *from, const QSize &frameSize, const QSize
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_controller->keyEvent(from, frameSize, showSize);
|
m_controller->keyEvent(from, frameSize, showSize);
|
||||||
|
|
||||||
|
for (const auto& item : m_deviceObservers) {
|
||||||
|
item->keyEvent(from, frameSize, showSize);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Device::isCurrentCustomKeymap()
|
bool Device::isCurrentCustomKeymap()
|
||||||
|
|
|
@ -68,7 +68,6 @@ public:
|
||||||
|
|
||||||
void screenshot() override;
|
void screenshot() override;
|
||||||
void showTouch(bool show) override;
|
void showTouch(bool show) override;
|
||||||
//void grabCursor(bool grab);
|
|
||||||
|
|
||||||
bool isReversePort(quint16 port) override;
|
bool isReversePort(quint16 port) override;
|
||||||
const QString &getSerial() override;
|
const QString &getSerial() override;
|
||||||
|
|
440
QtScrcpy/groupcontroller/groupcontroller.cpp
Normal file
440
QtScrcpy/groupcontroller/groupcontroller.cpp
Normal file
|
@ -0,0 +1,440 @@
|
||||||
|
#include <QPointer>
|
||||||
|
|
||||||
|
#include "groupcontroller.h"
|
||||||
|
#include "videoform.h"
|
||||||
|
|
||||||
|
GroupController::GroupController(QObject *parent) : QObject(parent)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GroupController::isHost(const QString &serial)
|
||||||
|
{
|
||||||
|
auto data = qsc::IDeviceManage::getInstance().getDevice(serial)->getUserData();
|
||||||
|
if (!data) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return static_cast<VideoForm*>(data)->isHost();
|
||||||
|
}
|
||||||
|
|
||||||
|
QSize GroupController::getFrameSize(const QString &serial)
|
||||||
|
{
|
||||||
|
auto data = qsc::IDeviceManage::getInstance().getDevice(serial)->getUserData();
|
||||||
|
if (!data) {
|
||||||
|
return QSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
return static_cast<VideoForm*>(data)->frameSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
GroupController &GroupController::instance()
|
||||||
|
{
|
||||||
|
static GroupController gc;
|
||||||
|
return gc;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GroupController::updateDeviceState(const QString &serial)
|
||||||
|
{
|
||||||
|
if (!m_devices.contains(serial)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto device = qsc::IDeviceManage::getInstance().getDevice(serial);
|
||||||
|
if (!device) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isHost(serial)) {
|
||||||
|
device->registerDeviceObserver(this);
|
||||||
|
} else {
|
||||||
|
device->deRegisterDeviceObserver(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GroupController::addDevice(const QString &serial)
|
||||||
|
{
|
||||||
|
if (m_devices.contains(serial)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_devices.append(serial);
|
||||||
|
}
|
||||||
|
|
||||||
|
void GroupController::removeDevice(const QString &serial)
|
||||||
|
{
|
||||||
|
if (!m_devices.contains(serial)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_devices.removeOne(serial);
|
||||||
|
|
||||||
|
auto device = qsc::IDeviceManage::getInstance().getDevice(serial);
|
||||||
|
if (!device) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isHost(serial)) {
|
||||||
|
device->deRegisterDeviceObserver(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GroupController::mouseEvent(const QMouseEvent *from, const QSize &frameSize, const QSize &showSize)
|
||||||
|
{
|
||||||
|
for (const auto& serial : m_devices) {
|
||||||
|
if (true == isHost(serial)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
auto device = qsc::IDeviceManage::getInstance().getDevice(serial);
|
||||||
|
if (!device) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
device->mouseEvent(from, getFrameSize(serial), showSize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GroupController::wheelEvent(const QWheelEvent *from, const QSize &frameSize, const QSize &showSize)
|
||||||
|
{
|
||||||
|
for (const auto& serial : m_devices) {
|
||||||
|
if (true == isHost(serial)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
auto device = qsc::IDeviceManage::getInstance().getDevice(serial);
|
||||||
|
if (!device) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
device->wheelEvent(from, getFrameSize(serial), showSize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GroupController::keyEvent(const QKeyEvent *from, const QSize &frameSize, const QSize &showSize)
|
||||||
|
{
|
||||||
|
for (const auto& serial : m_devices) {
|
||||||
|
if (true == isHost(serial)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
auto device = qsc::IDeviceManage::getInstance().getDevice(serial);
|
||||||
|
if (!device) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
device->keyEvent(from, getFrameSize(serial), showSize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GroupController::postGoBack()
|
||||||
|
{
|
||||||
|
for (const auto& serial : m_devices) {
|
||||||
|
if (true == isHost(serial)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
auto device = qsc::IDeviceManage::getInstance().getDevice(serial);
|
||||||
|
if (!device) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
device->postGoBack();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GroupController::postGoHome()
|
||||||
|
{
|
||||||
|
for (const auto& serial : m_devices) {
|
||||||
|
if (true == isHost(serial)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
auto device = qsc::IDeviceManage::getInstance().getDevice(serial);
|
||||||
|
if (!device) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
device->postGoHome();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GroupController::postGoMenu()
|
||||||
|
{
|
||||||
|
for (const auto& serial : m_devices) {
|
||||||
|
if (true == isHost(serial)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
auto device = qsc::IDeviceManage::getInstance().getDevice(serial);
|
||||||
|
if (!device) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
device->postGoMenu();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GroupController::postAppSwitch()
|
||||||
|
{
|
||||||
|
for (const auto& serial : m_devices) {
|
||||||
|
if (true == isHost(serial)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
auto device = qsc::IDeviceManage::getInstance().getDevice(serial);
|
||||||
|
if (!device) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
device->postAppSwitch();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GroupController::postPower()
|
||||||
|
{
|
||||||
|
for (const auto& serial : m_devices) {
|
||||||
|
if (true == isHost(serial)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
auto device = qsc::IDeviceManage::getInstance().getDevice(serial);
|
||||||
|
if (!device) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
device->postPower();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GroupController::postVolumeUp()
|
||||||
|
{
|
||||||
|
for (const auto& serial : m_devices) {
|
||||||
|
if (true == isHost(serial)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
auto device = qsc::IDeviceManage::getInstance().getDevice(serial);
|
||||||
|
if (!device) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
device->postVolumeUp();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GroupController::postVolumeDown()
|
||||||
|
{
|
||||||
|
for (const auto& serial : m_devices) {
|
||||||
|
if (true == isHost(serial)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
auto device = qsc::IDeviceManage::getInstance().getDevice(serial);
|
||||||
|
if (!device) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
device->postVolumeDown();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GroupController::postCopy()
|
||||||
|
{
|
||||||
|
for (const auto& serial : m_devices) {
|
||||||
|
if (true == isHost(serial)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
auto device = qsc::IDeviceManage::getInstance().getDevice(serial);
|
||||||
|
if (!device) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
device->postCopy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GroupController::postCut()
|
||||||
|
{
|
||||||
|
for (const auto& serial : m_devices) {
|
||||||
|
if (true == isHost(serial)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
auto device = qsc::IDeviceManage::getInstance().getDevice(serial);
|
||||||
|
if (!device) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
device->postCut();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GroupController::setScreenPowerMode(bool open)
|
||||||
|
{
|
||||||
|
for (const auto& serial : m_devices) {
|
||||||
|
if (true == isHost(serial)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
auto device = qsc::IDeviceManage::getInstance().getDevice(serial);
|
||||||
|
if (!device) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
device->setScreenPowerMode(open);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GroupController::expandNotificationPanel()
|
||||||
|
{
|
||||||
|
for (const auto& serial : m_devices) {
|
||||||
|
if (true == isHost(serial)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
auto device = qsc::IDeviceManage::getInstance().getDevice(serial);
|
||||||
|
if (!device) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
device->expandNotificationPanel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GroupController::collapsePanel()
|
||||||
|
{
|
||||||
|
for (const auto& serial : m_devices) {
|
||||||
|
if (true == isHost(serial)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
auto device = qsc::IDeviceManage::getInstance().getDevice(serial);
|
||||||
|
if (!device) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
device->collapsePanel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GroupController::postBackOrScreenOn(bool down)
|
||||||
|
{
|
||||||
|
for (const auto& serial : m_devices) {
|
||||||
|
if (true == isHost(serial)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
auto device = qsc::IDeviceManage::getInstance().getDevice(serial);
|
||||||
|
if (!device) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
device->postBackOrScreenOn(down);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GroupController::postTextInput(QString &text)
|
||||||
|
{
|
||||||
|
for (const auto& serial : m_devices) {
|
||||||
|
if (true == isHost(serial)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
auto device = qsc::IDeviceManage::getInstance().getDevice(serial);
|
||||||
|
if (!device) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
device->postTextInput(text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GroupController::requestDeviceClipboard()
|
||||||
|
{
|
||||||
|
for (const auto& serial : m_devices) {
|
||||||
|
if (true == isHost(serial)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
auto device = qsc::IDeviceManage::getInstance().getDevice(serial);
|
||||||
|
if (!device) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
device->requestDeviceClipboard();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GroupController::setDeviceClipboard(bool pause)
|
||||||
|
{
|
||||||
|
for (const auto& serial : m_devices) {
|
||||||
|
if (true == isHost(serial)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
auto device = qsc::IDeviceManage::getInstance().getDevice(serial);
|
||||||
|
if (!device) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
device->setDeviceClipboard(pause);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GroupController::clipboardPaste()
|
||||||
|
{
|
||||||
|
for (const auto& serial : m_devices) {
|
||||||
|
if (true == isHost(serial)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
auto device = qsc::IDeviceManage::getInstance().getDevice(serial);
|
||||||
|
if (!device) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
device->clipboardPaste();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GroupController::pushFileRequest(const QString &file, const QString &devicePath)
|
||||||
|
{
|
||||||
|
for (const auto& serial : m_devices) {
|
||||||
|
if (true == isHost(serial)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
auto device = qsc::IDeviceManage::getInstance().getDevice(serial);
|
||||||
|
if (!device) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
device->pushFileRequest(file, devicePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GroupController::installApkRequest(const QString &apkFile)
|
||||||
|
{
|
||||||
|
for (const auto& serial : m_devices) {
|
||||||
|
if (true == isHost(serial)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
auto device = qsc::IDeviceManage::getInstance().getDevice(serial);
|
||||||
|
if (!device) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
device->installApkRequest(apkFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GroupController::screenshot()
|
||||||
|
{
|
||||||
|
for (const auto& serial : m_devices) {
|
||||||
|
if (true == isHost(serial)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
auto device = qsc::IDeviceManage::getInstance().getDevice(serial);
|
||||||
|
if (!device) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
device->screenshot();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GroupController::showTouch(bool show)
|
||||||
|
{
|
||||||
|
for (const auto& serial : m_devices) {
|
||||||
|
if (true == isHost(serial)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
auto device = qsc::IDeviceManage::getInstance().getDevice(serial);
|
||||||
|
if (!device) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
device->showTouch(show);
|
||||||
|
}
|
||||||
|
}
|
56
QtScrcpy/groupcontroller/groupcontroller.h
Normal file
56
QtScrcpy/groupcontroller/groupcontroller.h
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
#ifndef GROUPCONTROLLER_H
|
||||||
|
#define GROUPCONTROLLER_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include <QVector>
|
||||||
|
|
||||||
|
#include "QtScrcpyCore.h"
|
||||||
|
|
||||||
|
class GroupController : public QObject, public qsc::DeviceObserver
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
static GroupController& instance();
|
||||||
|
|
||||||
|
void updateDeviceState(const QString& serial);
|
||||||
|
void addDevice(const QString& serial);
|
||||||
|
void removeDevice(const QString& serial);
|
||||||
|
|
||||||
|
private:
|
||||||
|
// DeviceObserver
|
||||||
|
void mouseEvent(const QMouseEvent *from, const QSize &frameSize, const QSize &showSize) override;
|
||||||
|
void wheelEvent(const QWheelEvent *from, const QSize &frameSize, const QSize &showSize) override;
|
||||||
|
void keyEvent(const QKeyEvent *from, const QSize &frameSize, const QSize &showSize) override;
|
||||||
|
|
||||||
|
void postGoBack() override;
|
||||||
|
void postGoHome() override;
|
||||||
|
void postGoMenu() override;
|
||||||
|
void postAppSwitch() override;
|
||||||
|
void postPower() override;
|
||||||
|
void postVolumeUp() override;
|
||||||
|
void postVolumeDown() override;
|
||||||
|
void postCopy() override;
|
||||||
|
void postCut() override;
|
||||||
|
void setScreenPowerMode(bool open) override;
|
||||||
|
void expandNotificationPanel() override;
|
||||||
|
void collapsePanel() override;
|
||||||
|
void postBackOrScreenOn(bool down) override;
|
||||||
|
void postTextInput(QString &text) override;
|
||||||
|
void requestDeviceClipboard() override;
|
||||||
|
void setDeviceClipboard(bool pause = true) override;
|
||||||
|
void clipboardPaste() override;
|
||||||
|
void pushFileRequest(const QString &file, const QString &devicePath = "") override;
|
||||||
|
void installApkRequest(const QString &apkFile) override;
|
||||||
|
void screenshot() override;
|
||||||
|
void showTouch(bool show) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
explicit GroupController(QObject *parent = nullptr);
|
||||||
|
bool isHost(const QString& serial);
|
||||||
|
QSize getFrameSize(const QString& serial);
|
||||||
|
|
||||||
|
private:
|
||||||
|
QVector<QString> m_devices;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // GROUPCONTROLLER_H
|
|
@ -22,7 +22,7 @@ int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
// set env
|
// set env
|
||||||
#ifdef Q_OS_WIN32
|
#ifdef Q_OS_WIN32
|
||||||
qputenv("QTSCRCPY_ADB_PATH", "../../../QtScrcpy/QtScrcpyCore/src/third_party/adb/win/adb.exe");
|
qputenv("QTSCRCPY_ADB_PATH", "D:/android/sdk/platform-tools/adb.exe");
|
||||||
qputenv("QTSCRCPY_SERVER_PATH", "../../../QtScrcpy/QtScrcpyCore/src/third_party/scrcpy-server");
|
qputenv("QTSCRCPY_SERVER_PATH", "../../../QtScrcpy/QtScrcpyCore/src/third_party/scrcpy-server");
|
||||||
qputenv("QTSCRCPY_KEYMAP_PATH", "../../../keymap");
|
qputenv("QTSCRCPY_KEYMAP_PATH", "../../../keymap");
|
||||||
qputenv("QTSCRCPY_CONFIG_PATH", "../../../config");
|
qputenv("QTSCRCPY_CONFIG_PATH", "../../../config");
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#include "dialog.h"
|
#include "dialog.h"
|
||||||
#include "ui_dialog.h"
|
#include "ui_dialog.h"
|
||||||
#include "videoform.h"
|
#include "videoform.h"
|
||||||
|
#include "../groupcontroller/groupcontroller.h"
|
||||||
|
|
||||||
QString s_keyMapPath = "";
|
QString s_keyMapPath = "";
|
||||||
|
|
||||||
|
@ -457,10 +458,13 @@ void Dialog::onDeviceConnected(bool success, const QString &serial, const QStrin
|
||||||
videoForm->setGeometry(rc);
|
videoForm->setGeometry(rc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GroupController::instance().addDevice(serial);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Dialog::onDeviceDisconnected(QString serial)
|
void Dialog::onDeviceDisconnected(QString serial)
|
||||||
{
|
{
|
||||||
|
GroupController::instance().removeDevice(serial);
|
||||||
|
|
||||||
auto data = qsc::IDeviceManage::getInstance().getDevice(serial)->getUserData();
|
auto data = qsc::IDeviceManage::getInstance().getDevice(serial)->getUserData();
|
||||||
if (data) {
|
if (data) {
|
||||||
VideoForm* vf = static_cast<VideoForm*>(data);
|
VideoForm* vf = static_cast<VideoForm*>(data);
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#include "toolform.h"
|
#include "toolform.h"
|
||||||
#include "ui_toolform.h"
|
#include "ui_toolform.h"
|
||||||
#include "videoform.h"
|
#include "videoform.h"
|
||||||
|
#include "../groupcontroller/groupcontroller.h"
|
||||||
|
|
||||||
ToolForm::ToolForm(QWidget *adsorbWidget, AdsorbPositions adsorbPos) : MagneticWidget(adsorbWidget, adsorbPos), ui(new Ui::ToolForm)
|
ToolForm::ToolForm(QWidget *adsorbWidget, AdsorbPositions adsorbPos) : MagneticWidget(adsorbWidget, adsorbPos), ui(new Ui::ToolForm)
|
||||||
{
|
{
|
||||||
|
@ -14,6 +15,8 @@ ToolForm::ToolForm(QWidget *adsorbWidget, AdsorbPositions adsorbPos) : MagneticW
|
||||||
setWindowFlags(windowFlags() | Qt::FramelessWindowHint);
|
setWindowFlags(windowFlags() | Qt::FramelessWindowHint);
|
||||||
//setWindowFlags(windowFlags() & ~Qt::WindowMinMaxButtonsHint);
|
//setWindowFlags(windowFlags() & ~Qt::WindowMinMaxButtonsHint);
|
||||||
|
|
||||||
|
updateGroupControl();
|
||||||
|
|
||||||
initStyle();
|
initStyle();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,6 +30,11 @@ void ToolForm::setSerial(const QString &serial)
|
||||||
m_serial = serial;
|
m_serial = serial;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ToolForm::isHost()
|
||||||
|
{
|
||||||
|
return m_isHost;
|
||||||
|
}
|
||||||
|
|
||||||
void ToolForm::initStyle()
|
void ToolForm::initStyle()
|
||||||
{
|
{
|
||||||
IconHelper::Instance()->SetIcon(ui->fullScreenBtn, QChar(0xf0b2), 15);
|
IconHelper::Instance()->SetIcon(ui->fullScreenBtn, QChar(0xf0b2), 15);
|
||||||
|
@ -48,10 +56,13 @@ void ToolForm::initStyle()
|
||||||
|
|
||||||
void ToolForm::updateGroupControl()
|
void ToolForm::updateGroupControl()
|
||||||
{
|
{
|
||||||
auto device = qsc::IDeviceManage::getInstance().getDevice(m_serial);
|
if (m_isHost) {
|
||||||
if (!device) {
|
ui->groupControlBtn->setStyleSheet("color: red");
|
||||||
return;
|
} else {
|
||||||
|
ui->groupControlBtn->setStyleSheet("color: green");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GroupController::instance().updateDeviceState(m_serial);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ToolForm::mousePressEvent(QMouseEvent *event)
|
void ToolForm::mousePressEvent(QMouseEvent *event)
|
||||||
|
@ -130,7 +141,7 @@ void ToolForm::on_appSwitchBtn_clicked()
|
||||||
if (!device) {
|
if (!device) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
emit device->postAppSwitch();
|
device->postAppSwitch();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ToolForm::on_powerBtn_clicked()
|
void ToolForm::on_powerBtn_clicked()
|
||||||
|
@ -139,7 +150,7 @@ void ToolForm::on_powerBtn_clicked()
|
||||||
if (!device) {
|
if (!device) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
emit device->postPower();
|
device->postPower();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ToolForm::on_screenShotBtn_clicked()
|
void ToolForm::on_screenShotBtn_clicked()
|
||||||
|
@ -157,7 +168,7 @@ void ToolForm::on_volumeUpBtn_clicked()
|
||||||
if (!device) {
|
if (!device) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
emit device->postVolumeUp();
|
device->postVolumeUp();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ToolForm::on_volumeDownBtn_clicked()
|
void ToolForm::on_volumeDownBtn_clicked()
|
||||||
|
@ -166,7 +177,7 @@ void ToolForm::on_volumeDownBtn_clicked()
|
||||||
if (!device) {
|
if (!device) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
emit device->postVolumeDown();
|
device->postVolumeDown();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ToolForm::on_closeScreenBtn_clicked()
|
void ToolForm::on_closeScreenBtn_clicked()
|
||||||
|
@ -175,7 +186,7 @@ void ToolForm::on_closeScreenBtn_clicked()
|
||||||
if (!device) {
|
if (!device) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
emit device->setScreenPowerMode(false);
|
device->setScreenPowerMode(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ToolForm::on_expandNotifyBtn_clicked()
|
void ToolForm::on_expandNotifyBtn_clicked()
|
||||||
|
@ -184,7 +195,7 @@ void ToolForm::on_expandNotifyBtn_clicked()
|
||||||
if (!device) {
|
if (!device) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
emit device->expandNotificationPanel();
|
device->expandNotificationPanel();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ToolForm::on_touchBtn_clicked()
|
void ToolForm::on_touchBtn_clicked()
|
||||||
|
@ -200,7 +211,8 @@ void ToolForm::on_touchBtn_clicked()
|
||||||
|
|
||||||
void ToolForm::on_groupControlBtn_clicked()
|
void ToolForm::on_groupControlBtn_clicked()
|
||||||
{
|
{
|
||||||
|
m_isHost = !m_isHost;
|
||||||
|
updateGroupControl();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ToolForm::on_openScreenBtn_clicked()
|
void ToolForm::on_openScreenBtn_clicked()
|
||||||
|
@ -209,5 +221,5 @@ void ToolForm::on_openScreenBtn_clicked()
|
||||||
if (!device) {
|
if (!device) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
emit device->setScreenPowerMode(true);
|
device->setScreenPowerMode(true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,7 @@ public:
|
||||||
~ToolForm();
|
~ToolForm();
|
||||||
|
|
||||||
void setSerial(const QString& serial);
|
void setSerial(const QString& serial);
|
||||||
|
bool isHost();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void mousePressEvent(QMouseEvent *event);
|
void mousePressEvent(QMouseEvent *event);
|
||||||
|
@ -56,6 +57,7 @@ private:
|
||||||
QPoint m_dragPosition;
|
QPoint m_dragPosition;
|
||||||
QString m_serial;
|
QString m_serial;
|
||||||
bool m_showTouch = false;
|
bool m_showTouch = false;
|
||||||
|
bool m_isHost = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // TOOLFORM_H
|
#endif // TOOLFORM_H
|
||||||
|
|
|
@ -22,6 +22,9 @@
|
||||||
</property>
|
</property>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPushButton" name="groupControlBtn">
|
<widget class="QPushButton" name="groupControlBtn">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>group control</string>
|
||||||
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string/>
|
<string/>
|
||||||
</property>
|
</property>
|
||||||
|
|
|
@ -506,6 +506,11 @@ void VideoForm::switchFullScreen()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool VideoForm::isHost()
|
||||||
|
{
|
||||||
|
return m_toolForm->isHost();
|
||||||
|
}
|
||||||
|
|
||||||
void VideoForm::updateFPS(quint32 fps)
|
void VideoForm::updateFPS(quint32 fps)
|
||||||
{
|
{
|
||||||
//qDebug() << "FPS:" << fps;
|
//qDebug() << "FPS:" << fps;
|
||||||
|
|
|
@ -33,6 +33,8 @@ public:
|
||||||
void showFPS(bool show);
|
void showFPS(bool show);
|
||||||
void switchFullScreen();
|
void switchFullScreen();
|
||||||
|
|
||||||
|
bool isHost();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void onFrame(int width, int height, uint8_t* dataY, uint8_t* dataU, uint8_t* dataV,
|
void onFrame(int width, int height, uint8_t* dataY, uint8_t* dataU, uint8_t* dataV,
|
||||||
int linesizeY, int linesizeU, int linesizeV) override;
|
int linesizeY, int linesizeU, int linesizeV) override;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue