diff options
author | Marko Niemelä <marko.a.niemela@nokia.com> | 2012-01-05 10:09:43 +0200 |
---|---|---|
committer | Marko Niemelä <marko.a.niemela@nokia.com> | 2012-01-05 10:09:43 +0200 |
commit | 9d40323da79bbb3f7b3e5fea1e21edb04a7dcac8 (patch) | |
tree | 338856aa965cf073510b4dd7bc3496beb30bb8f6 /src | |
parent | c626c00c47752be9602f64450b61a325eb0696a9 (diff) |
Merged InnerShadow and FastInnerShadow effects
Diffstat (limited to 'src')
-rw-r--r-- | src/effects/InnerShadow.qml | 112 | ||||
-rw-r--r-- | src/effects/internal/FastInnerShadow.qml (renamed from src/effects/FastInnerShadow.qml) | 1 | ||||
-rw-r--r-- | src/effects/internal/GaussianInnerShadow.qml | 164 | ||||
-rw-r--r-- | src/effects/qmldir | 1 |
4 files changed, 194 insertions, 84 deletions
diff --git a/src/effects/InnerShadow.qml b/src/effects/InnerShadow.qml index 5f4fde0..738753d 100644 --- a/src/effects/InnerShadow.qml +++ b/src/effects/InnerShadow.qml @@ -46,96 +46,44 @@ Item { property variant source property real radius: 0.0 property int maximumRadius: 0 + property real spread: 0.0 + property color color: "black" property real horizontalOffset: 0 property real verticalOffset: 0 - property real spread: 0 - property color color: "black" + property bool fast: false property bool cached: false - SourceProxy { - id: sourceProxy - input: rootItem.source - } - - ShaderEffectSource { - id: cacheItem - anchors.fill: shaderItem - visible: rootItem.cached - smooth: true - sourceItem: shaderItem - live: true - hideSource: visible - } - - ShaderEffect{ - id: shadowItem + Loader { anchors.fill: parent - - property variant original: sourceProxy.output - property color color: rootItem.color - property real horizontalOffset: rootItem.horizontalOffset / rootItem.width - property real verticalOffset: rootItem.verticalOffset / rootItem.height - - fragmentShader: " - uniform highp sampler2D original; - uniform lowp float qt_Opacity; - uniform lowp vec4 color; - uniform highp float horizontalOffset; - uniform highp float verticalOffset; - varying highp vec2 qt_TexCoord0; - - void main(void) { - highp vec2 pos = qt_TexCoord0 - vec2(horizontalOffset, verticalOffset); - lowp float ea = step(0.0, pos.x) * step(0.0, pos.y) * step(pos.x, 1.0) * step(pos.y, 1.0); - lowp float eb = 1.0 - ea; - gl_FragColor = eb * color + ea * color * (1.0 - texture2D(original, pos).a) * qt_Opacity; - } - " + sourceComponent: rootItem.fast ? innerShadow : gaussianInnerShadow } - GaussianBlur { - id: blurItem - anchors.fill: parent - source: ShaderEffectSource { sourceItem: shadowItem; hideSource: true; smooth: true } - radius: rootItem.radius - maximumRadius: rootItem.maximumRadius - } - - ShaderEffectSource { - id: blurredSource - sourceItem: blurItem - live: true - hideSource: true - smooth: true + Component { + id: gaussianInnerShadow + GaussianInnerShadow { + anchors.fill: parent + source: rootItem.source + radius: rootItem.radius + maximumRadius: rootItem.maximumRadius + color: rootItem.color + cached: rootItem.cached + spread: rootItem.spread + horizontalOffset: rootItem.horizontalOffset + verticalOffset: rootItem.verticalOffset + } } - ShaderEffect { - id: shaderItem - anchors.fill: parent - - property variant original: rootItem.source - property variant shadow: blurredSource - property real spread: 1.0 - (rootItem.spread * 0.98) - property color color: rootItem.color - - fragmentShader: " - uniform highp sampler2D original; - uniform highp sampler2D shadow; - uniform lowp float qt_Opacity; - uniform highp float spread; - uniform lowp vec4 color; - varying highp vec2 qt_TexCoord0; - - highp float linearstep(highp float e0, highp float e1, highp float x) { - return clamp((x - e0) / (e1 - e0), 0.0, 1.0); - } - - void main(void) { - lowp vec4 originalColor = texture2D(original, qt_TexCoord0); - lowp vec4 shadowColor = texture2D(shadow, qt_TexCoord0); - shadowColor = mix(vec4(0), color, linearstep(0.0, spread, shadowColor.a)); - gl_FragColor = vec4(mix(originalColor.rgb, shadowColor.rgb, shadowColor.a * qt_Opacity), originalColor.a) * originalColor.a * qt_Opacity; - } - " + Component { + id: innerShadow + FastInnerShadow { + anchors.fill: parent + source: rootItem.source + blur: Math.pow(rootItem.radius / 64.0, 0.4) + color: rootItem.color + cached: rootItem.cached + spread: rootItem.spread + horizontalOffset: rootItem.horizontalOffset + verticalOffset: rootItem.verticalOffset + } } } diff --git a/src/effects/FastInnerShadow.qml b/src/effects/internal/FastInnerShadow.qml index 54c7852..c9c4c9b 100644 --- a/src/effects/FastInnerShadow.qml +++ b/src/effects/internal/FastInnerShadow.qml @@ -39,7 +39,6 @@ ****************************************************************************/ import QtQuick 2.0 -import "internal" Item { id: rootItem diff --git a/src/effects/internal/GaussianInnerShadow.qml b/src/effects/internal/GaussianInnerShadow.qml new file mode 100644 index 0000000..9ad0dd7 --- /dev/null +++ b/src/effects/internal/GaussianInnerShadow.qml @@ -0,0 +1,164 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Graphical Effects module. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Item { + id: rootItem + property variant source + property real radius: 0.0 + property int maximumRadius: 0 + property real horizontalOffset: 0 + property real verticalOffset: 0 + property real spread: 0 + property color color: "black" + property bool cached: false + + SourceProxy { + id: sourceProxy + input: rootItem.source + } + + ShaderEffectSource { + id: cacheItem + anchors.fill: shaderItem + visible: rootItem.cached + smooth: true + sourceItem: shaderItem + live: true + hideSource: visible + } + + ShaderEffect{ + id: shadowItem + anchors.fill: parent + + property variant original: sourceProxy.output + property color color: rootItem.color + property real horizontalOffset: rootItem.horizontalOffset / rootItem.width + property real verticalOffset: rootItem.verticalOffset / rootItem.height + + fragmentShader: " + uniform highp sampler2D original; + uniform lowp float qt_Opacity; + uniform lowp vec4 color; + uniform highp float horizontalOffset; + uniform highp float verticalOffset; + varying highp vec2 qt_TexCoord0; + + void main(void) { + highp vec2 pos = qt_TexCoord0 - vec2(horizontalOffset, verticalOffset); + lowp float ea = step(0.0, pos.x) * step(0.0, pos.y) * step(pos.x, 1.0) * step(pos.y, 1.0); + lowp float eb = 1.0 - ea; + gl_FragColor = eb * color + ea * color * (1.0 - texture2D(original, pos).a) * qt_Opacity; + } + " + } + + DirectionalGaussianBlur { + id: blurItem + anchors.fill: parent + horizontalStep: 0.0 + verticalStep: 1.0 / parent.height + + source: ShaderEffectSource { + sourceItem: horizontalBlur + hideSource: true + visible: false + smooth: true + } + + radius: rootItem.radius + maximumRadius: rootItem.maximumRadius + visible: false + } + + DirectionalGaussianBlur { + id: horizontalBlur + width: transparentBorder ? parent.width + 2 * maximumRadius : parent.width + height: parent.height + + horizontalStep: 1.0 / parent.width + verticalStep: 0.0 + + source: ShaderEffectSource { sourceItem: shadowItem; hideSource: true; smooth: true } + radius: rootItem.radius + maximumRadius: rootItem.maximumRadius + visible: false + } + + ShaderEffectSource { + id: blurredSource + sourceItem: blurItem + live: true + hideSource: true + smooth: true + } + + ShaderEffect { + id: shaderItem + anchors.fill: parent + + property variant original: rootItem.source + property variant shadow: blurredSource + property real spread: 1.0 - (rootItem.spread * 0.98) + property color color: rootItem.color + + fragmentShader: " + uniform highp sampler2D original; + uniform highp sampler2D shadow; + uniform lowp float qt_Opacity; + uniform highp float spread; + uniform lowp vec4 color; + varying highp vec2 qt_TexCoord0; + + highp float linearstep(highp float e0, highp float e1, highp float x) { + return clamp((x - e0) / (e1 - e0), 0.0, 1.0); + } + + void main(void) { + lowp vec4 originalColor = texture2D(original, qt_TexCoord0); + lowp vec4 shadowColor = texture2D(shadow, qt_TexCoord0); + shadowColor = mix(vec4(0), color, linearstep(0.0, spread, shadowColor.a)); + gl_FragColor = vec4(mix(originalColor.rgb, shadowColor.rgb, shadowColor.a * qt_Opacity), originalColor.a) * originalColor.a * qt_Opacity; + } + " + } +} diff --git a/src/effects/qmldir b/src/effects/qmldir index f977a4f..635ee01 100644 --- a/src/effects/qmldir +++ b/src/effects/qmldir @@ -8,7 +8,6 @@ DirectionalBlur 0.1 DirectionalBlur.qml Displace 0.1 Displace.qml DropShadow 0.1 DropShadow.qml FastBlur 0.1 FastBlur.qml -FastInnerShadow 0.1 FastInnerShadow.qml GammaAdjust 0.1 GammaAdjust.qml GaussianBlur 0.1 GaussianBlur.qml Glow 0.1 Glow.qml |