GaussianMaskedBlur.qml 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // Copyright (C) 2022 The Qt Company Ltd.
  2. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
  3. // Qt-Security score:significant reason:default
  4. import QtQuick
  5. import Qt5Compat.GraphicalEffects.private
  6. Item {
  7. id: rootItem
  8. property variant source
  9. property variant maskSource
  10. property real radius: 0.0
  11. property int maximumRadius: 0
  12. property bool cached: false
  13. property bool transparentBorder: false
  14. SourceProxy {
  15. id: sourceProxy
  16. input: rootItem.source
  17. sourceRect: rootItem.transparentBorder ? Qt.rect(-1, -1, parent.width + 2.0, parent.height + 2.0) : Qt.rect(0, 0, 0, 0)
  18. }
  19. SourceProxy {
  20. id: maskSourceProxy
  21. input: rootItem.maskSource
  22. sourceRect: rootItem.transparentBorder ? Qt.rect(-1, -1, parent.width + 2.0, parent.height + 2.0) : Qt.rect(0, 0, 0, 0)
  23. }
  24. ShaderEffectSource {
  25. id: cacheItem
  26. anchors.fill: blur
  27. visible: rootItem.cached
  28. smooth: true
  29. sourceItem: blur
  30. live: true
  31. hideSource: visible
  32. }
  33. GaussianDirectionalBlur {
  34. id: blur
  35. x: transparentBorder ? -maximumRadius - 1: 0
  36. y: transparentBorder ? -maximumRadius - 1: 0
  37. width: horizontalBlur.width
  38. height: horizontalBlur.height
  39. horizontalStep: 0.0
  40. verticalStep: 1.0 / parent.height
  41. source: horizontalBlur
  42. enableMask: true
  43. maskSource: maskSourceProxy.output
  44. radius: rootItem.radius
  45. maximumRadius: rootItem.maximumRadius
  46. transparentBorder: rootItem.transparentBorder
  47. }
  48. GaussianDirectionalBlur {
  49. id: horizontalBlur
  50. width: transparentBorder ? parent.width + 2 * maximumRadius + 2 : parent.width
  51. height: transparentBorder ? parent.height + 2 * maximumRadius + 2 : parent.height
  52. horizontalStep: 1.0 / parent.width
  53. verticalStep: 0.0
  54. source: sourceProxy.output
  55. enableMask: true
  56. maskSource: maskSourceProxy.output
  57. radius: rootItem.radius
  58. maximumRadius: rootItem.maximumRadius
  59. transparentBorder: rootItem.transparentBorder
  60. visible: false
  61. }
  62. }