67 lines
2.4 KiB
QML
67 lines
2.4 KiB
QML
// Copyright (C) 2022 The Qt Company Ltd.
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
|
|
|
import QtQuick
|
|
|
|
Item {
|
|
id: rootItem
|
|
property alias blurSrc1: blurredItemSource1
|
|
property alias blurSrc2: blurredItemSource2
|
|
property alias blurSrc3: blurredItemSource3
|
|
property alias blurSrc4: blurredItemSource4
|
|
property alias blurSrc5: blurredItemSource5
|
|
|
|
component BlurItem : ShaderEffect {
|
|
property vector2d offset: Qt.vector2d((1.0 + rootItem.blurMultiplier) / width,
|
|
(1.0 + rootItem.blurMultiplier) / height)
|
|
visible: false
|
|
layer.enabled: true
|
|
layer.smooth: true
|
|
vertexShader: "bluritems.vert.qsb"
|
|
fragmentShader: "bluritems.frag.qsb"
|
|
}
|
|
|
|
QtObject {
|
|
id: priv
|
|
property bool useBlurItem1: true
|
|
property bool useBlurItem2: rootItem.blurMax > 2
|
|
property bool useBlurItem3: rootItem.blurMax > 8
|
|
property bool useBlurItem4: rootItem.blurMax > 16
|
|
property bool useBlurItem5: rootItem.blurMax > 32
|
|
}
|
|
|
|
BlurItem {
|
|
id: blurredItemSource1
|
|
property Item src: priv.useBlurItem1 ? source : null
|
|
// Size of the first blurred item is by default half of the source.
|
|
// Increase for quality and decrease for performance & more blur.
|
|
readonly property int blurItemSize: 8
|
|
width: src ? Math.ceil(src.width / 16) * blurItemSize : 0
|
|
height: src ? Math.ceil(src.height / 16) * blurItemSize : 0
|
|
}
|
|
BlurItem {
|
|
id: blurredItemSource2
|
|
property Item src: priv.useBlurItem2 ? blurredItemSource1 : null
|
|
width: blurredItemSource1.width * 0.5
|
|
height: blurredItemSource1.height * 0.5
|
|
}
|
|
BlurItem {
|
|
id: blurredItemSource3
|
|
property Item src: priv.useBlurItem3 ? blurredItemSource2 : null
|
|
width: blurredItemSource2.width * 0.5
|
|
height: blurredItemSource2.height * 0.5
|
|
}
|
|
BlurItem {
|
|
id: blurredItemSource4
|
|
property Item src: priv.useBlurItem4 ? blurredItemSource3 : null
|
|
width: blurredItemSource3.width * 0.5
|
|
height: blurredItemSource3.height * 0.5
|
|
}
|
|
BlurItem {
|
|
id: blurredItemSource5
|
|
property Item src: priv.useBlurItem5 ? blurredItemSource4 : null
|
|
width: blurredItemSource4.width * 0.5
|
|
height: blurredItemSource4.height * 0.5
|
|
}
|
|
}
|