diff --git a/.gitignore b/.gitignore index fde0371a9..3a678c7ca 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ WORK OUTPUT Makefile CMakeLists.txt.user +build* build-*-Debug build-*-Default prepare.conf.user diff --git a/CMakeLists.txt b/CMakeLists.txt index 6216d8afc..ca8236262 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -174,6 +174,8 @@ endif() if(UNIX AND NOT APPLE) set(CMAKE_INSTALL_RPATH "$ORIGIN:$ORIGIN/lib64:$ORIGIN/../lib64:$ORIGIN/lib:$ORIGIN/../lib:${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_LIBDIR}") list(APPEND APP_OPTIONS "-DCMAKE_INSTALL_RPATH=${CMAKE_INSTALL_RPATH}") +elseif(APPLE) + list(APPEND APP_OPTIONS "-DENABLE_FAT_BINARY=ON") #Disable XCFrameworks as it is not supported. endif() if(CMAKE_OSX_DEPLOYMENT_TARGET) list(APPEND APP_OPTIONS "-DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}") diff --git a/linphone-app/assets/images/conference_layout_active_speaker_custom.svg b/linphone-app/assets/images/conference_layout_active_speaker_custom.svg new file mode 100644 index 000000000..08fa0bcab --- /dev/null +++ b/linphone-app/assets/images/conference_layout_active_speaker_custom.svg @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + diff --git a/linphone-app/assets/images/conference_layout_grid_custom.svg b/linphone-app/assets/images/conference_layout_grid_custom.svg index 1b03172e4..52a8c5855 100644 --- a/linphone-app/assets/images/conference_layout_grid_custom.svg +++ b/linphone-app/assets/images/conference_layout_grid_custom.svg @@ -4,16 +4,15 @@ height="80" viewBox="0 0 80 80" version="1.1" - id="svg90" - sodipodi:docname="conference_layout_grid.svg" + id="svg26" + sodipodi:docname="conference_layout_grid_custom.svg" inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"> + inkscape:current-layer="svg26" /> + id="defs10"> + width="27" + height="33" + rx="5" /> + width="27" + height="33" + rx="5" /> + width="27" + height="33" + rx="5" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + width="27" + height="33" + rx="5" /> + + + + + id="g24" + transform="matrix(0.59895046,0,0,0.70984408,-4.4527707,-12.683919)"> + + - - + id="g18"> + - - - - - - - - - - + id="g22"> + diff --git a/linphone-app/resources.qrc b/linphone-app/resources.qrc index 161b54f49..30fe01447 100644 --- a/linphone-app/resources.qrc +++ b/linphone-app/resources.qrc @@ -56,7 +56,7 @@ assets/images/conference_custom.svg assets/images/conference_layout_grid_custom.svg assets/images/conference_layout_grid.svg - assets/images/conference_layout_active_speaker.svg + assets/images/conference_layout_active_speaker_custom.svg assets/images/contact_add_custom.svg assets/images/contact_card_photo_custom.svg assets/images/contact_custom.svg diff --git a/linphone-app/src/components/calls/CallsListModel.cpp b/linphone-app/src/components/calls/CallsListModel.cpp index ae4daf7d6..593010ab7 100644 --- a/linphone-app/src/components/calls/CallsListModel.cpp +++ b/linphone-app/src/components/calls/CallsListModel.cpp @@ -184,7 +184,7 @@ void CallsListModel::launchVideoCall (const QString &sipAddress, const QString& shared_ptr params = core->createCallParams(nullptr); - params->setConferenceVideoLayout(linphone::ConferenceLayout::Grid); + params->setConferenceVideoLayout(options.contains("layout") ? LinphoneEnums::toLinphone((LinphoneEnums::ConferenceLayout)options["layout"].toInt()) : linphone::ConferenceLayout::Grid); params->enableMic(options.contains("micro") ? options["micro"].toBool() : true); bool enableVideo = options.contains("video") ? options["video"].toBool() : true; diff --git a/linphone-app/src/components/camera/Camera.cpp b/linphone-app/src/components/camera/Camera.cpp index 8835171b6..0f8225829 100644 --- a/linphone-app/src/components/camera/Camera.cpp +++ b/linphone-app/src/components/camera/Camera.cpp @@ -80,8 +80,9 @@ void Camera::resetWindowId() { QQuickFramebufferObject::Renderer *Camera::createRenderer () const { QQuickFramebufferObject::Renderer * renderer = NULL; - bool useDefaultWindow = false; + bool useDefaultWindow = true; if(mIsPreview){ + qWarning() << "Setting Camera to Preview"; renderer = (QQuickFramebufferObject::Renderer *)CoreManager::getInstance()->getCore()->getNativePreviewWindowId(); if(renderer) CoreManager::getInstance()->getCore()->setNativePreviewWindowId(NULL);// Reset @@ -92,17 +93,19 @@ QQuickFramebufferObject::Renderer *Camera::createRenderer () const { if(mCallModel){ auto call = mCallModel->getCall(); if(call){ + qWarning() << "Setting Camera to CallModel"; renderer = (QQuickFramebufferObject::Renderer *) call->getNativeVideoWindowId(); if(renderer) call->setNativeVideoWindowId(NULL);// Reset renderer = (QQuickFramebufferObject::Renderer *) call->createNativeVideoWindowId(); if(renderer) call->setNativeVideoWindowId(renderer); - }else - useDefaultWindow = true; + useDefaultWindow = false; + } }else if( mParticipantDeviceModel){ auto participantDevice = mParticipantDeviceModel->getDevice(); if(participantDevice){ + qWarning() << "Setting Camera to Participant Device"; renderer = (QQuickFramebufferObject::Renderer *)participantDevice->getNativeVideoWindowId(); if(renderer) participantDevice->setNativeVideoWindowId(NULL);// Reset @@ -110,10 +113,11 @@ QQuickFramebufferObject::Renderer *Camera::createRenderer () const { renderer = (QQuickFramebufferObject::Renderer *) participantDevice->createNativeVideoWindowId(); if(renderer) participantDevice->setNativeVideoWindowId(renderer); - }else - useDefaultWindow = true; + useDefaultWindow = false; + } } if(useDefaultWindow){ + qWarning() << "Setting Camera to Defaul tWindow"; renderer = (QQuickFramebufferObject::Renderer *)CoreManager::getInstance()->getCore()->getNativeVideoWindowId(); if(renderer) CoreManager::getInstance()->getCore()->setNativeVideoWindowId(NULL); @@ -123,10 +127,13 @@ QQuickFramebufferObject::Renderer *Camera::createRenderer () const { } } if( !renderer){ + QTimer::singleShot(1, this, &Camera::isNotReady);// Workaround for const createRenderer qWarning() << "Camera stream couldn't start for Rendering. Retrying in 1s"; renderer = new CameraDummy(); QTimer::singleShot(1000, this, &Camera::requestNewRenderer); + }else{ + QTimer::singleShot(1, this, &Camera::isReady);// Workaround for const createRenderer } return renderer; } @@ -141,6 +148,10 @@ bool Camera::getIsPreview () const { return mIsPreview; } +bool Camera::getIsReady () const { + return mIsReady; +} + ParticipantDeviceModel * Camera::getParticipantDeviceModel() const{ return mParticipantDeviceModel; } @@ -167,6 +178,13 @@ void Camera::setIsPreview (bool status) { } } +void Camera::setIsReady(bool status) { + if (mIsReady != status) { + mIsReady = status; + emit isReadyChanged(); + } +} + void Camera::setParticipantDeviceModel(ParticipantDeviceModel * participantDeviceModel){ if (mParticipantDeviceModel != participantDeviceModel) { mParticipantDeviceModel = participantDeviceModel; @@ -175,6 +193,13 @@ if (mParticipantDeviceModel != participantDeviceModel) { } } +void Camera::isReady(){ + setIsReady(true); +} +void Camera::isNotReady(){ + setIsReady(false); +} + void Camera::activatePreview(){ mPreviewCounterMutex.lock(); if (++mPreviewCounter == 1) diff --git a/linphone-app/src/components/camera/Camera.hpp b/linphone-app/src/components/camera/Camera.hpp index 6e9908442..ed5c54de7 100644 --- a/linphone-app/src/components/camera/Camera.hpp +++ b/linphone-app/src/components/camera/Camera.hpp @@ -43,6 +43,7 @@ class Camera : public QQuickFramebufferObject { Q_PROPERTY(CallModel * call READ getCallModel WRITE setCallModel NOTIFY callChanged); Q_PROPERTY(ParticipantDeviceModel * participantDeviceModel READ getParticipantDeviceModel WRITE setParticipantDeviceModel NOTIFY participantDeviceModelChanged) Q_PROPERTY(bool isPreview READ getIsPreview WRITE setIsPreview NOTIFY isPreviewChanged); + Q_PROPERTY(bool isReady READ getIsReady WRITE setIsReady NOTIFY isReadyChanged); public: Camera (QQuickItem *parent = Q_NULLPTR); @@ -55,25 +56,32 @@ public: static QMutex mPreviewCounterMutex; static int mPreviewCounter; + void isReady(); + void isNotReady(); + signals: void callChanged (CallModel *callModel); void isPreviewChanged (bool isPreview); + void isReadyChanged(); void participantDeviceModelChanged(ParticipantDeviceModel *participantDeviceModel); void requestNewRenderer(); private: CallModel *getCallModel () const; bool getIsPreview () const; + bool getIsReady () const; ParticipantDeviceModel * getParticipantDeviceModel() const; void setCallModel (CallModel *callModel); void setIsPreview (bool status); + void setIsReady(bool status); void setParticipantDeviceModel(ParticipantDeviceModel * participantDeviceModel); void activatePreview(); void deactivatePreview(); bool mIsPreview = false; + bool mIsReady = false; CallModel *mCallModel = nullptr; ParticipantDeviceModel *mParticipantDeviceModel = nullptr; diff --git a/linphone-app/src/components/other/colors/ColorListModel.hpp b/linphone-app/src/components/other/colors/ColorListModel.hpp index 0e14dcf55..2f2bd531e 100644 --- a/linphone-app/src/components/other/colors/ColorListModel.hpp +++ b/linphone-app/src/components/other/colors/ColorListModel.hpp @@ -113,7 +113,10 @@ class ColorListModel : public ProxyListModel { ADD_COLOR("event_in", "#96C11F", "Event colors that are incoming") ADD_COLOR("event_out", "#18A7AF", "Event colors that are outgoing") - ADD_COLOR("conference_bg", "#D0D8DE", "Conferences : Background entry") + ADD_COLOR("conference_entry_bg", "#D0D8DE", "Conferences : Background entry") + ADD_COLOR("conference_out_avatar_bg", "#A1A1A1", "Conferences: Background avatar") + ADD_COLOR("conference_bg", "#798791", "Conferences: Background") + // Standard actions // diff --git a/linphone-app/src/components/participant/ParticipantDeviceProxyModel.cpp b/linphone-app/src/components/participant/ParticipantDeviceProxyModel.cpp index 9c514fadd..2c47af106 100644 --- a/linphone-app/src/components/participant/ParticipantDeviceProxyModel.cpp +++ b/linphone-app/src/components/participant/ParticipantDeviceProxyModel.cpp @@ -95,6 +95,7 @@ void ParticipantDeviceProxyModel::setShowMe(const bool& show){ if( mShowMe != show) { mShowMe = show; emit showMeChanged(); + invalidate(); } } diff --git a/linphone-app/src/components/participant/ParticipantDeviceProxyModel.hpp b/linphone-app/src/components/participant/ParticipantDeviceProxyModel.hpp index 4aa173db1..d8673f05a 100644 --- a/linphone-app/src/components/participant/ParticipantDeviceProxyModel.hpp +++ b/linphone-app/src/components/participant/ParticipantDeviceProxyModel.hpp @@ -66,7 +66,7 @@ protected: QSharedPointer mDevices; CallModel * mCallModel; - bool mShowMe = false; + bool mShowMe = true; }; #endif diff --git a/linphone-app/ui/modules/Linphone/Camera/CameraItem.qml b/linphone-app/ui/modules/Linphone/Camera/CameraItem.qml index 1e8fc5d95..68a390613 100644 --- a/linphone-app/ui/modules/Linphone/Camera/CameraItem.qml +++ b/linphone-app/ui/modules/Linphone/Camera/CameraItem.qml @@ -17,35 +17,22 @@ import 'qrc:/ui/scripts/Utils/utils.js' as Utils Item { id: container property ParticipantDeviceModel currentDevice - property bool isPreview: !container.currentDevice || container.currentDevice.isMe + property CallModel callModel + property bool isPreview: !callModel && ( !container.currentDevice || container.currentDevice.isMe) property bool isFullscreen: false property bool hideCamera: false //callModel.pausedByUser property bool isPaused: false property bool isVideoEnabled: enabled && (!container.currentDevice || (container.currentDevice && container.currentDevice.videoEnabled)) + property bool isReady: cameraLoader.item && cameraLoader.item.isReady onCurrentDeviceChanged: resetActive() function resetActive(){ resetTimer.resetActive() } - Component { - id: avatar - - IncallAvatar { - participantDeviceModel: container.currentDevice - height: Utils.computeAvatarSize(container, CallStyle.container.avatar.maxSize) - width: height - } - } - Loader { - anchors.centerIn: parent - - active: container.currentDevice && !container.currentDevice.isMe && (!container.currentDevice.videoEnabled || container.isFullscreen) - sourceComponent: avatar - } + Loader { id: cameraLoader property bool resetActive: false - anchors.fill: parent active: container.enabled && !resetActive && container.isVideoEnabled //avatarCell.currentDevice && (avatarCell.currentDevice.videoEnabled && !conference._fullscreen) @@ -70,13 +57,13 @@ Item { id: camera Camera { participantDeviceModel: container.currentDevice + call: container.callModel anchors.fill: parent isPreview: container.isPreview onRequestNewRenderer: {resetTimer.resetActive()} Component.onDestruction: {resetWindowId(); console.log("Destroyed Camera [" + isPreview + "] : " + camera)} Component.onCompleted: console.log("Completed Camera [" + isPreview + "] : " + camera) - } } } diff --git a/linphone-app/ui/modules/Linphone/Camera/CameraView.qml b/linphone-app/ui/modules/Linphone/Camera/CameraView.qml index 683c36124..16022f663 100644 --- a/linphone-app/ui/modules/Linphone/Camera/CameraView.qml +++ b/linphone-app/ui/modules/Linphone/Camera/CameraView.qml @@ -2,20 +2,25 @@ import QtQuick 2.7 import QtQuick.Layouts 1.3 import QtGraphicalEffects 1.12 +import App.Styles 1.0 import Common 1.0 import Common.Styles 1.0 import Linphone 1.0 import Linphone.Styles 1.0 +import 'qrc:/ui/scripts/Utils/utils.js' as Utils + // ============================================================================= Item{ id: mainItem property alias currentDevice: camera.currentDevice + property alias callModel: camera.callModel property alias hideCamera: camera.hideCamera property alias isPaused: camera.isPaused property alias isPreview: camera.isPreview + property alias isFullscreen: camera.isFullscreen property bool showCloseButton: true - property color color : CameraViewStyle.backgroundColor + property color color : CameraViewStyle.outBackgroundColor signal closeRequested() MouseArea{ @@ -36,10 +41,27 @@ Item{ color: mainItem.color anchors.fill: parent radius: CameraViewStyle.radius + Component { + id: avatar + + IncallAvatar { + participantDeviceModel: mainItem.currentDevice + height: Utils.computeAvatarSize(mainItem, CallStyle.container.avatar.maxSize) + width: height + backgroundColor: CameraViewStyle.inAvatarBackgroundColor + } + } + Loader { + anchors.centerIn: parent + + active: mainItem.currentDevice && !camera.isReady //&& !mainItem.currentDevice.isMe && (!mainItem.currentDevice.videoEnabled || mainItem.isFullscreen) + sourceComponent: avatar + } } - + Rectangle{ id: showArea + anchors.fill: parent radius: CameraViewStyle.radius visible: false @@ -47,14 +69,15 @@ Item{ } CameraItem{ id: camera + anchors.centerIn: parent anchors.fill: parent - visible: true + visible: false } OpacityMask{ id: renderedCamera anchors.fill: parent source: camera - maskSource: backgroundArea + maskSource: showArea invert:false visible: true @@ -99,7 +122,7 @@ Item{ } Text{ id: username - visible: mainItem.currentDevice + visible: mainItem.currentDevice anchors.right: parent.right anchors.left: parent.left anchors.bottom: parent.bottom @@ -132,8 +155,8 @@ Item{ visible: mainItem.showCloseButton && camera.isPreview anchors.right: parent.right anchors.top: parent.top - anchors.rightMargin: 15 - anchors.topMargin: 15 + anchors.rightMargin: 5 + anchors.topMargin: 5 isCustom: true colorSet: CameraViewStyle.closePreview onClicked: mainItem.closeRequested() diff --git a/linphone-app/ui/modules/Linphone/Styles/Camera/CameraViewStyle.qml b/linphone-app/ui/modules/Linphone/Styles/Camera/CameraViewStyle.qml index c79e8ee7c..b15df4263 100644 --- a/linphone-app/ui/modules/Linphone/Styles/Camera/CameraViewStyle.qml +++ b/linphone-app/ui/modules/Linphone/Styles/Camera/CameraViewStyle.qml @@ -10,8 +10,10 @@ import ColorsList 1.0 QtObject { property string sectionName: 'CameraView' - property color backgroundColor: ColorsList.add(sectionName+'_description', '', '', '#798791').color - property int radius : 8 + property color outBackgroundColor: ColorsList.add(sectionName+'_out_bg', 'conference_out_avatar_bg').color + property color inAvatarBackgroundColor: ColorsList.add(sectionName+'_in_bg', 'conference_bg').color + + property int radius : 10 property QtObject contactDescription: QtObject { property color color: ColorsList.add(sectionName+'_username', 'q').color diff --git a/linphone-app/ui/modules/Linphone/Styles/Chat/ChatCalendarMessageStyle.qml b/linphone-app/ui/modules/Linphone/Styles/Chat/ChatCalendarMessageStyle.qml index a7cc5d701..e57443f62 100644 --- a/linphone-app/ui/modules/Linphone/Styles/Chat/ChatCalendarMessageStyle.qml +++ b/linphone-app/ui/modules/Linphone/Styles/Chat/ChatCalendarMessageStyle.qml @@ -24,7 +24,7 @@ QtObject { property int lineHeight: 20 property QtObject backgroundColor: QtObject { - property color normal: ColorsList.add(sectionName+'_conference_bg_n', 'conference_bg').color + property color normal: ColorsList.add(sectionName+'_conference_bg_n', 'conference_entry_bg').color property color hovered: ColorsList.add(sectionName+'_conference_bg_h', 'g10').color } diff --git a/linphone-app/ui/views/App/Calls/VideoConference.qml b/linphone-app/ui/views/App/Calls/VideoConference.qml index 9e58a50bf..161d4f6e4 100644 --- a/linphone-app/ui/views/App/Calls/VideoConference.qml +++ b/linphone-app/ui/views/App/Calls/VideoConference.qml @@ -168,8 +168,6 @@ Rectangle { anchors.right: parent.right anchors.bottom: actionsButtons.top - anchors.leftMargin: 70 - anchors.rightMargin: rightMenu.visible ? 70 : 15 anchors.topMargin: 15 anchors.bottomMargin: 20 onClicked: { @@ -178,10 +176,13 @@ Rectangle { +Math.floor(Math.random()*255).toString(16) +Math.floor(Math.random()*255).toString(16)}) } + Component{ id: gridComponent VideoConferenceGrid{ id: grid + anchors.leftMargin: 70 + anchors.rightMargin: rightMenu.visible ? 15 : 70 callModel: conference.callModel } } @@ -190,22 +191,43 @@ Rectangle { VideoConferenceActiveSpeaker{ id: activeSpeaker callModel: conference.callModel + isRightReducedLayout: rightMenu.visible + isLeftReducedLayout: conference.listCallsOpened } } RowLayout{ anchors.fill: parent Loader{ + id: conferenceLayout Layout.fillHeight: true - Layout.fillWidth: true + Layout.fillWidth: true sourceComponent: conference.callModel.conferenceVideoLayout == LinphoneEnums.ConferenceLayoutGrid ? gridComponent : activeSpeakerComponent onSourceComponentChanged: console.log(conference.callModel.conferenceVideoLayout) active: conference.callModel + ColumnLayout { + anchors.fill: parent + visible: !conference.callModel || !conferenceLayout.item || conferenceLayout.item.participantCount == 0 + BusyIndicator{ + Layout.preferredHeight: 50 + Layout.preferredWidth: 50 + Layout.alignment: Qt.AlignCenter + running: parent.visible + color: VideoConferenceStyle.buzyColor + } + Text{ + Layout.alignment: Qt.AlignCenter + text: "Video conference is not ready. Please Wait..." + color: VideoConferenceStyle.buzyColor + } + } } VideoConferenceMenu{ id: rightMenu Layout.fillHeight: true Layout.preferredWidth: 400 + Layout.rightMargin: 30 callModel: conference.callModel + visible: false onClose: rightMenu.visible = !rightMenu.visible } } diff --git a/linphone-app/ui/views/App/Calls/VideoConferenceActiveSpeaker.qml b/linphone-app/ui/views/App/Calls/VideoConferenceActiveSpeaker.qml index e085e6911..45095294d 100644 --- a/linphone-app/ui/views/App/Calls/VideoConferenceActiveSpeaker.qml +++ b/linphone-app/ui/views/App/Calls/VideoConferenceActiveSpeaker.qml @@ -20,24 +20,61 @@ import 'qrc:/ui/scripts/Utils/utils.js' as Utils // ============================================================================= Item { - id: grid - property alias callModel: participantDevices.callModel - anchors.fill: parent + id: mainItem + property alias callModel: allDevices.callModel + property bool isRightReducedLayout: false + property bool isLeftReducedLayout: false + property alias showMe : allDevices.showMe + property int participantCount: allDevices.count + anchors.fill: parent property ParticipantDeviceProxyModel participantDevices : ParticipantDeviceProxyModel { - id: participantDevices + id: allDevices showMe: true onParticipantSpeaking: cameraView.currentDevice = speakingDevice } CameraView{ id: cameraView - enabled: index >=0 + callModel: mainItem.callModel anchors.fill: parent + anchors.leftMargin: isRightReducedLayout || isLeftReducedLayout? 30 : 140 + anchors.rightMargin: isRightReducedLayout ? 10 : 140 isPaused: callModel.pausedByUser || currentDevice && currentDevice.isPaused //callModel.pausedByUser showCloseButton: false - // onCloseRequested: grid.remove( index) color: 'black' } + ScrollableListView{ + id: miniViews + anchors.right: parent.right + anchors.top: parent.top + anchors.bottom: parent.bottom + anchors.rightMargin: 30 + anchors.topMargin: 30 + anchors.bottomMargin: 30 + //property int maxShowedCount: 4 + property int cellHeight: 150 + + width: 16 * cellHeight / 9 + onCountChanged: {console.log("Delegate count = "+count+"/"+mainItem.participantDevices.count)} + model: mainItem.participantDevices + spacing: 15 + verticalLayoutDirection: ItemView.BottomToTop + delegate:Item{ + height: miniViews.cellHeight + width: miniViews.width + CameraView{ + id: miniView + anchors.centerIn: parent + height: miniViews.cellHeight - 6 + width: miniViews.width - 6 + enabled: index >=0 + currentDevice: modelData + isPaused: mainItem.callModel.pausedByUser || currentDevice && currentDevice.isPaused //callModel.pausedByUser + onCloseRequested: mainItem.showMe = false + //color: 'black' + } + } + } } diff --git a/linphone-app/ui/views/App/Calls/VideoConferenceGrid.qml b/linphone-app/ui/views/App/Calls/VideoConferenceGrid.qml index 902b021fd..ced3ab20e 100644 --- a/linphone-app/ui/views/App/Calls/VideoConferenceGrid.qml +++ b/linphone-app/ui/views/App/Calls/VideoConferenceGrid.qml @@ -22,6 +22,7 @@ import 'qrc:/ui/scripts/Utils/utils.js' as Utils Mosaic { id: grid property alias callModel: participantDevices.callModel + property int participantCount: gridModel.count anchors.fill: parent squaredDisplay: true @@ -71,9 +72,9 @@ Mosaic { enabled: index >=0 anchors.fill: parent currentDevice: avatarCell.currentDevice - isPaused: callModel.pausedByUser || avatarCell.currentDevice && avatarCell.currentDevice.isPaused //callModel.pausedByUser + isPaused: grid.callModel.pausedByUser || avatarCell.currentDevice && avatarCell.currentDevice.isPaused //callModel.pausedByUser onCloseRequested: grid.remove( index) - color: 'black' + //color: 'black' } } } diff --git a/linphone-app/ui/views/App/Calls/VideoConferenceMenu.qml b/linphone-app/ui/views/App/Calls/VideoConferenceMenu.qml index 7578181c3..9bbb2ce7b 100644 --- a/linphone-app/ui/views/App/Calls/VideoConferenceMenu.qml +++ b/linphone-app/ui/views/App/Calls/VideoConferenceMenu.qml @@ -85,7 +85,9 @@ Rectangle{ Layout.fillHeight: true Layout.fillWidth: true Repeater{ - model: [{text: 'Modifier la mise en page', icon: VideoConferenceMenuStyle.settingsIcons.gridIcon, nextPage:layoutMenu} + model: [{text: 'Modifier la mise en page' + , icon: (mainItem.callModel.conferenceVideoLayout == LinphoneEnums.ConferenceLayoutGrid ? VideoConferenceMenuStyle.settingsIcons.gridIcon : VideoConferenceMenuStyle.settingsIcons.activeSpeakerIcon) + , nextPage:layoutMenu} ] delegate: Borders{ diff --git a/linphone-app/ui/views/App/Calls/WaitingRoom.qml b/linphone-app/ui/views/App/Calls/WaitingRoom.qml index 9ac896e8d..9cda8dacd 100644 --- a/linphone-app/ui/views/App/Calls/WaitingRoom.qml +++ b/linphone-app/ui/views/App/Calls/WaitingRoom.qml @@ -4,6 +4,7 @@ import QtGraphicalEffects 1.12 import Common 1.0 import Linphone 1.0 +import LinphoneEnums 1.0 import Common.Styles 1.0 import App.Styles 1.0 @@ -93,9 +94,15 @@ Rectangle { } RowLayout{ ActionButton{ + id: layoutChoice + property int selectedLayout: LinphoneEnums.ConferenceLayoutGrid isCustom: true backgroundRadius: width/2 - colorSet: WaitingRoomStyle.buttons.gridLayout + colorSet: selectedLayout == LinphoneEnums.ConferenceLayoutGrid ? WaitingRoomStyle.buttons.gridLayout : WaitingRoomStyle.buttons.activeSpeakerLayout + onClicked: if( selectedLayout == LinphoneEnums.ConferenceLayoutGrid ) + selectedLayout = LinphoneEnums.ConferenceLayoutActiveSpeaker + else + selectedLayout = LinphoneEnums.ConferenceLayoutGrid /* colorSet: callModel.pausedByUser ? WaitingRoomStyle.buttons.play : WaitingRoomStyle.buttons.pause onClicked: callModel.pausedByUser = !callModel.pausedByUser @@ -121,7 +128,7 @@ Rectangle { TextButtonB { text: 'DEMARRER' - onClicked: {mainItem.close(); CallsListModel.launchVideoCall(conferenceInfoModel.uri, '', 0, {video: camera.cameraEnabled, micro:!micro.microMuted, audio:!speaker.speakerMuted}) } + onClicked: {mainItem.close(); CallsListModel.launchVideoCall(conferenceInfoModel.uri, '', 0, {video: camera.cameraEnabled, micro:!micro.microMuted, audio:!speaker.speakerMuted, layout: layoutChoice.selectedLayout}) } } } diff --git a/linphone-app/ui/views/App/Styles/Calls/VideoConferenceMenuStyle.qml b/linphone-app/ui/views/App/Styles/Calls/VideoConferenceMenuStyle.qml index 56ca9c81c..fc3be9b0d 100644 --- a/linphone-app/ui/views/App/Styles/Calls/VideoConferenceMenuStyle.qml +++ b/linphone-app/ui/views/App/Styles/Calls/VideoConferenceMenuStyle.qml @@ -33,16 +33,16 @@ QtObject { } property QtObject modeIcons: QtObject{ - property string gridIcon: 'conference_layout_grid' - property string activeSpeakerIcon: 'conference_layout_active_speaker' - property int width: 80 - property int height: 50 + property string gridIcon: 'conference_layout_grid_custom' + property string activeSpeakerIcon: 'conference_layout_active_speaker_custom' + property int width: 40 + property int height: 40 } property QtObject settingsIcons: QtObject{ property string gridIcon: 'conference_layout_grid_custom' - property string activeSpeakerIcon: 'conference_layout_active_speaker' - property int width: 50 - property int height: 50 + property string activeSpeakerIcon: 'conference_layout_active_speaker_custom' + property int width: 40 + property int height: 40 } //------------------------------------------------------------------------------ diff --git a/linphone-app/ui/views/App/Styles/Calls/VideoConferenceStyle.qml b/linphone-app/ui/views/App/Styles/Calls/VideoConferenceStyle.qml index 38377cba7..f2d21371e 100644 --- a/linphone-app/ui/views/App/Styles/Calls/VideoConferenceStyle.qml +++ b/linphone-app/ui/views/App/Styles/Calls/VideoConferenceStyle.qml @@ -9,7 +9,8 @@ import ColorsList 1.0 QtObject { property string sectionName: 'VideoConference' - property color backgroundColor: ColorsList.add(sectionName+'_description', '', '', '#798791').color + property color backgroundColor: ColorsList.add(sectionName+'_description', 'conference_bg').color + property color buzyColor: ColorsList.add(sectionName+'_indicator', 'i').color property QtObject title: QtObject { property color color: ColorsList.add(sectionName+'_title', 'q').color diff --git a/linphone-app/ui/views/App/Styles/Calls/WaitingRoomStyle.qml b/linphone-app/ui/views/App/Styles/Calls/WaitingRoomStyle.qml index e483817f6..cec186141 100644 --- a/linphone-app/ui/views/App/Styles/Calls/WaitingRoomStyle.qml +++ b/linphone-app/ui/views/App/Styles/Calls/WaitingRoomStyle.qml @@ -210,6 +210,19 @@ QtObject { property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 's_p_b_fg').color property color foregroundUpdatingColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_u', icon, 's_p_b_fg').color } + property QtObject activeSpeakerLayout: QtObject { + property int iconSize: 40 + property string icon : 'conference_layout_active_speaker_custom' + property string name : 'activeSpeakerLayout' + property color backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_n', icon, 's_n_b_bg').color + property color backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_h', icon, 's_h_b_bg').color + property color backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_p', icon, 's_p_b_bg').color + property color backgroundUpdatingColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_u', icon, 's_p_b_bg').color + property color foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_n', icon, 's_n_b_fg').color + property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 's_n_b_fg').color + property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 's_p_b_fg').color + property color foregroundUpdatingColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_u', icon, 's_p_b_fg').color + } /* property QtObject callsList: QtObject { property int iconSize: 40 diff --git a/linphone-app/ui/views/App/Styles/Main/ConferencesStyle.qml b/linphone-app/ui/views/App/Styles/Main/ConferencesStyle.qml index fde92da95..81d0ff58d 100644 --- a/linphone-app/ui/views/App/Styles/Main/ConferencesStyle.qml +++ b/linphone-app/ui/views/App/Styles/Main/ConferencesStyle.qml @@ -40,7 +40,7 @@ QtObject { property int spacing: 15 property QtObject backgroundColor: QtObject { - property color ended: ColorsList.add(sectionName+'_conference_ended_bg', 'conference_bg').color + property color ended: ColorsList.add(sectionName+'_conference_ended_bg', 'conference_entry_bg').color property color scheduled: ColorsList.add(sectionName+'_conference_scheduled_bg', 'e').color property color hovered: ColorsList.add(sectionName+'_conference_bg_h', 'g10').color } diff --git a/linphone-sdk b/linphone-sdk index 45009739f..01e12c490 160000 --- a/linphone-sdk +++ b/linphone-sdk @@ -1 +1 @@ -Subproject commit 45009739fe36bba8f70647e526d354cbcf8c06a4 +Subproject commit 01e12c490219965084a16b6dccda107c45d80bc2