From 1c7543a64072c07ca6d8741ae352e5f999f4c270 Mon Sep 17 00:00:00 2001 From: Paolo Angelelli Date: Thu, 5 Nov 2015 10:22:11 +0100 Subject: 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 Reviewed-by: Eskil Abrahamsen Blomfeldt --- .../qmlvideofx/qml/qmlvideofx/EffectBillboard.qml | 8 +++++++- .../qml/qmlvideofx/EffectBlackAndWhite.qml | 7 ++++++- .../qml/qmlvideofx/EffectGaussianBlur.qml | 24 ++++++++++++++++++++-- .../qmlvideofx/qml/qmlvideofx/EffectIsolate.qml | 11 ++++++++-- .../qmlvideofx/qml/qmlvideofx/EffectMagnify.qml | 11 ++++++++-- .../qmlvideofx/qml/qmlvideofx/EffectPageCurl.qml | 8 +++++++- .../qmlvideofx/qml/qmlvideofx/EffectPixelate.qml | 8 +++++++- .../qmlvideofx/qml/qmlvideofx/EffectPosterize.qml | 8 +++++++- .../qmlvideofx/qml/qmlvideofx/EffectRipple.qml | 11 ++++++++-- .../qmlvideofx/qml/qmlvideofx/EffectSharpen.qml | 8 +++++++- .../qmlvideofx/qml/qmlvideofx/EffectShockwave.qml | 11 ++++++++-- .../qml/qmlvideofx/EffectSobelEdgeDetection1.qml | 8 +++++++- 12 files changed, 106 insertions(+), 17 deletions(-) (limited to 'examples/multimedia/video/qmlvideofx/qml/qmlvideofx') diff --git a/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectBillboard.qml b/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectBillboard.qml index 021b8d778..c4e1b204e 100644 --- a/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectBillboard.qml +++ b/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectBillboard.qml @@ -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 diff --git a/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectBlackAndWhite.qml b/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectBlackAndWhite.qml index 8cfe5a78a..f1e53e005 100644 --- a/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectBlackAndWhite.qml +++ b/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectBlackAndWhite.qml @@ -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" } diff --git a/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectGaussianBlur.qml b/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectGaussianBlur.qml index 3ccf1c678..7941eac63 100644 --- a/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectGaussianBlur.qml +++ b/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectGaussianBlur.qml @@ -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 diff --git a/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectIsolate.qml b/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectIsolate.qml index 24a281db6..5af8b6fd6 100644 --- a/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectIsolate.qml +++ b/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectIsolate.qml @@ -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" } diff --git a/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectMagnify.qml b/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectMagnify.qml index 5e8c9e0ef..76535ea7e 100644 --- a/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectMagnify.qml +++ b/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectMagnify.qml @@ -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) diff --git a/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectPageCurl.qml b/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectPageCurl.qml index 4ccad8b58..4980b1ddf 100644 --- a/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectPageCurl.qml +++ b/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectPageCurl.qml @@ -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" } diff --git a/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectPixelate.qml b/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectPixelate.qml index cea15c285..40453f93f 100644 --- a/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectPixelate.qml +++ b/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectPixelate.qml @@ -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" } diff --git a/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectPosterize.qml b/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectPosterize.qml index bba48dcd8..c8b1893d1 100644 --- a/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectPosterize.qml +++ b/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectPosterize.qml @@ -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 diff --git a/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectRipple.qml b/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectRipple.qml index e47eadfb4..67eae30ea 100644 --- a/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectRipple.qml +++ b/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectRipple.qml @@ -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 diff --git a/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectSharpen.qml b/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectSharpen.qml index 9b80dd4b2..094270c01 100644 --- a/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectSharpen.qml +++ b/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectSharpen.qml @@ -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" } diff --git a/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectShockwave.qml b/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectShockwave.qml index 0e0520c29..a20f2445e 100644 --- a/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectShockwave.qml +++ b/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectShockwave.qml @@ -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 diff --git a/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectSobelEdgeDetection1.qml b/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectSobelEdgeDetection1.qml index 8da5c26be..936571c89 100644 --- a/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectSobelEdgeDetection1.qml +++ b/examples/multimedia/video/qmlvideofx/qml/qmlvideofx/EffectSobelEdgeDetection1.qml @@ -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 -- cgit v1.2.3