Lomiri
BackgroundBlur.qml
1 /*
2  * Copyright (C) 2016 Canonical, Ltd.
3  * Copyright (C) 2022 UBports Foundation
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; version 3.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program. If not, see <http://www.gnu.org/licenses/>.
16  */
17 
18 import QtQuick 2.12
19 import QtGraphicalEffects 1.0
20 import Lomiri.Components 1.3
21 
22 Item {
23  id: root
24 
25  property Item sourceItem
26  property rect blurRect: Qt.rect(0,0,0,0)
27  property bool occluding: false
28 
29  readonly property int minRadius : Math.max(units.gu(4), 64)
30  readonly property int blurRadius : Math.min(minRadius, 128)
31 
32  ShaderEffectSource {
33  id: shaderEffectSource
34  sourceItem: root.sourceItem
35  hideSource: root.occluding
36  sourceRect: root.blurRect
37  live: false
38  enabled: sourceItem != null
39  }
40 
41  FastBlur {
42  id: fastBlur
43  anchors.fill: parent
44  source: shaderEffectSource
45  radius: root.blurRadius
46  cached: false
47  visible: sourceItem != null
48  enabled: visible
49  }
50 
51  Timer {
52  interval: 48
53  repeat: root.visible && (sourceItem != null)
54  running: repeat
55  onTriggered: shaderEffectSource.scheduleUpdate()
56  }
57 
58  // When blur is disabled
59  Rectangle {
60  anchors.fill: parent
61  color: theme.palette.highlighted.background
62  visible: sourceItem == null
63  }
64 }