Fix for disallowed property bindings in qml effect files

According to the documentation of ListModel.get, "The returned object
is not guaranteed to remain valid. It should not be used in property
bindings." So the property bindings have been removed, and a js function
has been introduced to update the properties upon list change.

Task-number: QTBUG-49221
Change-Id: Idaed746ca237198b52a3aff0234076331e1512c1
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
This commit is contained in:
Paolo Angelelli
2015-11-05 10:22:11 +01:00
parent 95bd9d58d8
commit 1c7543a640
12 changed files with 106 additions and 17 deletions
@@ -39,10 +39,16 @@ Effect {
name: "Grid Spacing"
value: 0.5
}
onDataChanged: updateGrid()
}
function updateGrid()
{
grid = parameters.get(0).value * 10;
}
// Transform slider values, and bind result to shader uniforms
property real grid: parameters.get(0).value * 10
property real grid: 5.0
property real step_x: 0.0015625
property real step_y: targetHeight ? (step_x * targetWidth / targetHeight) : 0.0
@@ -39,10 +39,15 @@ Effect {
name: "Threshold"
value: 0.5
}
onDataChanged: updateThreshold()
}
function updateThreshold()
{
threshold = parameters.get(0).value;
}
// Transform slider values, and bind result to shader uniforms
property real threshold: parameters.get(0).value
property real threshold: 0.5
fragmentShaderFilename: "blackandwhite.fsh"
}
@@ -44,17 +44,37 @@ Item {
name: "Radius"
value: 0.5
}
onDataChanged: updateBlurSize()
}
function updateBlurSize()
{
if ((targetHeight > 0) && (targetWidth > 0))
{
verticalBlurSize = 4.0 * parameters.get(0).value / targetHeight;
horizontalBlurSize = 4.0 * parameters.get(0).value / targetWidth;
}
}
property alias targetWidth: verticalShader.targetWidth
property alias targetHeight: verticalShader.targetHeight
property alias source: verticalShader.source
property alias horizontalBlurSize: horizontalShader.blurSize
property alias verticalBlurSize: verticalShader.blurSize
Effect {
id: verticalShader
anchors.fill: parent
dividerValue: parent.dividerValue
property real blurSize: 4.0 * parent.parameters.get(0).value / targetHeight
property real blurSize: 0.0
onTargetHeightChanged: {
updateBlurSize()
}
onTargetWidthChanged: {
updateBlurSize()
}
fragmentShaderFilename: "gaussianblur_v.fsh"
}
@@ -62,7 +82,7 @@ Item {
id: horizontalShader
anchors.fill: parent
dividerValue: parent.dividerValue
property real blurSize: 4.0 * parent.parameters.get(0).value / parent.targetWidth
property real blurSize: 0.0
fragmentShaderFilename: "gaussianblur_h.fsh"
source: horizontalShaderSource
@@ -43,11 +43,18 @@ Effect {
name: "Width"
value: 0.5
}
onDataChanged: updateParameters()
}
function updateParameters()
{
targetHue = parameters.get(0).value * 360
windowWidth = parameters.get(1).value * 60
}
// Transform slider values, and bind result to shader uniforms
property real targetHue: parameters.get(0).value * 360
property real windowWidth: parameters.get(1).value * 60
property real targetHue: 0.5 * 360
property real windowWidth: 0.5 * 60
fragmentShaderFilename: "isolate.fsh"
}
@@ -46,6 +46,13 @@ Effect {
name: "Diffraction"
value: 0.5
}
onDataChanged: updateParameters()
}
function updateParameters()
{
radius = parameters.get(0).value * 100;
diffractionIndex = parameters.get(1).value;
}
property real posX: -1
@@ -59,8 +66,8 @@ Effect {
}
// Transform slider values, and bind result to shader uniforms
property real radius: parameters.get(0).value * 100
property real diffractionIndex: parameters.get(1).value
property real radius: 0.5 * 100
property real diffractionIndex: 0.5
onTargetWidthChanged: {
if (posX == -1)
@@ -40,10 +40,16 @@ Effect {
name: "Extent"
value: 0.5
}
onDataChanged: updateParameters()
}
function updateParameters()
{
curlExtent = 1.0 - parameters.get(0).value;
}
// Transform slider values, and bind result to shader uniforms
property real curlExtent: 1.0 - parameters.get(0).value
property real curlExtent: 0.5
fragmentShaderFilename: "pagecurl.fsh"
}
@@ -39,10 +39,16 @@ Effect {
name: "Granularity"
value: 0.5
}
onDataChanged: updateParameters()
}
function updateParameters()
{
granularity = parameters.get(0).value * 20.0;
}
// Transform slider values, and bind result to shader uniforms
property real granularity: parameters.get(0).value * 20
property real granularity: 0.5 * 20
fragmentShaderFilename: "pixelate.fsh"
}
@@ -39,10 +39,16 @@ Effect {
name: "Gamma"
value: 0.5
}
onDataChanged: updateParameters()
}
function updateParameters()
{
gamma = parameters.get(0).value;
}
// Transform slider values, and bind result to shader uniforms
property real gamma: parameters.get(0).value
property real gamma: 0.5
property real numColors: 8.0
@@ -44,11 +44,18 @@ Effect {
name: "Frequency"
value: 0.5
}
onDataChanged: updateParameters()
}
function updateParameters()
{
amplitude = parameters.get(0).value * 0.03;
n = parameters.get(1).value * 7;
}
// Transform slider values, and bind result to shader uniforms
property real amplitude: parameters.get(0).value * 0.03
property real n: parameters.get(1).value * 7
property real amplitude: 0.5 * 0.03
property real n: 0.5 * 7
property real pixDens: Screen.pixelDensity
property real time: 0
@@ -39,10 +39,16 @@ Effect {
name: "Sharpness"
value: 0.5
}
onDataChanged: updateParameters()
}
function updateParameters()
{
amount = parameters.get(0).value * 18;
}
// Transform slider values, and bind result to shader uniforms
property real amount: parameters.get(0).value * 18
property real amount: 0.5 * 18
fragmentShaderFilename: "sharpen.fsh"
}
@@ -40,11 +40,18 @@ Effect {
name: "Amplitude"
value: 0.5
}
onDataChanged: updateParameters()
}
function updateParameters()
{
granularity = parameters.get(0).value * 20;
weight = parameters.get(0).value;
}
// Transform slider values, and bind result to shader uniforms
property real granularity: parameters.get(0).value * 20
property real weight: parameters.get(0).value
property real granularity: 0.5 * 20
property real weight: 0.5
property real centerX
property real centerY
@@ -39,10 +39,16 @@ Effect {
name: "Threshold"
value: 0.5
}
onDataChanged: updateMixLevel()
}
function updateMixLevel()
{
mixLevel = parameters.get(0).value;
}
// Transform slider values, and bind result to shader uniforms
property real mixLevel: parameters.get(0).value
property real mixLevel: 0.5
property real targetSize: 250 - (200 * mixLevel) // TODO: fix ...
property real resS: targetSize
property real resT: targetSize