aboutsummaryrefslogtreecommitdiffstats
path: root/imports/components/InsetShadow.qml
blob: 6ad17cd9a4c7842b3ad9e8c91eb95522bfd9cf5f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/* Copyright (C) 2015, Jaguar Land Rover. All Rights Reserved.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

import QtQuick 2.0    

ShaderEffect {
    anchors.fill: parent
    property color color
    property real radius: 100
    property real border: 20

    fragmentShader: "
uniform lowp float radius;
uniform lowp float border;
uniform lowp float height;
uniform lowp float width;
uniform lowp float qt_Opacity;
uniform lowp vec4 color;
varying highp vec2 qt_TexCoord0;

void main(void) {
    lowp vec2 dist = min(qt_TexCoord0, vec2(1.0) - qt_TexCoord0);
    // Border shadow
    lowp float xval = smoothstep(0.0, border, dist.x * width);
    lowp float yval = smoothstep(0.0, border, dist.y * height);
    lowp float borderVal = sqrt(yval * xval) * 0.5 + 0.5;
    // Inner shadow
    xval = smoothstep(0.0, radius, dist.x * width);
    yval = smoothstep(0.0, radius, dist.y * width);
    lowp float innerVal = sqrt(yval * xval) * 0.5 + 0.5;

    lowp vec4 innerColor = mix(vec4(0.0, 0.0, 0.0, 0.5), color, innerVal);
    lowp vec4 borderColor = mix(vec4(0.0, 0.0, 0.0, 1.0), innerColor, borderVal);
    gl_FragColor = borderColor * qt_Opacity;
}
    "
}