mirror of
https://github.com/quickshell-mirror/quickshell.git
synced 2026-10-28 02:55:05 +00:00
widgets/cliprect: use layer.effect on content item over property
ShaderEffectSource as a property not parented to an item does not update its sourceItem's QQuickWindow when its own is changed. This lead to use after frees and broken effects when using ClippingRectangle.
This commit is contained in:
2 files changed
+11
-13
No files matched your search
@@ -1,3 +1,5 @@
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
|
||||
///! Rectangle capable of clipping content inside its border.
|
||||
@@ -24,7 +26,7 @@ Item {
|
||||
/// Defaults to true if any corner has a non-zero radius, otherwise false.
|
||||
property /*bool*/alias antialiasing: rectangle.antialiasing
|
||||
/// The background color of the rectangle, which goes under its content.
|
||||
property /*color*/alias color: shader.backgroundColor
|
||||
property color color: "white"
|
||||
/// See @@QtQuick.Rectangle.border.
|
||||
property clippingRectangleBorder border
|
||||
/// Radius of all corners. Defaults to 0.
|
||||
@@ -70,19 +72,14 @@ Item {
|
||||
anchors.fill: parent
|
||||
anchors.margins: root.contentInsideBorder ? root.border.width : 0
|
||||
}
|
||||
}
|
||||
|
||||
ShaderEffect {
|
||||
id: shader
|
||||
anchors.fill: root
|
||||
fragmentShader: `qrc:/Quickshell/Widgets/shaders/cliprect${root.contentUnderBorder ? "-ub" : ""}.frag.qsb`
|
||||
property Rectangle rect: rectangle
|
||||
property color backgroundColor: "white"
|
||||
property color borderColor: root.border.color
|
||||
|
||||
property ShaderEffectSource content: ShaderEffectSource {
|
||||
hideSource: true
|
||||
sourceItem: contentItemContainer
|
||||
layer.enabled: true
|
||||
layer.samplerName: "content"
|
||||
layer.effect: ShaderEffect {
|
||||
fragmentShader: `qrc:/Quickshell/Widgets/shaders/cliprect${root.contentUnderBorder ? "-ub" : ""}.frag.qsb`
|
||||
property Rectangle rect: rectangle
|
||||
property color backgroundColor: root.color
|
||||
property color borderColor: root.border.color
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user