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