shift-shell/components/mobileshell/qml/actiondrawer/private/LandscapeContentContainer.qml

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

123 lines
6.4 KiB
QML
Raw Normal View History

// SPDX-FileCopyrightText: 2021-2024 Devin Lin <devin@kde.org>
// SPDX-License-Identifier: LGPL-2.0-or-later
import QtQuick
import QtQuick.Controls as QQC2
import QtQuick.Layouts
import QtQuick.Shapes 1.8
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
/**
2024-06-16 20:50:06 +00:00
* Root element that contains all the ActionDrawer's contents, and is anchored to the screen.
*/
Item {
id: root
2024-07-27 03:47:44 +00:00
required property var actionDrawer
2024-07-27 03:47:44 +00:00
property alias quickSettings: quickSettingsPanel.quickSettings
property alias statusBar: quickSettingsPanel.statusBar
2024-07-27 03:47:44 +00:00
readonly property real minimizedQuickSettingsOffset: height
readonly property real maximizedQuickSettingsOffset: height
2026-05-19 07:13:08 +00:00
readonly property bool isConvergence: ShellSettings.Settings.convergenceModeEnabled
readonly property real convergenceFrameThickness: MobileShell.Constants.convergenceWorkspaceFrameThickness
readonly property real convergenceSurfaceTopInset: MobileShell.Constants.topPanelHeight + convergenceFrameThickness
2026-05-19 07:13:08 +00:00
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 quickSettingsPanelLeft: quickSettingsPanel.x
readonly property real opacityValue: Math.max(0, Math.min(1, actionDrawer.offsetResistance / root.minimizedQuickSettingsOffset))
readonly property double brightnessPressedValue: quickSettings.brightnessPressedValue
2024-07-27 03:47:44 +00:00
Kirigami.Theme.colorSet: Kirigami.Theme.View
Kirigami.Theme.inherit: false
2024-07-27 03:47:44 +00:00
MouseArea {
anchors.fill: parent
2024-07-27 03:47:44 +00:00
// dismiss drawer when background is clicked
onClicked: root.actionDrawer.close();
2024-07-27 03:47:44 +00:00
Shape {
id: actionDrawerSurface
x: quickSettingsPanel.x - cornerRadius
y: quickSettingsPanel.y
width: bodyWidth + cornerRadius
height: quickSettingsPanel.height
opacity: root.isConvergence ? quickSettingsPanel.opacity * root.brightnessPressedValue : 0
visible: opacity > 0 && bodyWidth > 0 && height > 0
z: 0
preferredRendererType: Shape.CurveRenderer
asynchronous: true
enabled: false
readonly property real bodyWidth: quickSettingsPanel.width
readonly property real cornerRadius: Math.min(MobileShell.Constants.convergenceWorkspaceFrameRadius,
Math.max(0.01, Math.min(bodyWidth, height) / 2))
Kirigami.Theme.inherit: false
Kirigami.Theme.colorSet: Kirigami.Theme.Window
ShapePath {
id: actionDrawerSurfacePath
readonly property real cornerRadius: actionDrawerSurface.cornerRadius
fillColor: Kirigami.Theme.backgroundColor
strokeWidth: 0
startX: actionDrawerSurface.width
startY: 0
PathLine { x: 0; y: 0 }
PathArc { x: actionDrawerSurfacePath.cornerRadius; y: actionDrawerSurfacePath.cornerRadius; radiusX: actionDrawerSurfacePath.cornerRadius; radiusY: actionDrawerSurfacePath.cornerRadius; direction: PathArc.Clockwise }
PathLine { x: actionDrawerSurfacePath.cornerRadius; y: actionDrawerSurface.height - actionDrawerSurfacePath.cornerRadius }
PathArc { x: 0; y: actionDrawerSurface.height; radiusX: actionDrawerSurfacePath.cornerRadius; radiusY: actionDrawerSurfacePath.cornerRadius; direction: PathArc.Clockwise }
PathLine { x: actionDrawerSurface.width; y: actionDrawerSurface.height }
PathLine { x: actionDrawerSurface.width; y: 0 }
}
}
// right sidebar
MobileShell.QuickSettingsPanel {
id: quickSettingsPanel
z: 1
2026-05-19 07:13:08 +00:00
height: Math.min(quickSettingsPanel.contentImplicitHeight + quickSettingsPanel.topPadding + quickSettingsPanel.bottomPadding, quickSettingsPanel.availableHeight)
width: Math.min(intendedWidth, quickSettingsPanel.availableWidth)
2024-07-27 03:47:44 +00:00
readonly property real columnWidth: 6 * Kirigami.Units.gridUnit
2026-05-19 07:13:08 +00:00
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))
2026-05-19 07:13:08 +00:00
readonly property int effectiveColumns: root.isConvergence
? Math.max(ShellSettings.Settings.quickSettingsColumns, convergenceColumns)
: ShellSettings.Settings.quickSettingsColumns
readonly property real intendedWidth: (columnWidth * effectiveColumns) + Kirigami.Units.gridUnit
2024-07-27 03:47:44 +00:00
2026-05-19 07:13:08 +00:00
readonly property bool isConvergence: root.isConvergence
property real offsetRatio: (quickSettingsPanel.height + restingTopMargin) / root.height
2026-05-19 07:13:08 +00:00
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
2026-05-19 07:13:08 +00:00
anchors.rightMargin: isConvergence ? root.convergenceSurfaceSideInset : 0
opacity: isConvergence ? Math.max(0, Math.min(1, root.actionDrawer.offset / root.minimizedQuickSettingsOffset)) : 1
2024-07-27 03:47:44 +00:00
actionDrawer: root.actionDrawer
2026-05-19 07:13:08 +00:00
fullScreenHeight: quickSettingsPanel.availableHeight
}
}
}