mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-01-28 15:32:50 -05:00
Modal/Popout layout alterations
This commit is contained in:
@@ -678,6 +678,10 @@ Singleton {
|
|||||||
|
|
||||||
function withAlpha(c, a) { return Qt.rgba(c.r, c.g, c.b, a); }
|
function withAlpha(c, a) { return Qt.rgba(c.r, c.g, c.b, a); }
|
||||||
|
|
||||||
|
function snap(value, dpr) {
|
||||||
|
return Math.round(value * dpr) / dpr
|
||||||
|
}
|
||||||
|
|
||||||
Process {
|
Process {
|
||||||
id: matugenCheck
|
id: matugenCheck
|
||||||
command: ["which", "matugen"]
|
command: ["which", "matugen"]
|
||||||
|
|||||||
@@ -157,8 +157,7 @@ PanelWindow {
|
|||||||
radius: root.cornerRadius
|
radius: root.cornerRadius
|
||||||
border.color: root.borderColor
|
border.color: root.borderColor
|
||||||
border.width: root.borderWidth
|
border.width: root.borderWidth
|
||||||
layer.enabled: root.enableShadow
|
layer.enabled: true
|
||||||
opacity: root.shouldBeVisible ? 1 : 0
|
|
||||||
transform: root.animationType === "slide" ? slideTransform : null
|
transform: root.animationType === "slide" ? slideTransform : null
|
||||||
|
|
||||||
Translate {
|
Translate {
|
||||||
@@ -176,13 +175,6 @@ PanelWindow {
|
|||||||
asynchronous: false
|
asynchronous: false
|
||||||
}
|
}
|
||||||
|
|
||||||
Behavior on opacity {
|
|
||||||
NumberAnimation {
|
|
||||||
duration: root.animationDuration
|
|
||||||
easing.type: root.animationEasing
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
layer.effect: MultiEffect {
|
layer.effect: MultiEffect {
|
||||||
shadowEnabled: true
|
shadowEnabled: true
|
||||||
shadowHorizontalOffset: 0
|
shadowHorizontalOffset: 0
|
||||||
@@ -190,6 +182,15 @@ PanelWindow {
|
|||||||
shadowBlur: 1
|
shadowBlur: 1
|
||||||
shadowColor: Theme.shadowStrong
|
shadowColor: Theme.shadowStrong
|
||||||
shadowOpacity: 0.3
|
shadowOpacity: 0.3
|
||||||
|
source: contentContainer
|
||||||
|
opacity: root.shouldBeVisible ? 1 : 0
|
||||||
|
|
||||||
|
Behavior on opacity {
|
||||||
|
NumberAnimation {
|
||||||
|
duration: animationDuration
|
||||||
|
easing.type: animationEasing
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -68,56 +68,69 @@ PanelWindow {
|
|||||||
bottom: true
|
bottom: true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
readonly property real screenWidth: root.screen.width
|
||||||
|
readonly property real screenHeight: root.screen.height
|
||||||
|
readonly property real dpr: root.screen.devicePixelRatio
|
||||||
|
|
||||||
|
readonly property real calculatedX: {
|
||||||
|
if (SettingsData.dankBarPosition === SettingsData.Position.Left) {
|
||||||
|
return triggerY
|
||||||
|
} else if (SettingsData.dankBarPosition === SettingsData.Position.Right) {
|
||||||
|
return screenWidth - triggerY - popupWidth
|
||||||
|
} else {
|
||||||
|
const centerX = triggerX + (triggerWidth / 2) - (popupWidth / 2)
|
||||||
|
return Math.max(Theme.popupDistance, Math.min(screenWidth - popupWidth - Theme.popupDistance, centerX))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
readonly property real calculatedY: {
|
||||||
|
if (SettingsData.dankBarPosition === SettingsData.Position.Left || SettingsData.dankBarPosition === SettingsData.Position.Right) {
|
||||||
|
const centerY = triggerX + (triggerWidth / 2) - (popupHeight / 2)
|
||||||
|
return Math.max(Theme.popupDistance, Math.min(screenHeight - popupHeight - Theme.popupDistance, centerY))
|
||||||
|
} else if (SettingsData.dankBarPosition === SettingsData.Position.Bottom) {
|
||||||
|
return Math.max(Theme.popupDistance, Math.min(screenHeight - popupHeight - Theme.popupDistance, screenHeight - triggerY - popupHeight + Theme.popupDistance))
|
||||||
|
} else {
|
||||||
|
return Math.max(Theme.popupDistance, Math.min(screenHeight - popupHeight - Theme.popupDistance, triggerY + Theme.popupDistance))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
readonly property real alignedWidth: Theme.snap(popupWidth, dpr)
|
||||||
|
readonly property real alignedHeight: Theme.snap(popupHeight, dpr)
|
||||||
|
readonly property real alignedX: Theme.snap(calculatedX, dpr)
|
||||||
|
readonly property real alignedY: Theme.snap(calculatedY, dpr)
|
||||||
|
|
||||||
MouseArea {
|
MouseArea {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
enabled: shouldBeVisible
|
enabled: shouldBeVisible
|
||||||
onClicked: mouse => {
|
onClicked: mouse => {
|
||||||
var localPos = mapToItem(contentContainer, mouse.x, mouse.y)
|
if (mouse.x < alignedX || mouse.x > alignedX + alignedWidth ||
|
||||||
if (localPos.x < 0 || localPos.x > contentContainer.width || localPos.y < 0 || localPos.y > contentContainer.height) {
|
mouse.y < alignedY || mouse.y > alignedY + alignedHeight) {
|
||||||
backgroundClicked()
|
backgroundClicked()
|
||||||
close()
|
close()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Item {
|
Loader {
|
||||||
id: contentContainer
|
id: contentLoader
|
||||||
// ! TODO - cannot figure out the proper fix for this, some texture artifacts with certain drivers screen scales
|
x: alignedX
|
||||||
|
y: alignedY
|
||||||
|
width: alignedWidth
|
||||||
|
height: alignedHeight
|
||||||
|
active: root.visible
|
||||||
|
asynchronous: false
|
||||||
|
opacity: Quickshell.env("DMS_DISABLE_LAYER") === "true" ? (shouldBeVisible ? 1 : 0) : 1
|
||||||
layer.enabled: Quickshell.env("DMS_DISABLE_LAYER") !== "true"
|
layer.enabled: Quickshell.env("DMS_DISABLE_LAYER") !== "true"
|
||||||
|
layer.effect: MultiEffect {
|
||||||
|
source: contentLoader
|
||||||
|
opacity: shouldBeVisible ? 1 : 0
|
||||||
|
|
||||||
readonly property real screenWidth: root.screen.width
|
Behavior on opacity {
|
||||||
readonly property real screenHeight: root.screen.height
|
NumberAnimation {
|
||||||
readonly property real gothOffset: SettingsData.dankBarGothCornersEnabled ? Theme.cornerRadius : 0
|
duration: animationDuration
|
||||||
readonly property real calculatedX: {
|
easing.type: animationEasing
|
||||||
if (SettingsData.dankBarPosition === SettingsData.Position.Left) {
|
}
|
||||||
return triggerY
|
|
||||||
} else if (SettingsData.dankBarPosition === SettingsData.Position.Right) {
|
|
||||||
return screenWidth - triggerY - popupWidth
|
|
||||||
} else {
|
|
||||||
const centerX = triggerX + (triggerWidth / 2) - (popupWidth / 2)
|
|
||||||
return Math.max(Theme.popupDistance, Math.min(screenWidth - popupWidth - Theme.popupDistance, centerX))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
readonly property real calculatedY: {
|
|
||||||
if (SettingsData.dankBarPosition === SettingsData.Position.Left || SettingsData.dankBarPosition === SettingsData.Position.Right) {
|
|
||||||
const centerY = triggerX + (triggerWidth / 2) - (popupHeight / 2)
|
|
||||||
return Math.max(Theme.popupDistance, Math.min(screenHeight - popupHeight - Theme.popupDistance, centerY))
|
|
||||||
} else if (SettingsData.dankBarPosition === SettingsData.Position.Bottom) {
|
|
||||||
return Math.max(Theme.popupDistance, Math.min(screenHeight - popupHeight - Theme.popupDistance, screenHeight - triggerY - popupHeight + Theme.popupDistance))
|
|
||||||
} else {
|
|
||||||
return Math.max(Theme.popupDistance, Math.min(screenHeight - popupHeight - Theme.popupDistance, triggerY + Theme.popupDistance))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
readonly property real dpr: root.screen.devicePixelRatio
|
|
||||||
function snap(v) { return Math.round(v * dpr) / dpr }
|
|
||||||
width: popupWidth
|
|
||||||
height: popupHeight
|
|
||||||
x: snap(calculatedX)
|
|
||||||
y: snap(calculatedY)
|
|
||||||
|
|
||||||
opacity: shouldBeVisible ? 1 : 0
|
|
||||||
scale: 1
|
|
||||||
|
|
||||||
Behavior on opacity {
|
Behavior on opacity {
|
||||||
NumberAnimation {
|
NumberAnimation {
|
||||||
@@ -125,26 +138,21 @@ PanelWindow {
|
|||||||
easing.type: animationEasing
|
easing.type: animationEasing
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Loader {
|
Item {
|
||||||
id: contentLoader
|
x: alignedX
|
||||||
anchors.fill: parent
|
y: alignedY
|
||||||
active: root.visible
|
width: alignedWidth
|
||||||
asynchronous: false
|
height: alignedHeight
|
||||||
}
|
focus: true
|
||||||
|
Keys.onPressed: event => {
|
||||||
Item {
|
if (event.key === Qt.Key_Escape) {
|
||||||
anchors.fill: parent
|
close()
|
||||||
focus: true
|
event.accepted = true
|
||||||
Keys.onPressed: event => {
|
}
|
||||||
if (event.key === Qt.Key_Escape) {
|
|
||||||
close()
|
|
||||||
event.accepted = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Component.onCompleted: forceActiveFocus()
|
|
||||||
onVisibleChanged: if (visible)
|
|
||||||
forceActiveFocus()
|
|
||||||
}
|
}
|
||||||
|
Component.onCompleted: forceActiveFocus()
|
||||||
|
onVisibleChanged: if (visible) forceActiveFocus()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user