aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarko Niemelä <marko.a.niemela@nokia.com>2012-01-05 10:09:43 +0200
committerMarko Niemelä <marko.a.niemela@nokia.com>2012-01-05 10:09:43 +0200
commit9d40323da79bbb3f7b3e5fea1e21edb04a7dcac8 (patch)
tree338856aa965cf073510b4dd7bc3496beb30bb8f6 /src
parentc626c00c47752be9602f64450b61a325eb0696a9 (diff)
Merged InnerShadow and FastInnerShadow effects
Diffstat (limited to 'src')
-rw-r--r--src/effects/InnerShadow.qml112
-rw-r--r--src/effects/internal/FastInnerShadow.qml (renamed from src/effects/FastInnerShadow.qml)1
-rw-r--r--src/effects/internal/GaussianInnerShadow.qml164
-rw-r--r--src/effects/qmldir1
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