mirror of
https://git.jami.net/savoirfairelinux/jami-client-qt.git
synced 2025-07-05 08:05:25 +02:00
misc: fix SelectScreen window layout when more than three screens connect
Gitlab: #81 Change-Id: Iadae667ec883bf8044c3b72582087bcaacd8c78c
This commit is contained in:
parent
3a023b0775
commit
b98aaffc66
1 changed files with 38 additions and 54 deletions
|
@ -38,28 +38,18 @@ Window {
|
||||||
|
|
||||||
property int selectedScreenNumber: -1
|
property int selectedScreenNumber: -1
|
||||||
|
|
||||||
|
|
||||||
// Decide whether to show screen area or entire screen.
|
// Decide whether to show screen area or entire screen.
|
||||||
property bool selectArea: false
|
property bool selectArea: false
|
||||||
|
|
||||||
|
|
||||||
// How many rows the ScrollView should have.
|
// How many rows the ScrollView should have.
|
||||||
function calculateRepeaterModel() {
|
function calculateRepeaterModel() {
|
||||||
var numberOfScreens = Qt.application.screens.length
|
var numberOfScreens = Qt.application.screens.length
|
||||||
|
|
||||||
if (numberOfScreens % 2 === 1)
|
return Math.ceil(numberOfScreens / 2)
|
||||||
return numberOfScreens / 2 + 1
|
|
||||||
else
|
|
||||||
return numberOfScreens / 2
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function calculateScreenNumber(index) {
|
function calculateScreenNumber(index, isEven) {
|
||||||
if (index === 0 || index === 1)
|
return index * 2 + (isEven ? 2 : 1)
|
||||||
return index
|
|
||||||
if (index % 2 === 0)
|
|
||||||
return index * 2
|
|
||||||
else
|
|
||||||
return index * 2 + 1
|
|
||||||
}
|
}
|
||||||
|
|
||||||
minimumWidth: minWidth
|
minimumWidth: minWidth
|
||||||
|
@ -67,10 +57,11 @@ Window {
|
||||||
|
|
||||||
title: "Screen sharing"
|
title: "Screen sharing"
|
||||||
|
|
||||||
|
|
||||||
// Note: Qt.application.screens[0] is the app's current existing screen.
|
// Note: Qt.application.screens[0] is the app's current existing screen.
|
||||||
screen: Qt.application.screens[0]
|
screen: Qt.application.screens[0]
|
||||||
|
|
||||||
|
modality: Qt.ApplicationModal
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: selectScreenWindowRect
|
id: selectScreenWindowRect
|
||||||
|
|
||||||
|
@ -80,7 +71,7 @@ Window {
|
||||||
id: screenListText
|
id: screenListText
|
||||||
|
|
||||||
anchors.top: selectScreenWindowRect.top
|
anchors.top: selectScreenWindowRect.top
|
||||||
anchors.topMargin: 20
|
anchors.topMargin: JamiTheme.preferredMarginSize
|
||||||
anchors.horizontalCenter: selectScreenWindowRect.horizontalCenter
|
anchors.horizontalCenter: selectScreenWindowRect.horizontalCenter
|
||||||
|
|
||||||
font.pointSize: JamiTheme.textFontSize + 2
|
font.pointSize: JamiTheme.textFontSize + 2
|
||||||
|
@ -91,16 +82,18 @@ Window {
|
||||||
ScrollView {
|
ScrollView {
|
||||||
id: screenSelectionScrollView
|
id: screenSelectionScrollView
|
||||||
|
|
||||||
anchors.centerIn: selectScreenWindowRect
|
anchors.top: screenListText.bottom
|
||||||
|
anchors.topMargin: JamiTheme.preferredMarginSize
|
||||||
|
anchors.horizontalCenter: selectScreenWindowRect.horizontalCenter
|
||||||
|
|
||||||
width: selectScreenWindowRect.width - 50
|
width: selectScreenWindowRect.width
|
||||||
height: selectScreenWindowRect.height - 150
|
height: selectScreenWindowRect.height -
|
||||||
|
(screenListText.height + selectButton.height + JamiTheme.preferredMarginSize * 4)
|
||||||
|
|
||||||
clip: true
|
clip: true
|
||||||
|
|
||||||
ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
|
ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
|
||||||
|
|
||||||
|
|
||||||
// Column of rows repeater (two screen captures in a row).
|
// Column of rows repeater (two screen captures in a row).
|
||||||
Column {
|
Column {
|
||||||
id: screenSelectionScrollViewColumn
|
id: screenSelectionScrollViewColumn
|
||||||
|
@ -115,21 +108,20 @@ Window {
|
||||||
Row {
|
Row {
|
||||||
id: screenInfoRow
|
id: screenInfoRow
|
||||||
|
|
||||||
spacing: 20
|
leftPadding: JamiTheme.preferredMarginSize
|
||||||
|
rightPadding: JamiTheme.preferredMarginSize
|
||||||
|
spacing: screenSelectionScrollViewColumn.spacing
|
||||||
|
|
||||||
Connections {
|
Connections {
|
||||||
target: selectScreenWindow
|
target: selectScreenWindow
|
||||||
|
|
||||||
function onSelectedScreenNumberChanged() {
|
function onSelectedScreenNumberChanged() {
|
||||||
|
|
||||||
|
|
||||||
// Recover from green state.
|
// Recover from green state.
|
||||||
screenSelectionRectOdd.borderColor = JamiTheme.tabbarBorderColor
|
screenSelectionRectOdd.borderColor = JamiTheme.tabbarBorderColor
|
||||||
screenSelectionRectEven.borderColor = JamiTheme.tabbarBorderColor
|
screenSelectionRectEven.borderColor = JamiTheme.tabbarBorderColor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// To make sure that two screen captures in one row,
|
// To make sure that two screen captures in one row,
|
||||||
// a repeater of two rect is needed, which one in charge
|
// a repeater of two rect is needed, which one in charge
|
||||||
// of odd number screen, one in charge of even number screen.
|
// of odd number screen, one in charge of even number screen.
|
||||||
|
@ -139,9 +131,9 @@ Window {
|
||||||
property string borderColor: JamiTheme.tabbarBorderColor
|
property string borderColor: JamiTheme.tabbarBorderColor
|
||||||
|
|
||||||
height: screenSelectionScrollView.height
|
height: screenSelectionScrollView.height
|
||||||
width: screenSelectionScrollView.width / 2 - screenInfoRow.spacing / 2
|
width: screenSelectionScrollView.width / 2 -
|
||||||
|
screenInfoRow.spacing / 2 - JamiTheme.preferredMarginSize
|
||||||
|
|
||||||
radius: 10
|
|
||||||
border.color: borderColor
|
border.color: borderColor
|
||||||
|
|
||||||
Image {
|
Image {
|
||||||
|
@ -160,7 +152,7 @@ Window {
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
screenShotOdd.source = "data:image/png;base64,"
|
screenShotOdd.source = "data:image/png;base64,"
|
||||||
+ AvAdapter.captureScreen(
|
+ AvAdapter.captureScreen(
|
||||||
calculateScreenNumber(index))
|
calculateScreenNumber(index, false) - 1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,8 +164,7 @@ Window {
|
||||||
anchors.horizontalCenter: screenSelectionRectOdd.horizontalCenter
|
anchors.horizontalCenter: screenSelectionRectOdd.horizontalCenter
|
||||||
|
|
||||||
font.pointSize: JamiTheme.textFontSize - 2
|
font.pointSize: JamiTheme.textFontSize - 2
|
||||||
text: qsTr("Screen") + " " + (calculateScreenNumber(
|
text: qsTr("Screen") + " " + calculateScreenNumber(index, false)
|
||||||
index) + 1)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MouseArea {
|
MouseArea {
|
||||||
|
@ -182,10 +173,9 @@ Window {
|
||||||
|
|
||||||
onClicked: {
|
onClicked: {
|
||||||
if (selectedScreenNumber == -1
|
if (selectedScreenNumber == -1
|
||||||
|| selectedScreenNumber !== calculateScreenNumber(
|
|| selectedScreenNumber !==
|
||||||
index)) {
|
calculateScreenNumber(index, false)) {
|
||||||
selectedScreenNumber = calculateScreenNumber(
|
selectedScreenNumber = calculateScreenNumber(index, false)
|
||||||
index)
|
|
||||||
screenSelectionRectOdd.borderColor
|
screenSelectionRectOdd.borderColor
|
||||||
= JamiTheme.screenSelectionBorderGreen
|
= JamiTheme.screenSelectionBorderGreen
|
||||||
}
|
}
|
||||||
|
@ -199,12 +189,17 @@ Window {
|
||||||
property string borderColor: JamiTheme.tabbarBorderColor
|
property string borderColor: JamiTheme.tabbarBorderColor
|
||||||
|
|
||||||
height: screenSelectionScrollView.height
|
height: screenSelectionScrollView.height
|
||||||
width: screenSelectionScrollView.width / 2 - screenInfoRow.spacing / 2
|
width: screenSelectionScrollView.width / 2 -
|
||||||
|
screenInfoRow.spacing / 2 - JamiTheme.preferredMarginSize
|
||||||
|
|
||||||
radius: 10
|
|
||||||
border.color: borderColor
|
border.color: borderColor
|
||||||
|
|
||||||
visible: (Qt.application.screens.length) % 2 != 1
|
visible: {
|
||||||
|
if (calculateScreenNumber(index, true) >=
|
||||||
|
Qt.application.screens.length)
|
||||||
|
return (Qt.application.screens.length) % 2 != 1
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
Image {
|
Image {
|
||||||
id: screenShotEven
|
id: screenShotEven
|
||||||
|
@ -223,8 +218,7 @@ Window {
|
||||||
if (screenSelectionRectEven.visible)
|
if (screenSelectionRectEven.visible)
|
||||||
screenShotEven.source = "data:image/png;base64,"
|
screenShotEven.source = "data:image/png;base64,"
|
||||||
+ AvAdapter.captureScreen(
|
+ AvAdapter.captureScreen(
|
||||||
calculateScreenNumber(
|
calculateScreenNumber(index, true) - 1)
|
||||||
index + 1))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -236,9 +230,7 @@ Window {
|
||||||
anchors.horizontalCenter: screenSelectionRectEven.horizontalCenter
|
anchors.horizontalCenter: screenSelectionRectEven.horizontalCenter
|
||||||
|
|
||||||
font.pointSize: JamiTheme.textFontSize - 2
|
font.pointSize: JamiTheme.textFontSize - 2
|
||||||
text: qsTr(
|
text: qsTr("Screen") + " " + (calculateScreenNumber(index, true))
|
||||||
"Screen") + " " + (calculateScreenNumber(
|
|
||||||
index + 1) + 1)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MouseArea {
|
MouseArea {
|
||||||
|
@ -247,10 +239,9 @@ Window {
|
||||||
|
|
||||||
onClicked: {
|
onClicked: {
|
||||||
if (selectedScreenNumber == -1
|
if (selectedScreenNumber == -1
|
||||||
|| selectedScreenNumber !== calculateScreenNumber(
|
|| selectedScreenNumber !==
|
||||||
index + 1)) {
|
calculateScreenNumber(index, true)) {
|
||||||
selectedScreenNumber = calculateScreenNumber(
|
selectedScreenNumber = calculateScreenNumber(index, true)
|
||||||
index + 1)
|
|
||||||
screenSelectionRectEven.borderColor
|
screenSelectionRectEven.borderColor
|
||||||
= JamiTheme.screenSelectionBorderGreen
|
= JamiTheme.screenSelectionBorderGreen
|
||||||
}
|
}
|
||||||
|
@ -260,13 +251,6 @@ Window {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
background: Rectangle {
|
|
||||||
id: screenSelectionScrollViewBackground
|
|
||||||
|
|
||||||
radius: 10
|
|
||||||
border.color: JamiTheme.tabbarBorderColor
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -274,7 +258,7 @@ Window {
|
||||||
id: selectButton
|
id: selectButton
|
||||||
|
|
||||||
anchors.bottom: selectScreenWindowRect.bottom
|
anchors.bottom: selectScreenWindowRect.bottom
|
||||||
anchors.bottomMargin: 10
|
anchors.bottomMargin: JamiTheme.preferredMarginSize
|
||||||
anchors.horizontalCenter: selectScreenWindowRect.horizontalCenter
|
anchors.horizontalCenter: selectScreenWindowRect.horizontalCenter
|
||||||
|
|
||||||
visible: selectedScreenNumber != -1
|
visible: selectedScreenNumber != -1
|
||||||
|
@ -286,7 +270,7 @@ Window {
|
||||||
if (selectArea) {
|
if (selectArea) {
|
||||||
selectScreenWindow.hide()
|
selectScreenWindow.hide()
|
||||||
ScreenRubberBandCreation.createScreenRubberBandWindowObject(
|
ScreenRubberBandCreation.createScreenRubberBandWindowObject(
|
||||||
selectScreenWindow, selectedScreenNumber)
|
selectScreenWindow, selectedScreenNumber - 1)
|
||||||
ScreenRubberBandCreation.showScreenRubberBandWindow()
|
ScreenRubberBandCreation.showScreenRubberBandWindow()
|
||||||
|
|
||||||
|
|
||||||
|
@ -295,7 +279,7 @@ Window {
|
||||||
selectScreenWindow.close()
|
selectScreenWindow.close()
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
AvAdapter.shareEntireScreen(selectedScreenNumber)
|
AvAdapter.shareEntireScreen(selectedScreenNumber - 1)
|
||||||
selectScreenWindow.close()
|
selectScreenWindow.close()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue