mirror of
https://gitgud.io/wackyideas/aerothemeplasma.git
synced 2024-08-15 00:43:43 +00:00
226 lines
8.5 KiB
QML
226 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
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|