forked from Shinonome/dots-hyprland
90 lines
4.4 KiB
QML
90 lines
4.4 KiB
QML
import QtQuick
|
|
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 barHeight: Appearance.sizes.baseBarHeight
|
|
function getRounding(cornerStyle) {
|
|
switch(cornerStyle) {
|
|
case 0: return Appearance.rounding.screenRounding;
|
|
case 1: return Appearance.rounding.windowRounding;
|
|
case 2: return 0;
|
|
default: return Appearance.rounding.screenRounding;
|
|
}
|
|
}
|
|
function getEdgeGap(cornerStyle) {
|
|
switch(cornerStyle) {
|
|
case 0: return 0;
|
|
case 1: return Appearance.sizes.hyprlandGapsOut;
|
|
case 2: return 0;
|
|
default: return 0;
|
|
}
|
|
}
|
|
function getEdgeRounding(cornerStyle) {
|
|
switch(cornerStyle) {
|
|
case 0: return 0;
|
|
case 1: return Appearance.rounding.windowRounding;
|
|
case 2: return 0;
|
|
default: return Appearance.rounding.windowRounding;
|
|
}
|
|
}
|
|
function getHug(cornerStyle) {
|
|
return cornerStyle === 0;
|
|
}
|
|
|
|
// Some info
|
|
reservedTop: barHeight + getEdgeGap(Config.options.bar.cornerStyle)
|
|
|
|
// Background
|
|
backgroundPolygon: {
|
|
// It's certainly cleaner to have the below props declared outside, but we do this
|
|
// to make sure config change only makes this re-evaluate exactly once
|
|
const cornerStyle = Config.options.bar.cornerStyle
|
|
const rounding = root.getRounding(cornerStyle)
|
|
const edgeGap = root.getEdgeGap(cornerStyle)
|
|
const edgeRounding = root.getEdgeRounding(cornerStyle)
|
|
const hug = root.getHug(cornerStyle)
|
|
const points = [
|
|
|
|
// bottom-middle
|
|
new MaterialShapes.PointNRound(new Offset.Offset(root.screenWidth / 2, root.barHeight + edgeGap), new CornerRounding.CornerRounding(0)),
|
|
|
|
// bottom-left /||
|
|
new MaterialShapes.PointNRound(new Offset.Offset(edgeGap + rounding, edgeGap + barHeight), new CornerRounding.CornerRounding(0)),
|
|
new MaterialShapes.PointNRound(new Offset.Offset(edgeGap, edgeGap + barHeight), new CornerRounding.CornerRounding(rounding)),
|
|
new MaterialShapes.PointNRound(new Offset.Offset(edgeGap, edgeGap + barHeight + rounding * (hug ? 1 : -1)), new CornerRounding.CornerRounding(edgeRounding)),
|
|
// top-left |/-
|
|
new MaterialShapes.PointNRound(new Offset.Offset(edgeGap, edgeGap + rounding), new CornerRounding.CornerRounding(0)),
|
|
new MaterialShapes.PointNRound(new Offset.Offset(edgeGap, edgeGap), new CornerRounding.CornerRounding(edgeRounding)),
|
|
new MaterialShapes.PointNRound(new Offset.Offset(edgeGap + rounding, edgeGap), new CornerRounding.CornerRounding(0)),
|
|
|
|
// top-middle
|
|
new MaterialShapes.PointNRound(new Offset.Offset(root.screenWidth / 2, edgeGap), new CornerRounding.CornerRounding(0)),
|
|
|
|
// top-right -\|
|
|
new MaterialShapes.PointNRound(new Offset.Offset(root.screenWidth - edgeGap - rounding, edgeGap), new CornerRounding.CornerRounding(0)),
|
|
new MaterialShapes.PointNRound(new Offset.Offset(root.screenWidth - edgeGap, edgeGap), new CornerRounding.CornerRounding(edgeRounding)),
|
|
new MaterialShapes.PointNRound(new Offset.Offset(root.screenWidth - edgeGap, edgeGap + rounding), new CornerRounding.CornerRounding(0)),
|
|
|
|
// bottom-right ||\
|
|
new MaterialShapes.PointNRound(new Offset.Offset(root.screenWidth - edgeGap, root.barHeight + edgeGap + rounding * (hug ? 1 : -1)), new CornerRounding.CornerRounding(edgeRounding)),
|
|
new MaterialShapes.PointNRound(new Offset.Offset(root.screenWidth - edgeGap, root.barHeight + edgeGap), new CornerRounding.CornerRounding(rounding)),
|
|
new MaterialShapes.PointNRound(new Offset.Offset(root.screenWidth - edgeGap - rounding, root.barHeight + edgeGap), new CornerRounding.CornerRounding(0)),
|
|
]
|
|
return MaterialShapes.customPolygon(points, 1, new Offset.Offset(root.screenWidth / 2, edgeGap + barHeight / 2))
|
|
}
|
|
|
|
// Content
|
|
implicitHeight: barHeight + getEdgeGap(Config.options.bar.cornerStyle) * 2
|
|
anchors {
|
|
top: parent.top
|
|
left: parent.left
|
|
right: parent.right
|
|
}
|
|
}
|