// SPDX-FileCopyrightText: 2021-2024 Devin Lin // SPDX-License-Identifier: LGPL-2.0-or-later import QtQuick import QtQuick.Controls as QQC2 import QtQuick.Layouts import QtQuick.Window import org.kde.kirigami as Kirigami import org.kde.plasma.core as PlasmaCore import org.kde.plasma.components 3.0 as PlasmaComponents import org.kde.plasma.private.mobileshell as MobileShell import org.kde.plasma.private.mobileshell.shellsettingsplugin as ShellSettings import org.kde.plasma.private.mobileshell.quicksettingsplugin as QS /** * Root element that contains all the ActionDrawer's contents, and is anchored to the screen. */ Item { id: root required property var actionDrawer property alias quickSettings: quickSettingsPanel.quickSettings property alias statusBar: quickSettingsPanel.statusBar readonly property real minimizedQuickSettingsOffset: height readonly property real maximizedQuickSettingsOffset: height readonly property bool isConvergence: ShellSettings.Settings.convergenceModeEnabled readonly property real convergenceFrameThickness: MobileShell.Constants.convergenceWorkspaceFrameThickness readonly property real convergenceSurfaceTopInset: MobileShell.Constants.topPanelHeight readonly property real convergenceSurfaceBottomInset: MobileShell.Constants.convergenceDockHeight + convergenceFrameThickness readonly property real convergenceSurfaceSideInset: 0 readonly property real convergenceSurfaceWidth: Math.max(0, width - convergenceSurfaceSideInset * 2) readonly property real convergenceSurfaceHeight: Math.max(0, height - convergenceSurfaceTopInset - convergenceSurfaceBottomInset) readonly property bool isOnLargeScreen: width > quickSettingsPanel.width * 2.5 readonly property real minWidthHeight: Math.min(root.width, root.height) readonly property real opacityValue: Math.max(0, Math.min(1, actionDrawer.offsetResistance / root.minimizedQuickSettingsOffset)) readonly property double brightnessPressedValue: quickSettings.brightnessPressedValue Kirigami.Theme.colorSet: Kirigami.Theme.View Kirigami.Theme.inherit: false MouseArea { anchors.fill: parent // dismiss drawer when background is clicked onClicked: root.actionDrawer.close(); // right sidebar MobileShell.QuickSettingsPanel { id: quickSettingsPanel height: Math.min(quickSettingsPanel.contentImplicitHeight + quickSettingsPanel.topPadding + quickSettingsPanel.bottomPadding, quickSettingsPanel.availableHeight) width: Math.min(intendedWidth, quickSettingsPanel.availableWidth) readonly property real columnWidth: 6 * Kirigami.Units.gridUnit readonly property real availableWidth: root.isConvergence ? root.convergenceSurfaceWidth : intendedWidth readonly property real availableHeight: root.isConvergence ? root.convergenceSurfaceHeight : root.height // In convergence mode, use up to 45% of screen width so more // tiles are visible without pagination. readonly property int convergenceColumns: Math.min(6, Math.floor(root.width * 0.45 / columnWidth)) readonly property int effectiveColumns: root.isConvergence ? Math.max(ShellSettings.Settings.quickSettingsColumns, convergenceColumns) : ShellSettings.Settings.quickSettingsColumns readonly property real intendedWidth: (columnWidth * effectiveColumns) + Kirigami.Units.gridUnit readonly property bool isConvergence: root.isConvergence property real offsetRatio: (quickSettingsPanel.height + restingTopMargin) / root.height readonly property real restingTopMargin: root.isConvergence ? root.convergenceSurfaceTopInset : 0 anchors.topMargin: isConvergence ? restingTopMargin : Math.min(root.actionDrawer.offsetResistance * offsetRatio - quickSettingsPanel.height, 0) anchors.top: parent.top anchors.right: parent.right anchors.rightMargin: isConvergence ? root.convergenceSurfaceSideInset : 0 opacity: isConvergence ? Math.max(0, Math.min(1, root.actionDrawer.offset / root.minimizedQuickSettingsOffset)) : 1 actionDrawer: root.actionDrawer fullScreenHeight: quickSettingsPanel.availableHeight } } }