forked from Shinonome/dots-hyprland
94 lines
4.7 KiB
QML
94 lines
4.7 KiB
QML
import QtQuick
|
|
import Quickshell.Hyprland
|
|
import qs
|
|
import qs.modules.common
|
|
import "../../common/widgets/shapes/material-shapes.js" as MaterialShapes
|
|
import "../../common/widgets/shapes/shapes/corner-rounding.js" as CornerRounding
|
|
import "../../common/widgets/shapes/geometry/offset.js" as Offset
|
|
|
|
HAbstractMorphedPanel {
|
|
id: root
|
|
|
|
// Own props
|
|
property int edgeGap: Appearance.sizes.hyprlandGapsOut
|
|
property real rounding: Appearance.rounding.windowRounding
|
|
property real contentHeight: 300 // For now
|
|
property real contentWidth: root.screenWidth * 0.9
|
|
property real horizontalGap: (root.screenWidth - contentWidth) / 2
|
|
|
|
// Background
|
|
backgroundPolygon: {
|
|
const bottom = Config.options.bar.bottom
|
|
const topY = bottom ? (root.screenHeight - edgeGap - contentHeight) : edgeGap
|
|
const bottomY = bottom ? (root.screenHeight - edgeGap) : (edgeGap + contentHeight)
|
|
const points = [
|
|
// bottom-middle
|
|
new MaterialShapes.PointNRound(new Offset.Offset(root.screenWidth / 2, bottomY), new CornerRounding.CornerRounding(0)),
|
|
// bottom-left
|
|
new MaterialShapes.PointNRound(new Offset.Offset(horizontalGap + rounding, bottomY), new CornerRounding.CornerRounding(rounding)),
|
|
new MaterialShapes.PointNRound(new Offset.Offset(horizontalGap, bottomY), new CornerRounding.CornerRounding(rounding)),
|
|
new MaterialShapes.PointNRound(new Offset.Offset(horizontalGap, bottomY - rounding), new CornerRounding.CornerRounding(rounding)),
|
|
// top-left
|
|
new MaterialShapes.PointNRound(new Offset.Offset(horizontalGap, topY + rounding), new CornerRounding.CornerRounding(rounding)),
|
|
new MaterialShapes.PointNRound(new Offset.Offset(horizontalGap, topY), new CornerRounding.CornerRounding(rounding)),
|
|
new MaterialShapes.PointNRound(new Offset.Offset(horizontalGap + rounding, topY), new CornerRounding.CornerRounding(rounding)),
|
|
// top-middle
|
|
new MaterialShapes.PointNRound(new Offset.Offset(root.screenWidth / 2, topY), new CornerRounding.CornerRounding(0)),
|
|
// top-right
|
|
new MaterialShapes.PointNRound(new Offset.Offset(root.screenWidth - horizontalGap - rounding, topY), new CornerRounding.CornerRounding(rounding)),
|
|
new MaterialShapes.PointNRound(new Offset.Offset(root.screenWidth - horizontalGap, topY), new CornerRounding.CornerRounding(rounding)),
|
|
new MaterialShapes.PointNRound(new Offset.Offset(root.screenWidth - horizontalGap, topY + rounding), new CornerRounding.CornerRounding(rounding)),
|
|
|
|
// bottom-right
|
|
new MaterialShapes.PointNRound(new Offset.Offset(root.screenWidth - horizontalGap, bottomY - rounding), new CornerRounding.CornerRounding(rounding)),
|
|
new MaterialShapes.PointNRound(new Offset.Offset(root.screenWidth - horizontalGap, bottomY), new CornerRounding.CornerRounding(rounding)),
|
|
new MaterialShapes.PointNRound(new Offset.Offset(root.screenWidth - horizontalGap - rounding, bottomY), new CornerRounding.CornerRounding(rounding)),
|
|
]
|
|
return MaterialShapes.customPolygon(points, 1, new Offset.Offset(root.screenWidth / 2, edgeGap + contentHeight / 2))
|
|
}
|
|
|
|
// // Keybinds
|
|
// GlobalShortcut {
|
|
// name: "searchToggle"
|
|
// description: "Toggles search on press"
|
|
|
|
// onPressed: {
|
|
// GlobalStates.overviewOpen = !GlobalStates.overviewOpen;
|
|
// }
|
|
// }
|
|
// GlobalShortcut {
|
|
// name: "searchToggleRelease"
|
|
// description: "Toggles search on release"
|
|
|
|
// onPressed: {
|
|
// GlobalStates.superReleaseMightTrigger = true;
|
|
// }
|
|
|
|
// onReleased: {
|
|
// if (!GlobalStates.superReleaseMightTrigger) {
|
|
// GlobalStates.superReleaseMightTrigger = true;
|
|
// return;
|
|
// }
|
|
// GlobalStates.overviewOpen = !GlobalStates.overviewOpen;
|
|
// }
|
|
// }
|
|
// GlobalShortcut {
|
|
// name: "searchToggleReleaseInterrupt"
|
|
// description: "Interrupts possibility of search being toggled on release. " + "This is necessary because GlobalShortcut.onReleased in quickshell triggers whether or not you press something else while holding the key. " + "To make sure this works consistently, use binditn = MODKEYS, catchall in an automatically triggered submap that includes everything."
|
|
|
|
// onPressed: {
|
|
// GlobalStates.superReleaseMightTrigger = false;
|
|
// }
|
|
// }
|
|
|
|
// Connections {
|
|
// target: GlobalStates
|
|
// function onOverviewOpenChanged() {
|
|
// if (GlobalStates.overviewOpen) {
|
|
// root.requestFocus();
|
|
// } else {
|
|
// root.dismissed();
|
|
// }
|
|
// }
|
|
// }
|
|
} |