1
0
Fork 0
mirror of https://git.jami.net/savoirfairelinux/jami-client-qt.git synced 2025-08-09 09:15:39 +02:00

video-split: improve layout

GitLab: #476
Change-Id: Ic8c7868ae1af8deeb63f8e49f6b05258c9607a99
This commit is contained in:
Sébastien Blin 2022-03-24 17:23:35 -04:00
parent 6174c0cbb1
commit 573f62d2c7
3 changed files with 50 additions and 24 deletions

View file

@ -72,6 +72,10 @@ CallParticipantsModel::data(const QModelIndex& index, int role) const
return QVariant::fromValue(participant.item.value("avatar"));
case Role::SinkId:
return QVariant::fromValue(participant.item.value("sinkId"));
case Role::Height:
return QVariant::fromValue(participant.item.value("height"));
case Role::Width:
return QVariant::fromValue(participant.item.value("width"));
case Role::HandRaised:
return QVariant::fromValue(participant.item.value("handRaised"));
}

View file

@ -93,6 +93,7 @@ Item {
id: mediaDistRender
anchors.fill: parent
rendererId: root.sinkId
crop: true
underlayItems: Avatar {
property real componentSize: Math.min(mediaDistRender.contentRect.width / 2, mediaDistRender.contentRect.height / 2)
@ -119,9 +120,7 @@ Item {
overlayItems: Rectangle {
id: overlayRect
width: mediaDistRender.contentRect.width
height: mediaDistRender.contentRect.height
anchors.centerIn: parent
anchors.fill: parent
color: "transparent"
Item {

View file

@ -37,7 +37,7 @@ Item {
ParticipantOverlay {
anchors.fill: parent
anchors.centerIn: parent
anchors.leftMargin: leftMargin_
sinkId: sinkId_
uri: uri_
@ -109,10 +109,14 @@ Item {
property int topLimit: commonParticipants.count
property int currentPos: 0
property int showable: {
var placeableElements = inLine ? Math.floor((width * 0.95)/commonParticipantsFlow.componentWidth) : commonParticipants.count
if (!inLine)
return commonParticipants.count
if (commonParticipantsFlow.componentWidth === 0)
return 1
var placeableElements = Math.floor((width * 0.9)/commonParticipantsFlow.componentWidth)
if (commonParticipants.count - placeableElements < currentPos)
currentPos = Math.max(commonParticipants.count - placeableElements, 0)
return placeableElements
return Math.max(1, placeableElements)
}
RowLayout {
@ -163,28 +167,38 @@ Item {
Rectangle {
z:0
anchors.centerIn: parent
property int elements: inLine ? Math.min(genericParticipantsRect.showable, commonParticipants.count) : commonParticipantsFlow.columns
width: commonParticipantsFlow.componentWidth * elements + elements - 1
implicitHeight: parent.height + commonParticipantsFlow.rows - 1
anchors.fill: parent
color: "transparent"
// GENERIC
Flow {
id: commonParticipantsFlow
anchors.centerIn: parent
anchors.fill: parent
anchors.left: parent.left
anchors.right: parent.right
anchors.top: Math.ceil((parent.height - commonParticipants.height) / 2)
anchors.leftMargin: {
if (!inLine)
return 0
var showed = Math.min(genericParticipantsRect.showable, columns)
return Math.max(0, (parent.width - componentWidth * showed) / 2)
}
spacing: 1
spacing: 3
property int columns: {
if (inLine)
return commonParticipants.count
var ratio = Math.floor(root.width / root.height)
var sqrt = Math.max(1, Math.ceil(Math.sqrt(commonParticipants.count)))
return Math.max(1, Math.round(sqrt * ratio))
var wantedCol = Math.max(1, Math.round(sqrt * ratio))
return Math.min(commonParticipants.count, wantedCol)
}
property int rows: Math.max(1, Math.ceil(commonParticipants.count/columns))
property int componentWidth: inLine ? height : Math.floor(genericParticipantsRect.width / commonParticipantsFlow.columns) - 1
property int componentWidth: {
if (inLine)
return height
var totalSpacing = commonParticipantsFlow.spacing * commonParticipantsFlow.columns
return Math.floor((genericParticipantsRect.width - totalSpacing)/ commonParticipantsFlow.columns)
}
Repeater {
id: commonParticipants
@ -198,19 +212,28 @@ Item {
if (status !== Loader.Ready)
return false
if (inLine)
return index >= genericParticipantsRect.currentPos
return index >= genericParticipantsRect.currentPos
&& index < genericParticipantsRect.currentPos + genericParticipantsRect.showable
return true
}
width: {
var lastLine = commonParticipants.count % commonParticipantsFlow.columns
var horComponents = ((commonParticipants.count - index) > lastLine || index < 0) ? commonParticipantsFlow.columns : lastLine
if (horComponents === lastLine)
return Math.floor(commonParticipantsFlow.width / horComponents) - 1
else
return commonParticipantsFlow.componentWidth
width: commonParticipantsFlow.componentWidth + leftMargin_
height: {
if (inLine || commonParticipantsFlow.rows === 1)
return genericParticipantsRect.height
var totalSpacing = commonParticipantsFlow.spacing * commonParticipantsFlow.rows
return Math.floor((genericParticipantsRect.height - totalSpacing)/ commonParticipantsFlow.rows)
}
property int leftMargin_: {
if (inLine || commonParticipantsFlow.rows === 1)
return 0
if (index === commonParticipants.count - commonParticipantsFlow.columns + 1) {
var compW = commonParticipantsFlow.componentWidth + commonParticipantsFlow.spacing
var lastLineW = (commonParticipants.count % commonParticipantsFlow.columns) * compW
return (genericParticipantsRect.width - lastLineW) / 2
}
return 0
}
height: inLine ? commonParticipantsFlow.componentWidth : Math.floor(genericParticipantsRect.height / commonParticipantsFlow.rows) - 1
property string uri_: Uri
property string bestName_: BestName