pragma ComponentBehavior: Bound import QtQuick import Workcat Window { id: root required property CatController cat required property AppSettings settings readonly property var moodNames: ["walking", "running", "sitting", "grooming", "stretching", "sleeping", "loving", "alert"] readonly property real floorY: Screen.desktopAvailableHeight - height function openSettings() { settingsLoader.active = true if (settingsLoader.status === Loader.Ready) (settingsLoader.item as SettingsWindow).show() } width: settings.catSize height: Math.round(settings.catSize * 0.9) x: cat.x y: floorY color: Platform.opaqueBackground ? settings.coat : "transparent" flags: Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint | Qt.Tool | Qt.NoDropShadowWindowHint | Qt.WindowDoesNotAcceptFocus | (Platform.bypassWindowManager ? Qt.X11BypassWindowManagerHint : 0) visible: true title: qsTr("Workcat") Component.onCompleted: { cat.screenWidth = Screen.desktopAvailableWidth cat.catWidth = width } onWidthChanged: cat.catWidth = width Screen.onDesktopAvailableWidthChanged: cat.screenWidth = Screen.desktopAvailableWidth Cat { id: sprite anchors.fill: parent coat: root.settings.coat facingRight: root.cat.facingRight mood: root.moodNames[root.cat.mood] lifted: root.cat.dragging petted: root.cat.hovered && !root.cat.dragging look: root.cat.look Accessible.role: Accessible.Button Accessible.name: qsTr("Workcat") } HoverHandler { onHoveredChanged: root.cat.hovered = hovered } DragHandler { target: null onActiveChanged: root.cat.dragging = active onCentroidChanged: { if (active) root.cat.x = Math.max(0, Math.min(root.cat.screenWidth - root.width, root.x + centroid.position.x - centroid.pressPosition.x)) } } TapHandler { acceptedButtons: Qt.LeftButton onTapped: root.cat.pet() onDoubleTapped: root.openSettings() } TapHandler { acceptedButtons: Qt.RightButton onTapped: root.openSettings() } Loader { id: settingsLoader active: false sourceComponent: SettingsWindow { cat: root.cat settings: root.settings onClosing: settingsLoader.active = false } onLoaded: (item as SettingsWindow).show() } }