Warning, /plasma/plasma-workspace/kcms/wallpaper/ui/Output.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 SPDX-FileCopyrightText: 2019 Roman Gilg <subdiff@gmail.com> 0003 SPDX-FileCopyrightText: 2012 Dan Vratil <dvratil@redhat.com> 0004 SPDX-FileCopyrightText: 2022 Kai Uwe Broulik <kde@broulik.de> 0005 SPDX-FileCopyrightText: 2023 Méven Car <meven@kde.org> 0006 0007 SPDX-License-Identifier: GPL-2.0-or-later 0008 */ 0009 import QtQuick 0010 import QtQuick.Layouts 0011 import QtQuick.Controls as QQC2 0012 import org.kde.kirigami as Kirigami 0013 0014 Item { 0015 id: output 0016 0017 // readonly property bool isSelected: root.selectedOutput === model.index 0018 property real relativeFactor 0019 property var screen 0020 property int xOffset 0021 property int yOffset 0022 property bool isSelected 0023 0024 readonly property size outputSize: Qt.size(screen.geometry.width, screen.geometry.height) 0025 readonly property point position: Qt.point(screen.geometry.x, screen.geometry.y) 0026 0027 signal screenSelected(string screenName) 0028 0029 x: position.x / relativeFactor + xOffset 0030 y: position.y / relativeFactor + yOffset 0031 0032 width: outputSize.width / relativeFactor 0033 height: outputSize.height / relativeFactor 0034 0035 Rectangle { 0036 id: outline 0037 0038 readonly property int orientationPanelWidth: 10 0039 readonly property real orientationPanelPosition: 1 - (orientationPanelWidth / outline.height) 0040 0041 anchors.centerIn: parent 0042 width: parent.width 0043 height: parent.height 0044 radius: Kirigami.Units.smallSpacing 0045 0046 gradient: Gradient { 0047 GradientStop { 0048 position: 0.0 0049 color: Kirigami.Theme.alternateBackgroundColor 0050 } 0051 GradientStop { 0052 // Create a hard cut. Can't use the same number otherwise it gets confused. 0053 position: outline.orientationPanelPosition - Number.EPSILON 0054 color: Kirigami.Theme.alternateBackgroundColor 0055 } 0056 GradientStop { 0057 position: outline.orientationPanelPosition 0058 color: outline.border.color 0059 } 0060 GradientStop { 0061 position: 1.0 0062 color: outline.border.color 0063 } 0064 } 0065 0066 border { 0067 color: isSelected ? Kirigami.Theme.highlightColor : Kirigami.Theme.disabledTextColor 0068 width: 1 0069 0070 Behavior on color { 0071 PropertyAnimation { 0072 duration: Kirigami.Units.longDuration 0073 } 0074 } 0075 } 0076 } 0077 0078 Item { 0079 id: labelContainer 0080 anchors { 0081 fill: parent 0082 margins: outline.border.width 0083 } 0084 0085 // so the text is drawn above orientationPanelContainer 0086 z: 1 0087 ColumnLayout { 0088 anchors.centerIn: parent 0089 spacing: 0 0090 width: parent.width 0091 Layout.maximumHeight: parent.height 0092 0093 QQC2.Label { 0094 Layout.fillWidth: true 0095 Layout.maximumHeight: labelContainer.height - resolutionLabel.implicitHeight 0096 0097 text: screen.name 0098 textFormat: Text.PlainText 0099 wrapMode: Text.Wrap 0100 horizontalAlignment: Text.AlignHCenter 0101 elide: Text.ElideRight 0102 } 0103 0104 QQC2.Label { 0105 id: resolutionLabel 0106 Layout.fillWidth: true 0107 0108 text: "(" + outputSize.width + "x" + outputSize.height + ")" 0109 textFormat: Text.PlainText 0110 wrapMode: Text.Wrap 0111 horizontalAlignment: Text.AlignHCenter 0112 elide: Text.ElideRight 0113 } 0114 } 0115 } 0116 0117 states: [ 0118 State { 0119 name: "transposed" 0120 PropertyChanges { 0121 target: outline 0122 width: output.height 0123 height: output.width 0124 } 0125 }, 0126 0127 State { 0128 name: "rot90" 0129 extend: "transposed" 0130 when: screen.orientation === 1 // Qt::PortraitOrientation 0131 PropertyChanges { 0132 target: outline 0133 rotation: 90 0134 } 0135 PropertyChanges { 0136 target: labelContainer 0137 anchors.leftMargin: outline.orientationPanelWidth + outline.border.width 0138 } 0139 }, 0140 State { 0141 name: "rot0" 0142 when: screen.orientation === 2 // Qt::LandscapeOrientation 0143 PropertyChanges { 0144 target: labelContainer 0145 anchors.bottomMargin: outline.orientationPanelWidth + outline.border.width 0146 } 0147 }, 0148 State { 0149 name: "rot270" 0150 extend: "transposed" 0151 when: screen.orientation === 4 // Qt::InvertedPortraitOrientation 0152 PropertyChanges { 0153 target: outline 0154 rotation: 270 0155 } 0156 PropertyChanges { 0157 target: labelContainer 0158 anchors.rightMargin: outline.orientationPanelWidth + outline.border.width 0159 } 0160 }, 0161 State { 0162 name: "rot180" 0163 when: screen.orientation === 8 // Qt::InvertedLandscapeOrientation 0164 PropertyChanges { 0165 target: outline 0166 rotation: 180 0167 } 0168 PropertyChanges { 0169 target: labelContainer 0170 anchors.topMargin: outline.orientationPanelWidth + outline.border.width 0171 } 0172 } 0173 ] 0174 0175 HoverHandler { 0176 cursorShape: Qt.PointingHandCursor 0177 } 0178 0179 TapHandler { 0180 id: tapHandler 0181 gesturePolicy: TapHandler.WithinBounds 0182 0183 onPressedChanged: { 0184 if (pressed) { 0185 output.screenSelected(screen.name) 0186 } 0187 } 0188 } 0189 } 0190