mirror of
https://github.com/kossLAN/dots.git
synced 2025-11-04 22:49:50 -05:00
Initial commit
remove syncthing folder bar/popops: fix menu window anims and positioning bar/popops: change anims a little and add dropshadow Update README.md widgets/coloredicon: move to colorization, looks worse but..., yea bar/popops: make popup window dissapear on menu close README: add todo list, and brief desc Update README.md Update README.md Update README.md bar/systray: issue recreate on interact bar/systray: hide popup on interact bar/systray: add arrow for entries with children bar/battery: start of battery widget wallpaper/matugen: add foot template extra sizing conditions for sys tray bar/systray: add some more margin to text update settings schema bar/workspaces: filter by monitor, switch to scriptmodel settings: fix settings lol bar/systray: fix right item feat: screenshot tool clipboard one day... feat: init lockscreen mpris: add ipc handler for multimedia keys mpris stuff save progress put shell in subdir, and add nix package move readme back woops bar/volume: make tool bar smaller greeter: init greeter greeter: fixed resource links readme: update checklist progress maybe, maybe not fix: fixed screenshot tool not working fix: bar layout issues progress save progress update track styled popup still broken but getting there still broken but getting there fix: gitignore qmlls.ini fix: remove qmlls.ini progress save new popup system new popup system new popup system more work on popups fix: mask issues on popups update readme
This commit is contained in:
commit
9e44812e93
102 changed files with 4592 additions and 0 deletions
197
shell/bar/Popup.qml
Normal file
197
shell/bar/Popup.qml
Normal file
|
|
@ -0,0 +1,197 @@
|
|||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
import Quickshell
|
||||
import Quickshell.Hyprland
|
||||
import qs.widgets
|
||||
|
||||
Scope {
|
||||
id: root
|
||||
|
||||
required property var bar
|
||||
|
||||
property real gaps: 5
|
||||
|
||||
property Item parentItem
|
||||
property PopupItem activeItem
|
||||
property PopupItem lastActiveItem
|
||||
|
||||
property PopupItem shownItem: activeItem ?? lastActiveItem
|
||||
|
||||
onActiveItemChanged: {
|
||||
if (activeItem != null) {
|
||||
activeItem.targetVisible = true;
|
||||
|
||||
if (parentItem) {
|
||||
activeItem.parent = parentItem;
|
||||
}
|
||||
}
|
||||
|
||||
if (lastActiveItem != null && lastActiveItem != activeItem) {
|
||||
lastActiveItem.targetVisible = false;
|
||||
}
|
||||
|
||||
if (activeItem != null) {
|
||||
lastActiveItem = activeItem;
|
||||
}
|
||||
}
|
||||
|
||||
function setItem(item: PopupItem) {
|
||||
activeItem = item;
|
||||
}
|
||||
|
||||
function removeItem(item: PopupItem) {
|
||||
if (activeItem == item) {
|
||||
activeItem = null;
|
||||
}
|
||||
}
|
||||
|
||||
function onHidden(item: PopupItem) {
|
||||
if (item == lastActiveItem) {
|
||||
console.log("triggered");
|
||||
lastActiveItem = null;
|
||||
}
|
||||
}
|
||||
|
||||
property real scaleMul: lastActiveItem && lastActiveItem.targetVisible ? 1 : 0
|
||||
|
||||
Behavior on scaleMul {
|
||||
SmoothedAnimation {
|
||||
velocity: 5
|
||||
}
|
||||
}
|
||||
|
||||
LazyLoader {
|
||||
id: popupLoader
|
||||
activeAsync: root.shownItem != null
|
||||
|
||||
PopupWindow {
|
||||
id: popup
|
||||
visible: true
|
||||
color: "transparent"
|
||||
implicitWidth: root.bar.width
|
||||
implicitHeight: Math.max(800, parentItem.targetHeight)
|
||||
|
||||
anchor {
|
||||
window: root.bar
|
||||
rect: Qt.rect(0, 0, root.bar.width, root.bar.height)
|
||||
edges: Edges.Bottom | Edges.Left
|
||||
gravity: Edges.Bottom | Edges.Right
|
||||
adjustment: PopupAdjustment.None
|
||||
}
|
||||
|
||||
mask: Region {
|
||||
item: parentItem
|
||||
}
|
||||
|
||||
HyprlandFocusGrab {
|
||||
id: grab
|
||||
active: true
|
||||
windows: [popup, root.bar]
|
||||
onCleared: {
|
||||
if (!active) {
|
||||
root.shownItem.closed();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// HyprlandWindow.opacity: root.scaleMul
|
||||
|
||||
HyprlandWindow.visibleMask: popup.mask
|
||||
|
||||
Connections {
|
||||
target: root
|
||||
|
||||
function onScaleMulChanged() {
|
||||
popup.mask.changed();
|
||||
}
|
||||
}
|
||||
|
||||
StyledRectangle {
|
||||
id: parentItem
|
||||
width: targetWidth
|
||||
height: targetHeight
|
||||
x: targetX
|
||||
y: root.gaps
|
||||
|
||||
transform: Scale {
|
||||
origin.x: parentItem.targetX
|
||||
origin.y: 0
|
||||
xScale: 1
|
||||
yScale: root.scaleMul
|
||||
}
|
||||
|
||||
readonly property var targetWidth: root.shownItem?.implicitWidth ?? 0
|
||||
readonly property var targetHeight: root.shownItem?.implicitHeight ?? 0
|
||||
|
||||
readonly property var targetX: {
|
||||
if (root.shownItem == null) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
let owner = root.shownItem.owner;
|
||||
let bar = root.bar;
|
||||
let isCentered = root.shownItem.centered;
|
||||
let xPos = owner.mapToItem(bar.contentItem, 0, bar.height, owner.width, 0).x;
|
||||
|
||||
let rightEdge = xPos + targetWidth;
|
||||
let maxRightEdge = popup.width;
|
||||
|
||||
if (isCentered) {
|
||||
return xPos - (targetWidth / 2) + (owner.width / 2);
|
||||
}
|
||||
|
||||
if (rightEdge > maxRightEdge) {
|
||||
// touching right edge, reposition
|
||||
// console.log("touching right edge");
|
||||
return maxRightEdge - targetWidth - root.gaps;
|
||||
}
|
||||
|
||||
return xPos;
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
root.parentItem = this;
|
||||
|
||||
if (root.activeItem) {
|
||||
root.activeItem.parent = this;
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Make a close animation, a little complicated, will need to track if an animation is running
|
||||
// and stop unload from occuring until its done, in the LazyLoader.
|
||||
|
||||
Behavior on x {
|
||||
enabled: root.lastActiveItem != null
|
||||
SmoothedAnimation {
|
||||
duration: 200
|
||||
easing.type: Easing.InOutQuad
|
||||
}
|
||||
}
|
||||
|
||||
Behavior on width {
|
||||
enabled: root.lastActiveItem != null
|
||||
SmoothedAnimation {
|
||||
duration: 200
|
||||
easing.type: Easing.InOutQuad
|
||||
}
|
||||
}
|
||||
|
||||
Behavior on height {
|
||||
enabled: root.lastActiveItem != null
|
||||
SmoothedAnimation {
|
||||
duration: 200
|
||||
easing.type: Easing.InOutQuad
|
||||
}
|
||||
}
|
||||
|
||||
// SmoothedAnimation on height {
|
||||
// duration: 200
|
||||
// easing.type: Easing.InOutQuad
|
||||
// to: parentItem.targetHeight
|
||||
// onToChanged: restart()
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue