diff --git a/CMakeLists.txt b/CMakeLists.txt index 02f900974..effa1cc5b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -410,8 +410,6 @@ set(${PROJECT_NAME}_SOURCES src/video/corevideosource.h src/video/genericnetcamview.cpp src/video/genericnetcamview.h - src/video/groupnetcamview.cpp - src/video/groupnetcamview.h src/video/ivideosettings.h src/video/netcamview.cpp src/video/netcamview.h diff --git a/src/video/groupnetcamview.cpp b/src/video/groupnetcamview.cpp deleted file mode 100644 index 14a068c68..000000000 --- a/src/video/groupnetcamview.cpp +++ /dev/null @@ -1,247 +0,0 @@ -/* - Copyright © 2015-2019 by The qTox Project Contributors - - This file is part of qTox, a Qt-based graphical interface for Tox. - - qTox is libre software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - qTox is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with qTox. If not, see . -*/ - -#include "groupnetcamview.h" -#include "src/audio/audio.h" -#include "src/core/core.h" -#include "src/core/toxpk.h" -#include "src/friendlist.h" -#include "src/model/friend.h" -#include "src/nexus.h" -#include "src/persistence/profile.h" -#include "src/video/videosurface.h" -#include "src/widget/tool/croppinglabel.h" -#include -#include -#include -#include -#include - -#include -class LabeledVideo : public QFrame -{ -public: - LabeledVideo(const QPixmap& avatar, QString fontColorString, QWidget* parent = nullptr, bool expanding = true) - : QFrame(parent) - { - qDebug() << "Created expanding? " << expanding; - videoSurface = new VideoSurface(avatar, nullptr, expanding); - videoSurface->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - videoSurface->setMinimumHeight(32); - - connect(videoSurface, &VideoSurface::ratioChanged, this, &LabeledVideo::updateSize); - label = new CroppingLabel(this); - label->setTextFormat(Qt::PlainText); - label->setStyleSheet(QString("color: %1").arg(fontColorString)); - - label->setAlignment(Qt::AlignCenter); - - QVBoxLayout* layout = new QVBoxLayout(this); - layout->addWidget(videoSurface, 1); - layout->addWidget(label); - } - - ~LabeledVideo() {} - - VideoSurface* getVideoSurface() const - { - return videoSurface; - } - - void setText(const QString& text) - { - label->setText(text); - } - - QString getText() const - { - return label->text(); - } - - void setActive(bool active = true) - { - if (active) - setStyleSheet("QFrame { background-color: #414141; border-radius: 10px; }"); - else - setStyleSheet(QString()); - } - -protected: - void resizeEvent(QResizeEvent* event) final - { - updateSize(); - QWidget::resizeEvent(event); - } - -private slots: - void updateSize() - { - if (videoSurface->isExpanding()) { - int width = videoSurface->height() * videoSurface->getRatio(); - videoSurface->setMinimumWidth(width); - videoSurface->setMaximumWidth(width); - } - } - -private: - CroppingLabel* label; - VideoSurface* videoSurface; -}; - -GroupNetCamView::GroupNetCamView(int group, QWidget* parent) - : GenericNetCamView(parent) - , group(group) -{ - videoLabelSurface = new LabeledVideo(QPixmap(), "white", this, false); - videoSurface = videoLabelSurface->getVideoSurface(); - videoSurface->setMinimumHeight(256); - videoSurface->setContentsMargins(6, 6, 6, 0); - videoLabelSurface->setContentsMargins(0, 0, 0, 0); - videoLabelSurface->layout()->setMargin(0); - videoLabelSurface->setStyleSheet("QFrame { background-color: black; }"); - - // remove full screen button in audio group chat since it's useless there - enterFullScreenButton->hide(); - - QSplitter* splitter = new QSplitter(Qt::Vertical, this); - splitter->setChildrenCollapsible(false); - verLayout->insertWidget(0, splitter, 1); - splitter->addWidget(videoLabelSurface); - splitter->setStyleSheet( - "QSplitter { background-color: black; } QSplitter::handle { background-color: black; }"); - - QScrollArea* scrollArea = new QScrollArea(); - scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - - // Note this is needed to prevent oscillations that result in segfaults - scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn); - scrollArea->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); - - scrollArea->setFrameStyle(QFrame::NoFrame); - QWidget* widget = new QWidget(nullptr); - scrollArea->setWidgetResizable(true); - horLayout = new QHBoxLayout(widget); - horLayout->addStretch(1); - - selfVideoSurface = new LabeledVideo(Nexus::getProfile()->loadAvatar(), "black", this); - horLayout->addWidget(selfVideoSurface); - - horLayout->addStretch(1); - splitter->addWidget(scrollArea); - scrollArea->setWidget(widget); - - QTimer* timer = new QTimer(this); - timer->setInterval(1000); - connect(timer, &QTimer::timeout, this, &GroupNetCamView::onUpdateActivePeer); - timer->start(); - - connect(Nexus::getProfile(), &Profile::selfAvatarChanged, [this](const QPixmap& pixmap) { - selfVideoSurface->getVideoSurface()->setAvatar(pixmap); - setActive(); - }); - connect(Core::getInstance(), &Core::usernameSet, [this](const QString& username) { - selfVideoSurface->setText(username); - setActive(); - }); - - connect(Nexus::getProfile(), &Profile::friendAvatarChanged, this, - &GroupNetCamView::friendAvatarChanged); - - selfVideoSurface->setText(Core::getInstance()->getUsername()); -} - -void GroupNetCamView::clearPeers() -{ - for (const auto& peerPk : videoList.keys()) { - removePeer(peerPk); - } -} - -void GroupNetCamView::addPeer(const ToxPk& peer, const QString& name) -{ - QPixmap groupAvatar = Nexus::getProfile()->loadAvatar(peer); - LabeledVideo* labeledVideo = new LabeledVideo(groupAvatar, "black", this); - labeledVideo->setText(name); - horLayout->insertWidget(horLayout->count() - 1, labeledVideo); - PeerVideo peerVideo; - peerVideo.video = labeledVideo; - videoList.insert(peer, peerVideo); - - setActive(); -} - -void GroupNetCamView::removePeer(const ToxPk& peer) -{ - auto peerVideo = videoList.find(peer); - - if (peerVideo != videoList.end()) { - LabeledVideo* labeledVideo = peerVideo.value().video; - horLayout->removeWidget(labeledVideo); - labeledVideo->deleteLater(); - videoList.remove(peer); - - setActive(); - } -} - -void GroupNetCamView::onUpdateActivePeer() -{ - setActive(); -} - -void GroupNetCamView::setActive(const ToxPk& peer) -{ - if (peer.isEmpty()) { - videoLabelSurface->setText(selfVideoSurface->getText()); - activePeer = -1; - return; - } - - // TODO(sudden6): check if we can remove the code, it won't be reached right now -#if 0 - auto peerVideo = videoList.find(peer); - - if (peerVideo != videoList.end()) { - // When group video exists: - // videoSurface->setSource(peerVideo.value()->getVideoSurface()->source); - - auto lastVideo = videoList.find(activePeer); - - if (lastVideo != videoList.end()) - lastVideo.value().video->setActive(false); - - LabeledVideo* labeledVideo = peerVideo.value().video; - videoLabelSurface->setText(labeledVideo->getText()); - videoLabelSurface->getVideoSurface()->setAvatar(labeledVideo->getVideoSurface()->getAvatar()); - labeledVideo->setActive(); - - activePeer = peer; - } -#endif -} - -void GroupNetCamView::friendAvatarChanged(ToxPk friendPk, const QPixmap& pixmap) -{ - auto peerVideo = videoList.find(friendPk); - - if (peerVideo != videoList.end()) { - peerVideo.value().video->getVideoSurface()->setAvatar(pixmap); - setActive(); - } -} diff --git a/src/video/groupnetcamview.h b/src/video/groupnetcamview.h deleted file mode 100644 index d27f97b00..000000000 --- a/src/video/groupnetcamview.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - Copyright © 2015-2019 by The qTox Project Contributors - - This file is part of qTox, a Qt-based graphical interface for Tox. - - qTox is libre software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - qTox is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with qTox. If not, see . -*/ - -#ifndef GROUPNETCAMVIEW_H -#define GROUPNETCAMVIEW_H - -#include "genericnetcamview.h" - -#include "src/core/toxpk.h" - -#include - -class LabeledVideo; -class QHBoxLayout; - -class GroupNetCamView : public GenericNetCamView -{ -public: - GroupNetCamView(int group, QWidget* parent = nullptr); - void clearPeers(); - void addPeer(const ToxPk& peer, const QString& name); - void removePeer(const ToxPk& peer); - -private slots: - void onUpdateActivePeer(); - void friendAvatarChanged(ToxPk friendPk, const QPixmap& pixmap); - -private: - struct PeerVideo - { - LabeledVideo* video; - }; - - void setActive(const ToxPk& peer = ToxPk{}); - - QHBoxLayout* horLayout; - QMap videoList; - LabeledVideo* videoLabelSurface; - LabeledVideo* selfVideoSurface; - int activePeer; - int group; -}; - -#endif // GROUPNETCAMVIEW_H diff --git a/src/widget/form/groupchatform.cpp b/src/widget/form/groupchatform.cpp index 454afbb92..c95700dfb 100644 --- a/src/widget/form/groupchatform.cpp +++ b/src/widget/form/groupchatform.cpp @@ -28,7 +28,6 @@ #include "src/model/friend.h" #include "src/friendlist.h" #include "src/model/group.h" -#include "src/video/groupnetcamview.h" #include "src/widget/chatformheader.h" #include "src/widget/flowlayout.h" #include "src/widget/form/chatform.h" @@ -44,6 +43,7 @@ #include #include #include +#include namespace { @@ -211,10 +211,6 @@ void GroupChatForm::updateUserNames() peerLabels.insert(peerPk, label); } - if (netcam != nullptr) { - static_cast(netcam)->clearPeers(); - } - // add the labels in alphabetical order into the layout auto nickLabelList = peerLabels.values(); @@ -261,9 +257,6 @@ void GroupChatForm::peerAudioPlaying(ToxPk peerPk) peerAudioTimers[peerPk] = new QTimer(this); peerAudioTimers[peerPk]->setSingleShot(true); connect(peerAudioTimers[peerPk], &QTimer::timeout, [this, peerPk] { - if (netcam) { - static_cast(netcam)->removePeer(peerPk); - } auto it = peerLabels.find(peerPk); if (it != peerLabels.end()) { peerLabels[peerPk]->setProperty("playingAudio", LABEL_PEER_NOT_PLAYING_AUDIO); @@ -273,11 +266,6 @@ void GroupChatForm::peerAudioPlaying(ToxPk peerPk) delete peerAudioTimers[peerPk]; peerAudioTimers[peerPk] = nullptr; }); - if (netcam) { - static_cast(netcam)->removePeer(peerPk); - const auto nameIt = group->getPeerList().find(peerPk); - static_cast(netcam)->addPeer(peerPk, nameIt.value()); - } } peerLabels[peerPk]->setStyleSheet(Style::getStylesheet(PEER_LABEL_STYLE_SHEET_PATH)); @@ -342,7 +330,6 @@ void GroupChatForm::onCallClicked() audioInputFlag = true; audioOutputFlag = true; inCall = true; - showNetcam(); } else { leaveGroupCall(); } @@ -360,17 +347,7 @@ void GroupChatForm::onCallClicked() GenericNetCamView* GroupChatForm::createNetcam() { - auto view = new GroupNetCamView(group->getId(), this); - - const auto& names = group->getPeerList(); - const auto ownPk = Core::getInstance()->getSelfPublicKey(); - for (const auto& peerPk : names.keys()) { - auto timerIt = peerAudioTimers.find(peerPk); - if (peerPk != ownPk && timerIt != peerAudioTimers.end()) { - static_cast(view)->addPeer(peerPk, names.find(peerPk).value()); - } - } - return view; + return static_cast(nullptr); } void GroupChatForm::keyPressEvent(QKeyEvent* ev) @@ -477,5 +454,4 @@ void GroupChatForm::leaveGroupCall() audioInputFlag = false; audioOutputFlag = false; inCall = false; - hideNetcam(); }