Warning, /plasma/plasma-mobile/components/mobileshell/qml/actiondrawer/quicksettings/BrightnessItem.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 * SPDX-FileCopyrightText: 2012-2013 Daniel Nicoletti <dantti12@gmail.com> 0003 * SPDX-FileCopyrightText: 2013, 2015 Kai Uwe Broulik <kde@privat.broulik.de> 0004 * SPDX-FileCopyrightText: 2021 Devin Lin <devin@kde.org> 0005 * 0006 * SPDX-License-Identifier: LGPL-2.0-or-later 0007 */ 0008 0009 import QtQuick 2.15 0010 import QtQuick.Layouts 1.1 0011 import org.kde.kirigami 2.20 as Kirigami 0012 0013 import org.kde.plasma.core as PlasmaCore 0014 import org.kde.plasma.plasma5support 2.0 as P5Support 0015 import org.kde.plasma.components 3.0 as PC3 0016 0017 Item { 0018 id: root 0019 0020 implicitHeight: brightnessRow.implicitHeight 0021 0022 property int screenBrightness 0023 property bool disableBrightnessUpdate: true 0024 readonly property int maximumScreenBrightness: pmSource.data["PowerDevil"] ? pmSource.data["PowerDevil"]["Maximum Screen Brightness"] || 0 : 0 0025 0026 property QtObject updateScreenBrightnessJob 0027 0028 function updateBrightnessUI() { 0029 if (updateScreenBrightnessJob) 0030 return; 0031 0032 root.disableBrightnessUpdate = true; 0033 root.screenBrightness = pmSource.data["PowerDevil"]["Screen Brightness"]; 0034 root.disableBrightnessUpdate = false; 0035 } 0036 0037 onScreenBrightnessChanged: { 0038 if (!brightnessSlider.pressed && !brightnessTimer.running) { 0039 brightnessSlider.value = root.screenBrightness; 0040 } 0041 0042 if (!disableBrightnessUpdate) { 0043 var service = pmSource.serviceForSource("PowerDevil"); 0044 var operation = service.operationDescription("setBrightness"); 0045 operation.brightness = screenBrightness; 0046 operation.silent = true; // don't show OSD 0047 0048 updateScreenBrightnessJob = service.startOperationCall(operation); 0049 updateScreenBrightnessJob.finished.connect(function (job) { 0050 root.updateBrightnessUI(); 0051 }); 0052 } 0053 } 0054 0055 P5Support.DataSource { 0056 id: pmSource 0057 engine: "powermanagement" 0058 connectedSources: ["PowerDevil"] 0059 onSourceAdded: { 0060 if (source === "PowerDevil") { 0061 disconnectSource(source); 0062 connectSource(source); 0063 } 0064 } 0065 onDataChanged: root.updateBrightnessUI() 0066 } 0067 0068 // we want to smoothen the slider so it doesn't jump immediately after you let go 0069 Timer { 0070 id: brightnessTimer 0071 interval: 500 0072 onTriggered: { 0073 brightnessSlider.value = root.screenBrightness; 0074 } 0075 } 0076 0077 // send brightness events a maximum of 5 times a second 0078 Timer { 0079 id: sendEventTimer 0080 interval: 200 0081 onTriggered: root.screenBrightness = brightnessSlider.value 0082 } 0083 0084 RowLayout { 0085 id: brightnessRow 0086 spacing: Kirigami.Units.smallSpacing * 2 0087 0088 anchors.left: parent.left 0089 anchors.right: parent.right 0090 anchors.top: parent.top 0091 0092 Kirigami.Icon { 0093 Layout.alignment: Qt.AlignVCenter 0094 Layout.leftMargin: Kirigami.Units.smallSpacing 0095 Layout.preferredWidth: Kirigami.Units.iconSizes.smallMedium 0096 Layout.preferredHeight: width 0097 source: "low-brightness" 0098 } 0099 0100 PC3.Slider { 0101 id: brightnessSlider 0102 Layout.fillWidth: true 0103 Layout.alignment: Qt.AlignVCenter 0104 from: 1 0105 to: root.maximumScreenBrightness 0106 value: root.screenBrightness 0107 0108 onMoved: { 0109 if (!sendEventTimer.running) { 0110 root.screenBrightness = value; 0111 sendEventTimer.restart(); 0112 } 0113 } 0114 0115 onPressedChanged: { 0116 if (!pressed) { 0117 brightnessTimer.restart(); 0118 } else { 0119 brightnessTimer.stop(); 0120 } 0121 } 0122 } 0123 0124 Kirigami.Icon { 0125 Layout.alignment: Qt.AlignVCenter 0126 Layout.rightMargin: Kirigami.Units.smallSpacing 0127 Layout.preferredWidth: Kirigami.Units.iconSizes.smallMedium 0128 Layout.preferredHeight: width 0129 source: "high-brightness" 0130 } 0131 } 0132 }