From b98aaffc663a19ada8d0c38bd9e246ed2d6d5e5c Mon Sep 17 00:00:00 2001
From: Ming Rui Zhang <mingrui.zhang@savoirfairelinux.com>
Date: Mon, 21 Sep 2020 15:45:59 -0400
Subject: [PATCH] misc: fix SelectScreen window layout when more than three
 screens connect

Gitlab: #81
Change-Id: Iadae667ec883bf8044c3b72582087bcaacd8c78c
---
 src/mainview/components/SelectScreen.qml | 92 ++++++++++--------------
 1 file changed, 38 insertions(+), 54 deletions(-)

diff --git a/src/mainview/components/SelectScreen.qml b/src/mainview/components/SelectScreen.qml
index fcf4a644f..018f84cdf 100644
--- a/src/mainview/components/SelectScreen.qml
+++ b/src/mainview/components/SelectScreen.qml
@@ -38,28 +38,18 @@ Window {
 
     property int selectedScreenNumber: -1
 
-
     // Decide whether to show screen area or entire screen.
     property bool selectArea: false
 
-
     // How many rows the ScrollView should have.
     function calculateRepeaterModel() {
         var numberOfScreens = Qt.application.screens.length
 
-        if (numberOfScreens % 2 === 1)
-            return numberOfScreens / 2 + 1
-        else
-            return numberOfScreens / 2
+        return Math.ceil(numberOfScreens / 2)
     }
 
-    function calculateScreenNumber(index) {
-        if (index === 0 || index === 1)
-            return index
-        if (index % 2 === 0)
-            return index * 2
-        else
-            return index * 2 + 1
+    function calculateScreenNumber(index, isEven) {
+        return index * 2 + (isEven ? 2 : 1)
     }
 
     minimumWidth: minWidth
@@ -67,10 +57,11 @@ Window {
 
     title: "Screen sharing"
 
-
     // Note: Qt.application.screens[0] is the app's current existing screen.
     screen: Qt.application.screens[0]
 
+    modality: Qt.ApplicationModal
+
     Rectangle {
         id: selectScreenWindowRect
 
@@ -80,7 +71,7 @@ Window {
             id: screenListText
 
             anchors.top: selectScreenWindowRect.top
-            anchors.topMargin: 20
+            anchors.topMargin: JamiTheme.preferredMarginSize
             anchors.horizontalCenter: selectScreenWindowRect.horizontalCenter
 
             font.pointSize: JamiTheme.textFontSize + 2
@@ -91,16 +82,18 @@ Window {
         ScrollView {
             id: screenSelectionScrollView
 
-            anchors.centerIn: selectScreenWindowRect
+            anchors.top: screenListText.bottom
+            anchors.topMargin: JamiTheme.preferredMarginSize
+            anchors.horizontalCenter: selectScreenWindowRect.horizontalCenter
 
-            width: selectScreenWindowRect.width - 50
-            height: selectScreenWindowRect.height - 150
+            width: selectScreenWindowRect.width
+            height: selectScreenWindowRect.height -
+                    (screenListText.height + selectButton.height + JamiTheme.preferredMarginSize * 4)
 
             clip: true
 
             ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
 
-
             // Column of rows repeater (two screen captures in a row).
             Column {
                 id: screenSelectionScrollViewColumn
@@ -115,21 +108,20 @@ Window {
                     Row {
                         id: screenInfoRow
 
-                        spacing: 20
+                        leftPadding: JamiTheme.preferredMarginSize
+                        rightPadding: JamiTheme.preferredMarginSize
+                        spacing: screenSelectionScrollViewColumn.spacing
 
                         Connections {
                             target: selectScreenWindow
 
                             function onSelectedScreenNumberChanged() {
-
-
                                 // Recover from green state.
                                 screenSelectionRectOdd.borderColor = JamiTheme.tabbarBorderColor
                                 screenSelectionRectEven.borderColor = JamiTheme.tabbarBorderColor
                             }
                         }
 
-
                         // To make sure that two screen captures in one row,
                         // a repeater of two rect is needed, which one in charge
                         // of odd number screen, one in charge of even number screen.
@@ -139,9 +131,9 @@ Window {
                             property string borderColor: JamiTheme.tabbarBorderColor
 
                             height: screenSelectionScrollView.height
-                            width: screenSelectionScrollView.width / 2 - screenInfoRow.spacing / 2
+                            width: screenSelectionScrollView.width / 2 -
+                                   screenInfoRow.spacing / 2 - JamiTheme.preferredMarginSize
 
-                            radius: 10
                             border.color: borderColor
 
                             Image {
@@ -160,7 +152,7 @@ Window {
                                 Component.onCompleted: {
                                     screenShotOdd.source = "data:image/png;base64,"
                                             + AvAdapter.captureScreen(
-                                                calculateScreenNumber(index))
+                                                calculateScreenNumber(index, false) - 1)
                                 }
                             }
 
@@ -172,8 +164,7 @@ Window {
                                 anchors.horizontalCenter: screenSelectionRectOdd.horizontalCenter
 
                                 font.pointSize: JamiTheme.textFontSize - 2
-                                text: qsTr("Screen") + " " + (calculateScreenNumber(
-                                                                  index) + 1)
+                                text: qsTr("Screen") + " " + calculateScreenNumber(index, false)
                             }
 
                             MouseArea {
@@ -182,10 +173,9 @@ Window {
 
                                 onClicked: {
                                     if (selectedScreenNumber == -1
-                                            || selectedScreenNumber !== calculateScreenNumber(
-                                                index)) {
-                                        selectedScreenNumber = calculateScreenNumber(
-                                                    index)
+                                            || selectedScreenNumber !==
+                                            calculateScreenNumber(index, false)) {
+                                        selectedScreenNumber = calculateScreenNumber(index, false)
                                         screenSelectionRectOdd.borderColor
                                                 = JamiTheme.screenSelectionBorderGreen
                                     }
@@ -199,12 +189,17 @@ Window {
                             property string borderColor: JamiTheme.tabbarBorderColor
 
                             height: screenSelectionScrollView.height
-                            width: screenSelectionScrollView.width / 2 - screenInfoRow.spacing / 2
+                            width: screenSelectionScrollView.width / 2 -
+                                   screenInfoRow.spacing / 2 - JamiTheme.preferredMarginSize
 
-                            radius: 10
                             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 {
                                 id: screenShotEven
@@ -223,8 +218,7 @@ Window {
                                     if (screenSelectionRectEven.visible)
                                         screenShotEven.source = "data:image/png;base64,"
                                                 + AvAdapter.captureScreen(
-                                                    calculateScreenNumber(
-                                                        index + 1))
+                                                    calculateScreenNumber(index, true) - 1)
                                 }
                             }
 
@@ -236,9 +230,7 @@ Window {
                                 anchors.horizontalCenter: screenSelectionRectEven.horizontalCenter
 
                                 font.pointSize: JamiTheme.textFontSize - 2
-                                text: qsTr(
-                                          "Screen") + " " + (calculateScreenNumber(
-                                                                 index + 1) + 1)
+                                text: qsTr("Screen") + " " + (calculateScreenNumber(index, true))
                             }
 
                             MouseArea {
@@ -247,10 +239,9 @@ Window {
 
                                 onClicked: {
                                     if (selectedScreenNumber == -1
-                                            || selectedScreenNumber !== calculateScreenNumber(
-                                                index + 1)) {
-                                        selectedScreenNumber = calculateScreenNumber(
-                                                    index + 1)
+                                            || selectedScreenNumber !==
+                                            calculateScreenNumber(index, true)) {
+                                        selectedScreenNumber = calculateScreenNumber(index, true)
                                         screenSelectionRectEven.borderColor
                                                 = JamiTheme.screenSelectionBorderGreen
                                     }
@@ -260,13 +251,6 @@ Window {
                     }
                 }
             }
-
-            background: Rectangle {
-                id: screenSelectionScrollViewBackground
-
-                radius: 10
-                border.color: JamiTheme.tabbarBorderColor
-            }
         }
     }
 
@@ -274,7 +258,7 @@ Window {
         id: selectButton
 
         anchors.bottom: selectScreenWindowRect.bottom
-        anchors.bottomMargin: 10
+        anchors.bottomMargin: JamiTheme.preferredMarginSize
         anchors.horizontalCenter: selectScreenWindowRect.horizontalCenter
 
         visible: selectedScreenNumber != -1
@@ -286,7 +270,7 @@ Window {
             if (selectArea) {
                 selectScreenWindow.hide()
                 ScreenRubberBandCreation.createScreenRubberBandWindowObject(
-                            selectScreenWindow, selectedScreenNumber)
+                            selectScreenWindow, selectedScreenNumber - 1)
                 ScreenRubberBandCreation.showScreenRubberBandWindow()
 
 
@@ -295,7 +279,7 @@ Window {
                     selectScreenWindow.close()
                 })
             } else {
-                AvAdapter.shareEntireScreen(selectedScreenNumber)
+                AvAdapter.shareEntireScreen(selectedScreenNumber - 1)
                 selectScreenWindow.close()
             }
         }
-- 
GitLab