Warning, /plasma/plasma-workspace/kcms/wallpaper/ui/ScreenView.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 SPDX-FileCopyrightText: 2019 Roman Gilg <subdiff@gmail.com> 0003 SPDX-FileCopyrightText: 2023 Méven Car <meven@kde.org> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 import QtQuick 0008 import QtQuick.Layouts 0009 import QtQuick.Controls as QQC2 0010 0011 QQC2.Pane { 0012 id: pane 0013 0014 signal screenSelected(string screenName) 0015 0016 property var outputs 0017 property var selectedScreen 0018 0019 readonly property int xOffset: (width - totalSize.width / relativeFactor) / 2; 0020 readonly property int yOffset: (height - totalSize.height / relativeFactor) / 2; 0021 0022 readonly property rect totalSize: { 0023 var topleft_x = outputs[0].geometry.x; 0024 var topleft_y = outputs[0].geometry.y; 0025 var bottomRight_x = outputs[0].geometry.x + outputs[0].geometry.width; 0026 var bottomRight_y = outputs[0].geometry.y + outputs[0].geometry.height; 0027 0028 for (let i = 1; i < outputs.length; ++i) { 0029 var out = outputs[i].geometry 0030 0031 if (out.x < topleft_x) { 0032 topleft_x = out.x 0033 } 0034 if (out.y < topleft_y) { 0035 topleft_y = out.y 0036 } 0037 if (out.x + out.width > bottomRight_x) { 0038 bottomRight_x = out.x + out.width 0039 } 0040 if (out.y + out.height > bottomRight_y) { 0041 bottomRight_y = out.y + out.height 0042 } 0043 } 0044 return Qt.rect(topleft_x, topleft_y, bottomRight_x - topleft_x, bottomRight_y - topleft_y); 0045 } 0046 0047 readonly property real relativeFactor: { 0048 var relativeSize = Qt.size(width === 0 ? 1 : totalSize.width / (0.8 * width), 0049 height === 0 ? 1 : totalSize.height / (0.8 * height)); 0050 if (relativeSize.width > relativeSize.height) { 0051 // Available width smaller than height, optimize for width (we have 0052 // '>' because the available width, height is in the denominator). 0053 return relativeSize.width; 0054 } else { 0055 return relativeSize.height; 0056 } 0057 } 0058 0059 Repeater { 0060 model: outputs 0061 delegate: Output { 0062 relativeFactor: pane.relativeFactor 0063 xOffset: pane.xOffset 0064 yOffset: pane.yOffset 0065 screen: outputs[index] 0066 onScreenSelected: (screenName) => { pane.screenSelected(screenName) } 0067 isSelected: pane.selectedScreen ? outputs[index].name === pane.selectedScreen.name : false 0068 } 0069 } 0070 }