Warning, /plasma/libplasma/examples/applets/testshaders/contents/ui/WobbleExample.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 SPDX-FileCopyrightText: 2013 Sebastian Kügler <sebas@kde.org>
0003
0004 SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006
0007 import QtQuick
0008 import org.kde.plasma.plasmoid
0009 import org.kde.plasma.components as PlasmaComponents
0010
0011 ShaderExample {
0012
0013 pageName: "Wobble"
0014 pageDescription: "Makes an image wobble"
0015
0016 Grid {
0017 id: cfgrid
0018 columns: 2
0019
0020 anchors.top: parent.top
0021 anchors.right: parent.right
0022 width: parent.width * 0.6
0023 height: 96
0024 spacing: 6
0025 columnSpacing: _m
0026 PlasmaComponents.Label {
0027 text: "Amplitude:";
0028 width: parent.width * 0.5;
0029 horizontalAlignment: Text.AlignRight
0030 elide: Text.ElideRight
0031 }
0032 PlasmaComponents.Slider {
0033 width: parent.width * 0.4
0034 id: amplitudeSlider
0035 stepSize: 0.05
0036 minimumValue: 0
0037 maximumValue: 1.0
0038 value: 0.4
0039 }
0040
0041 PlasmaComponents.Label {
0042 text: "Speed:";
0043 horizontalAlignment: Text.AlignRight
0044 width: parent.width * 0.5;
0045 elide: Text.ElideRight
0046 }
0047 PlasmaComponents.Slider {
0048 width: parent.width * 0.4
0049 id: speedSlider
0050 stepSize: 250
0051 minimumValue: 0
0052 maximumValue: 6000
0053 value: 3000
0054 onValueChanged: {
0055 if (timeAnimation != null) {
0056 timeAnimation.duration = maximumValue - value +1;
0057 timeAnimation.restart();
0058 }
0059 }
0060 }
0061 }
0062 PlasmaComponents.Button {
0063 anchors { right: parent.right; bottom: parent.bottom; }
0064 text: "Busy"
0065 checked: Plasmoid.busy
0066 onClicked: {
0067 Plasmoid.busy = !Plasmoid.busy
0068 }
0069 }
0070
0071
0072 Item {
0073 id: imageItem
0074 opacity: 0.8
0075 anchors.fill: parent
0076 anchors.topMargin: 48
0077 Image {
0078 source: "../images/elarun-small.png"
0079 anchors.fill: parent
0080 anchors.margins: parent.height / 10
0081 }
0082 }
0083
0084 ShaderEffect {
0085 id: wobbleShader
0086
0087 anchors.fill: imageItem
0088 //property real time
0089 property var mouse
0090 property var resolution
0091
0092 property int fadeDuration: 250
0093 property real amplitude: 0.04 * amplitudeSlider.value
0094 property real frequency: 20
0095 property real time: 10
0096 property int speed: (speedSlider.maximumValue - speedSlider.value + 1)
0097
0098 property ShaderEffectSource source: ShaderEffectSource {
0099 sourceItem: imageItem
0100 hideSource: true
0101 }
0102
0103 NumberAnimation on time { id: timeAnimation; loops: Animation.Infinite; from: 0; to: Math.PI * 2; duration: 3000 }
0104 Behavior on amplitude { NumberAnimation { duration: wobbleShader.fadeDuration } }
0105
0106 fragmentShader: { //mainItem.opacity = 0;
0107 "uniform lowp float qt_Opacity;" +
0108 "uniform highp float amplitude;" +
0109 "uniform highp float frequency;" +
0110 "uniform highp float time;" +
0111 "uniform sampler2D source;" +
0112 "varying highp vec2 qt_TexCoord0;" +
0113 "void main() {" +
0114 " highp vec2 p = sin(time + frequency * qt_TexCoord0);" +
0115 " gl_FragColor = texture2D(source, qt_TexCoord0 + amplitude * vec2(p.y, -p.x)) * qt_Opacity;" +
0116 "}"
0117 }
0118 }
0119
0120 }