Warning, /plasma/libplasma/examples/applets/testshaders/contents/ui/Shadows.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 SPDX-FileCopyrightText: 2013 Digia Plc and /or its subsidiary(-ies) <http://www.qt-project.org/legal>
0003
0004 This file is part of the examples of the Qt Toolkit.
0005
0006 SPDX-License-Identifier: BSD-3-Clause
0007 */
0008
0009 import QtQuick
0010 //import QtQuick.Particles
0011
0012 import org.kde.plasma.components as PlasmaComponents
0013 import org.kde.ksvg as KSvg
0014 import org.kde.kirigami as Kirigami
0015
0016 ShaderExample {
0017
0018 pageName: "Shadows"
0019 pageDescription: ""
0020 Grid {
0021 id: cfgrid
0022 columns: 2
0023
0024 anchors.top: parent.top
0025 anchors.right: parent.right
0026 width: parent.width * 0.6
0027 height: 96
0028 spacing: 6
0029 columnSpacing: 12
0030 PlasmaComponents.Label {
0031 text: "Distance:";
0032 width: parent.width * 0.5;
0033 horizontalAlignment: Text.AlignRight
0034 elide: Text.ElideRight
0035 }
0036 PlasmaComponents.Slider {
0037 width: parent.width * 0.4
0038 id: distanceSlider
0039 stepSize: 1
0040 minimumValue: 0
0041 maximumValue: 25
0042 value: 8
0043 }
0044
0045 PlasmaComponents.Label {
0046 text: "Opacity:";
0047 horizontalAlignment: Text.AlignRight
0048 elide: Text.ElideRight
0049 width: parent.width * 0.5;
0050 }
0051 PlasmaComponents.Slider {
0052 width: parent.width * 0.4
0053 id: opacitySlider
0054 // stepSize: 250
0055 minimumValue: 0
0056 maximumValue: 1.0
0057 stepSize: 0.05
0058 value: 0.4
0059 }
0060 }
0061
0062 Item {
0063 anchors.fill: parent
0064 clip: true
0065 anchors.margins: -_s
0066
0067 Item {
0068 id: theItem
0069 anchors.fill: parent
0070 anchors.topMargin: _s * 2
0071
0072 Column {
0073 anchors.fill: parent
0074 anchors.margins: _s
0075 anchors.topMargin: _s * 2
0076 spacing: _s
0077
0078 Kirigami.Heading {
0079 text: "Effects on Components"
0080
0081 }
0082 PlasmaComponents.Label {
0083 text:"In Plasma 2, the user interface is based on an OpenGL scenegraph, composition of the UI happens on the graphics card. In the past weeks, we've been working on getting a Plasma 2 shell up and running, and on porting the QML imports of the Plasma Components."
0084 }
0085
0086 Kirigami.Heading {
0087 font.pointSize: 48
0088 anchors.horizontalCenter: parent.horizontalCenter
0089 anchors.topMargin: _s * 3
0090 text: "This is shadowy text."
0091 }
0092 Row {
0093 height: 48
0094 width: parent.width
0095 spacing: _s
0096
0097 Kirigami.Icon {
0098 source: "configure"
0099 width: parent.height
0100 height: width
0101 }
0102 Kirigami.Icon {
0103 source: "dialog-ok"
0104 width: parent.height
0105 height: width
0106 }
0107
0108 KSvg.SvgItem {
0109 id: buttonItem
0110 svg: KSvg.Svg {
0111 id: configIconsSvg
0112 imagePath: "widgets/configuration-icons"
0113 }
0114 elementId: "maximize"
0115 width: parent.height
0116 height: width
0117 }
0118
0119 Kirigami.Icon {
0120 source: "akonadi"
0121 width: parent.height
0122 height: width
0123 }
0124 Kirigami.Icon {
0125 source: "clock"
0126 width: parent.height
0127 height: width
0128 }
0129 }
0130 }
0131 }
0132 ShaderEffectSource {
0133 id: theSource
0134 sourceItem: theItem
0135 hideSource: true
0136 }
0137
0138 ShaderEffect {
0139 anchors.fill: theItem
0140 property ShaderEffectSource source: theSource
0141 property ShaderEffectSource shadow: ShaderEffectSource {
0142 sourceItem: ShaderEffect {
0143 width: theItem.width
0144 height: theItem.height
0145 property size delta: Qt.size(0.0, 1.0 / height)
0146 property ShaderEffectSource source: ShaderEffectSource {
0147 sourceItem: ShaderEffect {
0148 width: theItem.width
0149 height: theItem.height
0150 property size delta: Qt.size(1.0 / width, 0.0)
0151 property ShaderEffectSource source: theSource
0152 fragmentShader: "
0153 uniform lowp float qt_Opacity;
0154 uniform sampler2D source;
0155 uniform highp vec2 delta;
0156 varying highp vec2 qt_TexCoord0;
0157 void main() {
0158 gl_FragColor =(0.0538 * texture2D(source, qt_TexCoord0 - 3.182 * delta)
0159 + 0.3229 * texture2D(source, qt_TexCoord0 - 1.364 * delta)
0160 + 0.2466 * texture2D(source, qt_TexCoord0)
0161 + 0.3229 * texture2D(source, qt_TexCoord0 + 1.364 * delta)
0162 + 0.0538 * texture2D(source, qt_TexCoord0 + 3.182 * delta)) * qt_Opacity;
0163 }"
0164 }
0165 }
0166 fragmentShader: "
0167 uniform lowp float qt_Opacity;
0168 uniform sampler2D source;
0169 uniform highp vec2 delta;
0170 varying highp vec2 qt_TexCoord0;
0171 void main() {
0172 gl_FragColor =(0.0538 * texture2D(source, qt_TexCoord0 - 3.182 * delta)
0173 + 0.3229 * texture2D(source, qt_TexCoord0 - 1.364 * delta)
0174 + 0.2466 * texture2D(source, qt_TexCoord0)
0175 + 0.3229 * texture2D(source, qt_TexCoord0 + 1.364 * delta)
0176 + 0.0538 * texture2D(source, qt_TexCoord0 + 3.182 * delta)) * qt_Opacity;
0177 }"
0178 }
0179 }
0180 property real angle: 0
0181 property point offset: Qt.point(distanceSlider.value * Math.cos(angle), distanceSlider.value * Math.sin(angle))
0182 NumberAnimation on angle { loops: Animation.Infinite; from: 0; to: Math.PI * 2; duration: 6000 }
0183 property size delta: Qt.size(offset.x / width, offset.y / height)
0184 property real darkness: opacitySlider.value // Changeme
0185 fragmentShader: "
0186 uniform lowp float qt_Opacity;
0187 uniform highp vec2 offset;
0188 uniform sampler2D source;
0189 uniform sampler2D shadow;
0190 uniform highp float darkness;
0191 uniform highp vec2 delta;
0192 varying highp vec2 qt_TexCoord0;
0193 void main() {
0194 lowp vec4 fg = texture2D(source, qt_TexCoord0);
0195 lowp vec4 bg = texture2D(shadow, qt_TexCoord0 + delta);
0196 gl_FragColor = (fg + vec4(0., 0., 0., darkness * bg.a) * (1. - fg.a)) * qt_Opacity;
0197 }"
0198 // Slider {
0199 // id: shadowSlider
0200 // anchors.left: parent.left
0201 // anchors.right: parent.right
0202 // anchors.bottom: parent.bottom
0203 // height: 40
0204 // }
0205 }
0206
0207 }
0208 }