GaussianInnerShadow.qml 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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 real radius: 0.0
  10. property int maximumRadius: 0
  11. property real horizontalOffset: 0
  12. property real verticalOffset: 0
  13. property real spread: 0
  14. property color color: "black"
  15. property bool cached: false
  16. SourceProxy {
  17. id: sourceProxy
  18. input: rootItem.source
  19. }
  20. ShaderEffectSource {
  21. id: cacheItem
  22. anchors.fill: shaderItem
  23. visible: rootItem.cached
  24. smooth: true
  25. sourceItem: shaderItem
  26. live: true
  27. hideSource: visible
  28. }
  29. ShaderEffect{
  30. id: shadowItem
  31. anchors.fill: parent
  32. property variant original: sourceProxy.output
  33. property color color: rootItem.color
  34. property real horizontalOffset: rootItem.horizontalOffset / rootItem.width
  35. property real verticalOffset: rootItem.verticalOffset / rootItem.height
  36. visible: false
  37. fragmentShader: "qrc:/qt-project.org/imports/Qt5Compat/GraphicalEffects/shaders_ng/gaussianinnershadow_shadow.frag.qsb"
  38. }
  39. GaussianDirectionalBlur {
  40. id: blurItem
  41. anchors.fill: parent
  42. horizontalStep: 0.0
  43. verticalStep: 1.0 / parent.height
  44. source: horizontalBlur
  45. radius: rootItem.radius
  46. maximumRadius: rootItem.maximumRadius
  47. visible: false
  48. }
  49. GaussianDirectionalBlur {
  50. id: horizontalBlur
  51. width: transparentBorder ? parent.width + 2 * maximumRadius : parent.width
  52. height: parent.height
  53. horizontalStep: 1.0 / parent.width
  54. verticalStep: 0.0
  55. source: shadowItem
  56. radius: rootItem.radius
  57. maximumRadius: rootItem.maximumRadius
  58. visible: false
  59. }
  60. ShaderEffectSource {
  61. id: blurredSource
  62. sourceItem: blurItem
  63. live: true
  64. smooth: true
  65. }
  66. ShaderEffect {
  67. id: shaderItem
  68. anchors.fill: parent
  69. property variant original: sourceProxy.output
  70. property variant shadow: blurredSource
  71. property real spread: 1.0 - (rootItem.spread * 0.98)
  72. property color color: rootItem.color
  73. fragmentShader: "qrc:/qt-project.org/imports/Qt5Compat/GraphicalEffects/shaders_ng/gaussianinnershadow.frag.qsb"
  74. }
  75. }