diff --git a/Assets/evernight.gif b/Assets/Evernight.gif
similarity index 100%
rename from Assets/evernight.gif
rename to Assets/Evernight.gif
diff --git a/Modules/GifsLoader.qml b/Modules/GifsLoader.qml
index 48e7874..c4925d5 100644
--- a/Modules/GifsLoader.qml
+++ b/Modules/GifsLoader.qml
@@ -16,8 +16,12 @@ Repeater {
required property url fileUrl
required property string fileBaseName
+ required property int index
property bool loaded: false
+ property alias hovered: mouse.containsMouse
+ property alias zIndex: gifSaved.zIndex
+ z: gifSaved.zIndex
visible: gifItem.loaded
onXChanged: if ( gifItem.loaded ) gifSaved.positionX = gifItem.x
onYChanged: if ( gifItem.loaded ) gifSaved.positionY = gifItem.y
@@ -32,6 +36,7 @@ Repeater {
}
Mouse {
+ id: mouse
onWheel: (wheel)=> {
gifSaved.scaling = Math.max( 1, ( gifSaved.scaling + 0.1 * ( wheel.angleDelta.y / 120 ) ) )
}
@@ -48,12 +53,14 @@ Repeater {
property string configPath: configDir + name
onLoaded: {
+ if ( gifSaved.zIndex === -1 ) gifSaved.zIndex = gifItem.index
gifItem.x = gifSaved.positionX
gifItem.y = gifSaved.positionY
gifItem.loaded = true
}
onLoadFailed: {
+ gifSaved.zIndex = gifItem.index
writeAdapter()
gifItem.loaded = true
}
@@ -70,6 +77,7 @@ Repeater {
property real scaling: 1
property int positionX: 0
property int positionY: 0
+ property int zIndex: -1
}
}
}
diff --git a/Modules/Mouse.qml b/Modules/Mouse.qml
index 352fb10..39d5ad8 100644
--- a/Modules/Mouse.qml
+++ b/Modules/Mouse.qml
@@ -3,6 +3,7 @@ import QtQuick
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.LeftButton
+ hoverEnabled: true
drag.target: parent
drag.axis: Drag.XAndYAxis
drag.minimumX: 0
diff --git a/README.md b/README.md
index 01c8ded..ec1738f 100644
--- a/README.md
+++ b/README.md
@@ -1,20 +1,16 @@
Pet March (Evernight)
My selfmade desktop pet using QT
-

+
## Feature list
+
- [x] Hyprland keybind support
- - [x] Swap Overlay <> Bottom
- - [x] Swap Mouse area targetted -/+
+ - [x] Swap Overlay <> Bottom
+ - [x] Swap Mouse area targetted -/+
- [x] Dynamic pets
- [x] Multiple pets
- [x] Config location ~/.config/I-DeskPet/config.json
- {"gifFolder": "PATH"}
+ {"gifFolder": "PATH"}
- [x] Evernight base gif img
-
-## To-Do list
-- [] Setting more json settings
-- [] Clear up code
-- [] Auto update gifs modeldata
diff --git a/shell.qml b/shell.qml
index 3a24133..de78f62 100644
--- a/shell.qml
+++ b/shell.qml
@@ -9,7 +9,7 @@ import qs.Modules
PanelWindow {
id: mainWindow
- WlrLayershell.namespace: "IDeskPet-Pet"
+ WlrLayershell.namespace: "I-DeskPet"
WlrLayershell.layer: WlrLayer.Overlay
WlrLayershell.exclusionMode: ExclusionMode.Ignore
surfaceFormat.opaque: false
@@ -110,17 +110,58 @@ PanelWindow {
}
}
- GlobalShortcut {
- appid: "I-DeskPet"
- name: "toggle-Region"
- onPressed: {
- if ( !mainWindow.setMask ) {
- mainWindow.mask = mainWindow.petMove
- mainWindow.setMask = true
- } else {
- mainWindow.mask = mainWindow.noMove
- mainWindow.setMask = false
- }
- }
- }
-}
+ GlobalShortcut {
+ appid: "I-DeskPet"
+ name: "toggle-Region"
+ onPressed: {
+ if ( !mainWindow.setMask ) {
+ mainWindow.mask = mainWindow.petMove
+ mainWindow.setMask = true
+ } else {
+ mainWindow.mask = mainWindow.noMove
+ mainWindow.setMask = false
+ }
+ }
+ }
+
+ GlobalShortcut {
+ appid: "I-DeskPet"
+ name: "cycle-zIndex"
+ onPressed: {
+ let items = mainWindow.repeaterItems
+ if ( items.length < 2 ) return
+
+ // Find the hovered GIF
+ let hovered = null
+ for ( let i = 0; i < items.length; i++ ) {
+ if ( items[i].hovered ) {
+ hovered = items[i]
+ break
+ }
+ }
+ if ( !hovered ) return
+
+ let currentZ = hovered.zIndex
+ let maxZ = items.length - 1
+
+ if ( currentZ >= maxZ ) {
+ // Already on top, wrap to bottom: shift everyone else up by 1
+ for ( let i = 0; i < items.length; i++ ) {
+ if ( items[i] !== hovered ) {
+ items[i].zIndex += 1
+ }
+ }
+ hovered.zIndex = 0
+ } else {
+ // Swap with the item directly above
+ for ( let i = 0; i < items.length; i++ ) {
+ if ( items[i] !== hovered && items[i].zIndex === currentZ + 1 ) {
+ items[i].zIndex = currentZ
+ break
+ }
+ }
+ hovered.zIndex = currentZ + 1
+ }
+ }
+ }
+}