mirror of
https://gitgud.io/wackyideas/aerothemeplasma.git
synced 2024-08-15 00:43:43 +00:00
225 lines
8.5 KiB
QML
225 lines
8.5 KiB
QML
// Qt
|
||
import QtCore
|
||
import QtQuick 2.15
|
||
import QtQuick.Layouts 1.15
|
||
import QtQuick.Window 2.15
|
||
import Qt5Compat.GraphicalEffects
|
||
|
||
// KDE
|
||
|
||
import org.kde.kwin as KWin
|
||
import org.kde.kwin.private.effects 1.0
|
||
import org.kde.kwindowsystem 1.0
|
||
import org.kde.plasma.core 2.0 as PlasmaCore
|
||
import org.kde.plasma.extras 2.0 as PlasmaExtras
|
||
import org.kde.kirigami as Kirigami
|
||
import org.kde.ksvg as KSvg
|
||
|
||
Item
|
||
{
|
||
//property bool inEditMode: Plasmoid.containment.corona.editMode;
|
||
property bool showingDesktop: KWindowSystem.showingDesktop //false
|
||
property real peekOpacity: showingDesktop ? 1 : 0
|
||
property bool instantiatorActive: true
|
||
property bool delayActive: false
|
||
|
||
x: 0
|
||
y: 0
|
||
width: Screen.width
|
||
height: Screen.height
|
||
|
||
Behavior on peekOpacity
|
||
{
|
||
NumberAnimation { duration: 150; easing.type: Easing.Linear; }
|
||
}
|
||
|
||
Timer {
|
||
id: timer
|
||
interval: 20
|
||
onTriggered: {
|
||
delayActive = showingDesktop;
|
||
}
|
||
}
|
||
onShowingDesktopChanged: {
|
||
if(showingDesktop) delayActive = true;
|
||
else timer.start();
|
||
}
|
||
|
||
KWin.WindowFilterModel {
|
||
id: windowmodel
|
||
activity: KWin.Workspace.currentActivity
|
||
desktop: KWin.Workspace.currentDesktop
|
||
windowModel: KWin.WindowModel {}
|
||
minimizedWindows: false
|
||
windowType: ~KWin.WindowFilterModel.Dock &
|
||
~KWin.WindowFilterModel.Desktop &
|
||
~KWin.WindowFilterModel.Notification &
|
||
~KWin.WindowFilterModel.CriticalNotification
|
||
}
|
||
|
||
// Hack that ignores windows that are present in edit mode
|
||
function ignoreWindow(w) {
|
||
return !((w.resourceClass == "plasmashell" && w.skipTaskbar && w.caption == "plasmashell") ||
|
||
(w.resourceClass == "plasmashell") && w.dialog && !w.normalWindow && w.caption == "plasmashell" && w.modal && w.desktopFileName == "org.kde.plasmashell" && w.transient)
|
||
}
|
||
|
||
Instantiator
|
||
{
|
||
active: true
|
||
asynchronous: true
|
||
model: 1
|
||
|
||
delegate: Window
|
||
{
|
||
flags: Qt.BypassWindowManagerHint | Qt.FramelessWindowHint | Qt.WindowTransparentForInput
|
||
color: "transparent"
|
||
x: 0
|
||
y: 0
|
||
width: Screen.width
|
||
height: Screen.height
|
||
visible: delayActive
|
||
opacity: peekOpacity
|
||
|
||
title: "aeropeek-aerothemeplasma"
|
||
// Setup reflection
|
||
Image
|
||
{
|
||
id: reflection
|
||
x: 0
|
||
y: 0
|
||
width: Screen.width
|
||
height: Screen.height
|
||
source: StandardPaths.writableLocation(StandardPaths.GenericDataLocation) + "/smod/reflections.png" //"~/.local/share/smod/reflections.png"
|
||
sourceSize: Qt.size(width, height)
|
||
smooth: true
|
||
visible: false
|
||
}
|
||
|
||
// Setup mask
|
||
Item
|
||
{
|
||
id: mask
|
||
anchors.fill: reflection
|
||
visible: true
|
||
opacity: 0.01
|
||
|
||
// Paint over all window geometry
|
||
Repeater
|
||
{
|
||
model: windowmodel
|
||
delegate: Rectangle
|
||
{
|
||
x: model.window.x
|
||
y: model.window.y
|
||
width: model.window.width
|
||
height: model.window.height
|
||
color: "black"
|
||
radius: 6
|
||
visible: {
|
||
|
||
//if(!model.window.minimized) console.log(JSON.stringify(model.window));
|
||
return !model.window.minimized && model.window.managed && ignoreWindow(model.window)
|
||
}
|
||
|
||
//visible: { if(!model.window.minimized && model.window.caption !== "") console.log(model.window.stackingOrder + " " + model.window.active + " " + model.window.caption); return !model.window.minimized && model.window.managed; }
|
||
//visible: { if(!model.window.minimized && model.window.caption !== "") console.log(JSON.stringify(model.window)); return !model.window.minimized && model.window.managed }
|
||
}
|
||
}
|
||
}
|
||
|
||
// Paint reflection
|
||
OpacityMask
|
||
{
|
||
anchors.fill: reflection
|
||
source: reflection
|
||
maskSource: mask
|
||
}
|
||
|
||
|
||
// Paint frames
|
||
Repeater
|
||
{
|
||
model: windowmodel
|
||
delegate: Item
|
||
{
|
||
id: peekwindow
|
||
|
||
// Assume the topmost window is the active window
|
||
property bool clientActive: model.window.stackingOrder == windowmodel.rowCount() - 1
|
||
// Assume window is maximized under these conditions
|
||
property bool clientMaximized: model.window.x == 0 && model.window.y == 0 && model.window.width == Screen.width && model.window.height >= Screen.height / 2
|
||
|
||
anchors.fill: parent
|
||
visible: !model.window.minimized && !clientMaximized && model.window.managed && ignoreWindow(model.window)
|
||
//&& !(model.window.dialog && !model.window.normalWindow && model.window.resourceClass == "plasmashell" && model.window.caption == "plasmashell <2>")
|
||
z: model.window.stackingOrder
|
||
|
||
Item {
|
||
id: glowCorners
|
||
anchors.fill: frame
|
||
Image
|
||
{
|
||
anchors.top: parent.top
|
||
anchors.left: parent.left
|
||
source: StandardPaths.writableLocation(StandardPaths.GenericDataLocation) + "/smod/" + (peekwindow.clientActive ? "framecornereffect.png" : "framecornereffect-unfocus.png")
|
||
smooth: true
|
||
}
|
||
|
||
Image
|
||
{
|
||
anchors.top: parent.top
|
||
anchors.right: parent.right
|
||
source: StandardPaths.writableLocation(StandardPaths.GenericDataLocation) + "/smod/" + (peekwindow.clientActive ? "framecornereffect.png" : "framecornereffect-unfocus.png")
|
||
smooth: true
|
||
mirror: true
|
||
}
|
||
|
||
layer.enabled: true
|
||
layer.effect: OpacityMask {
|
||
maskSource: Rectangle {
|
||
x: frame.x
|
||
y: frame.y
|
||
width: frame.width
|
||
height: frame.height
|
||
radius: 6
|
||
}
|
||
}
|
||
}
|
||
|
||
KSvg.FrameSvgItem
|
||
{
|
||
id: frameshadow
|
||
|
||
property int actualMarginLeft: frameshadow.margins.left - 16
|
||
property int actualMarginRight: frameshadow.margins.right - 9
|
||
property int actualMarginTop: frameshadow.margins.top - 17
|
||
property int actualMarginBottom: frameshadow.margins.bottom - 17
|
||
|
||
imagePath: Qt.resolvedUrl("res/peek-frame.svgz")
|
||
prefix: peekwindow.clientActive ? "shadow" : "shadowunfocus"
|
||
|
||
x: frame.x - frameshadow.actualMarginLeft
|
||
y: frame.y - frameshadow.actualMarginTop
|
||
width: frame.width + frameshadow.actualMarginLeft + frameshadow.actualMarginRight
|
||
height: frame.height + frameshadow.actualMarginTop + frameshadow.actualMarginBottom
|
||
}
|
||
|
||
KSvg.FrameSvgItem
|
||
{
|
||
id: frame
|
||
|
||
imagePath: Qt.resolvedUrl("res/peek-frame.svgz")
|
||
prefix: peekwindow.clientActive ? "" : "unfocus"
|
||
|
||
x: model.window.x
|
||
y: model.window.y
|
||
width: model.window.width
|
||
height: model.window.height
|
||
}
|
||
|
||
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|